如何正确使用sklearn来预测拟合的误差

时间:2016-02-06 21:08:12

标签: python scikit-learn regression

我正在使用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中有更快的方法吗?

2 个答案:

答案 0 :(得分:0)

您可能希望在训练数据集上验证您的模型。我建议探索交叉验证子模块sklearn.cross_validation

最基本的用法是:

from sklearn.cross_validation import train_test_split

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

答案 1 :(得分:0)

这取决于你的训练数据 - 如果它的分布是“现实世界”和足够大小的良好表现(参见学习理论,如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)

Idea正在隐藏您的学习算法(和您自己)的测试集 - 不要使用这些数据训练和不优化参数。

最后你应该只使用测试集进行性能评估(错误),它应该提供一个没有偏见的mse。