[英]Use Sklearn to and Polynomial Regression to fit/predict equation of a curve. Infinite loop error
[英]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.