データセットに多変数線形回帰を適合させて、モデルがデータをどれだけうまく説明しているかを調べようとしています。私の予測因子は120件の寸法を持っていると私は177個のサンプルがありますstatsmodelsを使用して統計モデルとscikit-learnが異なるモデルパフォーマンス評価
X.shape =(177120)、y.shape =(177)
を、私は非常に良いR二乗0.76のを取得しますProb(F-統計)は0.06であり、これは有意性に向かい、データの良好なモデルを示す。
scikit-learnの線形回帰を使用して5倍交差検定r2スコアを計算しようとすると、平均r2スコアが-5.06となり、一般化のパフォーマンスが非常に悪いです。
2つのモデルは、列車のr2スコアが正確に同じである必要があります。では、なぜこれらのライブラリのパフォーマンス評価が異なるのですか?どちらを使うべきですか?これについてのあなたのコメントに心から感謝します。なぜなら、訓練サンプルと出て左クロスバリデーションサンプル間の差のrsquaredで
# using statsmodel:
import statsmodels.api as sm
X = sm.add_constant(X)
est = sm.OLS(y, X)
est2 = est.fit()
print(est2.summary())
# using scikitlearn:
from sklearn.linear_model import LinearRegression
lin_reg = LinearRegression()
lin_reg.fit(X, y)
print 'train r2 score:',lin_reg.score(X, y)
cv_results = cross_val_score(lin_reg, X, y, cv = 5, scoring = 'r2')
msg = "%s: %f (%f)" % ('r2 score', cv_results.mean(),cv_results.std())
print(msg)
ありがとうuser333700私は列車とテストのスコアの違いを知っていますが、ここでprob(F統計)は何を意味していますか?統計的有意性やそれに対する傾向は、良いモデルを持っていることを意味しますか? – Behrouz
モデルは、r統計量に関してはかなり良く、f統計量に関してはうまく適合しますが、サンプル外予測に関してはあまり適していません。 rsquaredもf-testも過大適合のために不利になることはありません。より良い点検は、AICまたはBICとなります。最も重要でない説明変数を削除した後。問題は、モデルが訓練データに適合するが、パラメータ推定値は信頼性が低く、説明変数ごとの観測数が少ないため正確に推定できないということです。私はあなたの標準誤差と信頼区間がほとんどかなり大きいと思う。 – user333700