Python - 对于linear_model.Lasso,k折叠交叉验证

时间:2017-02-14 14:16:30

标签: python linear-regression cross-validation

我使用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。什么是正确的代码呢?

2 个答案:

答案 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()