2016-07-19 14 views
0

私は、sklearn linear_modelを使用して線形回帰結果のグラフをプロットし、statsmodels.apiを使用して学習結果の詳細サマリーを取得する予定でした。しかし、2つのパッケージは同じ入力に対して非常に異なる結果を生成します。統計モデルとsklearnで異なる線形回帰係数

たとえば、sklearnの定数項は7.8e-14ですが、statsモデルの定数項は48.6です。両方の方法のための私のコードを(両方の方法を使用したとき、私は定数項のためのxでの1の列を追加しました)succintです:

# Use statsmodels linear regression to get a result (summary) for the model. 
def reg_statsmodels(y, x): 
    results = sm.OLS(y, x).fit() 
    return results 

# Use sklearn linear regression to compute the coefficients for the prediction. 
def reg_sklearn(y, x): 
    lr = linear_model.LinearRegression() 
    lr.fit(x, y) 
    return lr.coef_ 

入力は、ここに投稿するにはあまりにも複雑です。特異な入力xがこの問題を引き起こした可能性はありますか?

PCAを使用して3-Dプロットを作成すると、sklearnの結果は良好な近似ではないようです。いくつかの説明は何ですか?私はまだ視覚化したいので、sklearn線形回帰の実装で問題を修正することは非常に役に立ちます。

答えて

1

あなたが

I added a column of 1's in x for constant term when using both methods 

しかし、線形回帰のdocumentation

LinearRegression(fit_intercept=True, [...]) 

はそれがデフォルトでインターセプトを適合することを言うことを言います。これは、あなたが定数項の違いを持つ理由を説明することができます。

他の係数については、変数のうちの2つが高度に相関する場合に差異が生じる可能性があります。列のうちの2つが同一である最も極端な場合を考えてみましょう。次に、2つのうちのいずれかの前の係数を減少させることは、他方を増加させることによって補償することができる。これは私がチェックする最初のものです。

関連する問題