我使用linear_model.Lasso
编写了以下代码:
X_train, X_test, y_train, y_test = cross_validation.train_test_split(X,y,test_size=0.2)
clf = linear_model.Lasso()
clf.fit(X_train,y_train)
accuracy = clf.score(X_test,y_test)
print(accuracy)
我想执行k fold(特定10次)cross_validation。什么是正确的代码呢?
答案 0 :(得分:4)
这是我用来在线性回归模型上执行交叉验证的代码,也是获取详细信息的代码:
from sklearn.model_selection import cross_val_score
scores = cross_val_score(clf, X_Train, Y_Train, scoring="neg_mean_squared_error", cv=10)
rmse_scores = np.sqrt(-scores)
如第108页的this一书所述,这就是我们使用-score的原因:
Scikit-Learn交叉验证功能需要实用功能 (越大越好)而不是成本函数(越低越好),所以 评分函数实际上与MSE相反(即,a 负值),这就是前面的代码计算-scores的原因 在计算平方根之前。
并使用这个简单的函数可视化结果:
def display_scores(scores):
print("Scores:", scores)
print("Mean:", scores.mean())
print("Standard deviation:", scores.std())
答案 1 :(得分:2)
您可以使用model_selection
模块运行10倍:
# for 0.18 version or newer, use:
from sklearn.model_selection import cross_val_score
# for pre-0.18 versions of scikit, use:
from sklearn.cross_validation import cross_val_score
X = # Some features
y = # Some classes
clf = linear_model.Lasso()
scores = cross_val_score(clf, X, y, cv=10)
此代码将返回10个不同的分数。你可以很容易地得到平均值:
scores.mean()