簡體   English   中英

如何正確使用sklearn來預測擬合誤差

[英]how to properly use sklearn to predict the error of a fit

我正在使用sklearn將線性回歸模型擬合到一些數據。 特別是,我的響應變量存儲在數組y ,特征存儲在矩陣X

我用以下代碼訓練線性回歸模型

    from sklearn.linear_model import LinearRegression
    model = LinearRegression()
    model.fit(X,y)

一切似乎都很好。

然后,假設我有一些新數據X_new ,我想預測它們的響應變量。 這樣做很容易做到

    predictions = model.predict(X_new)

我的問題是,與該預測相關的誤差是什么? 根據我的理解,我應該計算模型的均方誤差:

    from sklearn.metrics import mean_squared_error
    model_mse = mean_squared_error(model.predict(X),y)

基本上,我對新數據的真實預測應該是根據具有均值predictions和sigma ^ 2 = model_mse的高斯分布計算出的隨機數。 您是否同意這一點,並且您知道在sklearn是否有更快的方法?

您可能想在訓練數據集上驗證模型。 我建議探索交叉驗證子模塊sklearn.cross_validation

最基本的用法是:

from sklearn.cross_validation import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y)

這取決於您的訓練數據-如果其分布可以很好地表示“現實世界”並且具有足夠的大小(請參閱學習理論,如PAC ),那么我通常會同意。

也就是說-如果您正在尋找評估模型的實用方法,為什么不使用Kris建議的測試集? 我通常使用網格搜索來優化參數:

#split to training and test sets
X_train, X_test, y_train, y_test =train_test_split(
X_data[indices], y_data[indices], test_size=0.25)

#cross validation gridsearch 
params = dict(logistic__C=[0.1,0.3,1,3, 10,30, 100])
grid_search = GridSearchCV(clf, param_grid=params,cv=5)
grid_search.fit(X_train, y_train)

#print scores and best estimator
print 'best param: ', grid_search.best_params_ 
print 'best train score: ', grid_search.best_score_
print 'Test score: ', grid_search.best_estimator_.score(X_test,y_test)

這個想法對您的學習算法(以及您自己)隱藏了測試集-不要使用此數據來訓練和優化參數。

最后,您應該僅將測試集用於性能評估(錯誤),它應提供無偏的mse。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM