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