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

Python 如何正确使用sklearn预测拟合误差,python,scikit-learn,regression,Python,Scikit Learn,Regression,我正在使用sklearn对一些数据拟合线性回归模型。特别是,我的响应变量存储在数组y中,我的特征存储在矩阵X中 我用下面的代码训练一个线性回归模型 from sklearn.linear_model import LinearRegression model = LinearRegression() model.fit(X,y) 一切似乎都很好 然后假设我有一些新数据,我想预测它们的响应变量。这很容易做到 predictions = model.predict(

我正在使用
sklearn
对一些数据拟合线性回归模型。特别是,我的响应变量存储在数组
y
中,我的特征存储在矩阵
X

我用下面的代码训练一个线性回归模型

    from sklearn.linear_model import LinearRegression
    model = LinearRegression()
    model.fit(X,y)
一切似乎都很好

然后假设我有一些新数据,我想预测它们的响应变量。这很容易做到

    predictions = model.predict(X_new)
我的问题是,这个预测的错误是什么? 根据我的理解,我应该计算模型的均方误差:

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

基本上,我对新数据的真实预测应该是一个随机数,由高斯分布计算得出,平均值
预测值
和sigma^2=
model_mse
。您是否同意这一点?您是否知道在
sklearn
中是否有更快的方法来实现这一点?

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

最基本的用法是:

from sklearn.cross_validation import train_test_split

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

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

最基本的用法是:

from sklearn.cross_validation import train_test_split

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

这取决于您的培训数据- 如果它的分布很好地代表了“真实世界”,并且有足够的规模(参见学习理论,as),那么我大体上同意

也就是说,如果您正在寻找一种实用的方法来评估您的模型,为什么不按照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。

这取决于您的培训数据- 如果它的分布很好地代表了“真实世界”,并且有足够的规模(参见学习理论,as),那么我大体上同意

也就是说,如果您正在寻找一种实用的方法来评估您的模型,为什么不按照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。

我不同意。你不同意真正的预测是预测本身吗?通过比较在
X_new
上进行的预测及其相应的已知目标
y_new
来计算模型的性能。你也可以通过运行
model.score(X_new,y_new)
简单地计算R平方分数。我同意你的观点,我确实计算了R平方分数来选择我最好的模型。问题是,一旦你提出了你最好的线性模型,你就必须把一个错误与你的预测联系起来。啊,我明白你的意思了。我想我不同意。你不同意真正的预测是预测本身吗?通过比较在
X_new
上进行的预测及其相应的已知目标
y_new
来计算模型的性能。你也可以通过运行
model.score(X_new,y_new)
简单地计算R平方分数。我同意你的观点,我确实计算了R平方分数来选择我最好的模型。问题是,一旦你提出了你最好的线性模型,你就必须把一个错误与你的预测联系起来。啊,我明白你的意思了。谢谢,我已经这么做了。问题是,在我验证模型并选择最佳拟合参数后,与预测相关的误差是多少?谢谢,我已经这样做了。问题是在我验证模型并选择最佳拟合参数后,与预测相关的误差是多少?