statsmodel OLSとscikit線形回帰の違い


13

同じ仕事をしているように見える、異なるライブラリからの2つの異なる方法について質問があります。線形回帰モデルを作成しようとしています。

OLSでstatsmodelライブラリを使用するコードは次のとおりです。

X_train, X_test, y_train, y_test = cross_validation.train_test_split(x, y, test_size=0.3, random_state=1)

x_train = sm.add_constant(X_train)
model = sm.OLS(y_train, x_train)
results = model.fit()

print "GFT + Wiki / GT  R-squared", results.rsquared

この印刷はGFT + Wiki / GT R-squared 0.981434611923

2つ目はscikit学習ライブラリの線形モデル法です。

model = LinearRegression()
model.fit(X_train, y_train)

predictions = model.predict(X_test)

print 'GFT + Wiki / GT R-squared: %.4f' % model.score(X_test, y_test)

これは、GFT + Wiki / GT R-squared:0.8543を出力します

私の質問は、両方の方法がR ^ 2の結果を印刷することですが、1つは0.98を印刷し、もう1つは0.85を印刷することです。

私の理解では、OLSはトレーニングデータセットで動作します。だから私の質問、

  • OLSを使用してテストデータセットを操作する方法はありますか?
  • トレーニングデータセットのスコアに意味はありますか(OLSではテストデータセットを使用しませんでした)?私の過去の知識から、テストデータを処理する必要があります。
  • OLSとscikit線形回帰の違いは何ですか。モデルのスコアの計算に使用するのはどれですか?

助けてくれてありがとう。

回答:


14

使用法の面で最初に。statsmodelsの予測は、scikit-learnの場合と非常によく似た方法で取得できますが、返される結果インスタンスを使用する点が異なります。fit

predictions = results.predict(X_test)

予測が与えられると、予測誤差に基づいた統計を計算できます

prediction_error = y_test - predictions

予測統計の良さを計算するための関数の別のリストがありますが、モデルに統合されておらず、Rの2乗も含まれていません。(サンプルデータのうちRの2乗を使用したことは聞いたことがありません。)これらの計算には、ユーザーによるもう少しの作業が必要であり、statsmodelsには同じ統計セットがありません。特に、分類またはバイナリ応答変数を持つモデルにはありません。

他の2つのポイントへ:

線形回帰は、statsmodelsとscikit-learnで同じ基本的な形式です。ただし、実装は異なり、エッジケースで異なる結果を生成する可能性があり、scikit Learnは一般に、より大きなモデルをより多くサポートします。たとえば、statsmodelsは現在、ごく少数の部分でスパース行列を使用しています。

最も重要な違いは、周囲のインフラストラクチャと直接サポートされるユースケースです。

Statsmodelsは、特定のモデルがデータにどの程度適合するか、どの変数が結果を「説明」するか、結果に影響するか、または効果の大きさを知りたい従来のモデルにほぼ従っています。Scikit-learnは、機械学習の伝統に従い、サポートされている主なタスクは予測に「最適な」モデルを選択することです。

結果として、statsmodelsのサポート機能の重点は、仮説検定と適合度測定を含むトレーニングデータの分析にあり、scikit-learnのサポートインフラストラクチャの重点は、範囲外のモデル選択にあります。サンプル予測、したがって「テストデータ」の相互検証。

これは区別を指摘しますが、使用法にもかなり多くの重複があります。statsmodelsも予測を行い、さらに時系列のコンテキストで予測を行います。しかし、statsmodelsで予測のクロスバリデーションを行いたい場合、現在のところ、statsmodelsの推定モデルと一緒にscikit-learnのクロスバリデーション設定を再利用する方が簡単な場合が多くあります。


うーん、statsmodels.tsaのARMAモデルを使用しようとしていますが、予測のインターフェースはまったく異なります。テストデータをフィードする方法を知っていますか?
エフ

1
それは別の質問であり、ドキュメントや例を見る必要があります。時系列モデルでの予測は、シーケンシャルな時間構造と次の期間の値の予測のためにかなり異なります。
ジョセフ

それは別の質問ですが、それでも説明に感謝します。私はドキュメントを読んで、なんとか動作するようにしました。しかし、インターフェイスが異なる理由はまだわかりません。特に、特徴ベクトルを提供して予測(予測)を取得することができない理由。
エフ

ARMAおよびSARIMAXでは、説明変数exogを推定および予測に含めることができます。
ジョセフ

Stackowerlowにこの質問のインターフェイスの違いを住所が:stackoverflow.com/questions/41045752/...を
デビッドデール

1

OLSモデルでは、トレーニングデータを使用してフィットと予測を行います。

LinearRegressionモデルでは、トレーニングデータを使用してフィットし、データをテストして予測するため、R2スコアの結果が異なります。

OLSモデルでテストデータを取得する場合、同じ結果と低い値が必要です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.