Python - linear_model.Lasso 的 k 折交叉验证

Ryo*_*Ryo 4 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)
Run Code Online (Sandbox Code Playgroud)

我想执行 k 折(具体来说是 10 次)cross_validation。什么是正确的代码来做到这一点?

Esp*_*azi 5

这是我用来对线性回归模型执行交叉验证并获取详细信息的代码:

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)
Run Code Online (Sandbox Code Playgroud)

正如本书第 108 页所说,就是我们使用 -score 的原因:

Scikit-Learn 交叉验证特征期望效用函数(越大越好)而不是成本函数(越小越好),所以评分函数实际上是 MSE 的反面(即负值),这就是为什么前面的代码在计算平方根之前计算 -scores。

并使用这个简单的函数来可视化结果:

def display_scores(scores):
    print("Scores:", scores)
    print("Mean:", scores.mean())
    print("Standard deviation:", scores.std())
Run Code Online (Sandbox Code Playgroud)