如何对数据应用交叉验证?

时间:2018-12-20 17:36:00

标签: machine-learning scikit-learn random-forest cross-validation

我想使用平均交叉验证得分来评估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

1 个答案:

答案 0 :(得分:0)

您不必再次适应就可以在训练数据上了解模型的性能。您可以使用以下命令

import pandas as pd
pd.DataFrame(model_random.cv_results_) 

查看mean_test_score列。请记住,这是交叉验证测试时的性能。这将使您了解针对RandomizedSearchCV选择的特定超参数组合,模型的性能如何。可以使用

提取最佳的超参数组合和相应的模型
model_random.best_params_
model_random.best_estimator_

谈到您的实际测试数据,通常人们不使用交叉验证。 只是在那里做一个预测,就像您在这部分中所做的一样。在后台,它使用model_random.best_estimator_进行预测。

Y_predicted = model_random.predict(x_test.values)
print('f1_score (macro): ', f1_score(y_test, Y_pred, average='macro') )

请查看此documentation以获得更多说明。