在Python中应该如何使用cross_val_score()?

问题描述 投票:0回答:1

我在比较Perceptron单次运行给出的准确率和使用Perceptron作为分类器的虹膜数据集的cross_val_score()给出的准确率。

我不确定这个问题。在单次运行中,Perceptron希望用X_train_std和y_train作为参数进行拟合,然后用X_test和y_test计算精度。在使用cross_val_score()时,我应该把X_train_std还是整个X_std放进去?(也就是前面提到的train+test).在使用cross_val_core()时,我应该把X_train_std还是整个X_std放进去?代码如下图所示。预处理:

from sklearn import datasets
import numpy as np
from sklearn.linear_model import Perceptron
from sklearn.model_selection import cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split

iris = datasets.load_iris()
X = iris.data[:, [2, 3]] 
y = iris.target 

print('Class labels:', np.unique(y)) 

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=1, stratify=y)

sc = StandardScaler()
sc.fit(X_train)

X_train_std = sc.transform(X_train)
X_test_std = sc.transform(X_test)

X_std = sc.transform(X)

使用Perceptron进行单次测试:

#One-Shot
ppn = Perceptron(eta0=0.1, random_state=1).fit(X_train_std, y_train)
print('Accuracy test-set: %.3f' % ppn.score(X_test_std, y_test))

产出:

Accuracy test-set: 0.978

Cross_val_score()使用Perceptron运行。

#Cross-Validation
ppn = Perceptron(eta0=0.1, random_state=1)
scores = cross_val_score(ppn, X_std, y, cv=5)
print(scores)

输出:

[1.         0.93333333 0.83333333 0.66666667 0.96666667]
Accuracy: 0.88 (+/- 0.24)
python machine-learning cross-validation perceptron iris-dataset
1个回答
0
投票

通常最推荐的做法是 始终 为了测试的目的,留下一部分数据。

虽然 cross_val_score 是否 应用k-fold交叉验证,更准确地说,默认情况下是5倍交叉验证,这意味着在每个 对折 迭代时,模型是在未见数据上进行预测的,毕竟模型是在所有现有数据上进行训练的。当k-fold交叉验证伴随着参数调整时,这一点尤为重要,在这种情况下,你需要另一个独立于调整的验证步骤。

© www.soinside.com 2019 - 2024. All rights reserved.