【发布时间】:2019-05-21 06:20:20
【问题描述】:
我想使用平均交叉验证分数来评估 ML 模型。
我将数据拆分为训练集和测试集。
但我不知道是否必须使用训练数据或测试数据来使用交叉验证分数来评估模型。
这是我的代码的一部分:
train, test = train_test_split(basic_df, test_size=0.3, random_state=42)
# Separate the labels from the features and convert features & labels to numpy arrays
x_train=train.drop('successful',axis=1)
y_train=train['successful']
x_test=test.drop('successful',axis=1)
y_test=test['successful']
model = RandomForestClassifier()
model_random = RandomizedSearchCV(estimator = model, param_distributions = random_grid, n_iter = 100, cv = 5, verbose=2, random_state=42, n_jobs = -1)
model_random.fit(x_train, y_train)
print('Accuracy score: ', model_random.score(x_test,y_test))
print('Average Cross-Val-Score: ', np.mean(cross_val_score(model_random, x_train, y_train, cv=5))) # 5-Fold Cross validation
Y_predicted = model_random.predict(x_test.values)
print('f1_score (macro): ', f1_score(y_test, Y_pred, average='macro') )
主要问题在以下代码行:
print('Average Cross-Val-Score: ', np.mean(cross_val_score(model_random, x_train, y_train, cv=5))) # 5-Fold Cross validation
是正确的还是应该像这样使用测试集:
print('Average Cross-Val-Score: ', np.mean(cross_val_score(model_random, x_test, y_test, cv=5))) # 5-Fold Cross validation
【问题讨论】:
-
不确定我是否完全按照;但我们从不在 test 集上执行 CV...
-
好的,这是我的问题。所以上面的cross_val_score代码sn-p和x_train和y_train是对的
-
是的,但是您执行 CV 2 次(在
model_random.fit()和cross_val_score中),老实说,当您将cross_val_score应用于估算器时,不确定确切的结果是什么这已经是一个 CV 对象,比如model_random这里... -
如果我不使用第二行,如何获得交叉验证分数? (我想检查我是否正确)? print('Accuracy score: ', model_random.score(x_test,y_test)) 是否足够?
标签: machine-learning scikit-learn random-forest cross-validation