我想使用平均交叉验证分数评估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
您不必再次适合知道模型在培训数据上的性能。您可以使用以下命令
import pandas as pd
pd.DataFrame(model_random.cv_results_)
查看mean_test_score
列。请记住,这是交叉验证的测试折叠的性能。这将使您了解模型的性能,对于由随机搜索选择的特定超级参数组合。最佳的超级参数组合和相应的模型可以使用
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') )
查看此文档以获取更多说明。