【发布时间】:2019-01-27 09:10:41
【问题描述】:
我正在尝试使用 layerifiedKFold 和 RandomizedSearchCV 来实现一个随机森林分类器。问题是我可以看到 RandomizedSearchCV 的“cv”参数用于进行交叉验证。但我不明白这怎么可能。 我需要有 X_train、X_test、y_train、y_test 数据集,如果我尝试按照我所看到的方式实现我的代码,就不可能拥有这四个数据集...... 我见过类似以下的事情:
cross_val = StratifiedKFold(n_splits=split_number)
clf = RandomForestClassifier()
n_iter_search = 45
random_search = RandomizedSearchCV(clf, param_distributions=param_dist,
n_iter=n_iter_search,
scoring=Fscorer, cv=cross_val,
n_jobs=-1)
random_search.fit(X, y)
但问题是我需要用 X_train 和 y_train 数据集拟合我的数据,并使用 X_train 和 X_test 数据集预测结果,以便能够比较训练数据和测试数据中的结果以评估可能过拟合... 这是我的一段代码,我知道我做了两次工作,但我不知道如何正确使用 stratifiedKfold 和 RandomizedSearchCV:
...
cross_val = StratifiedKFold(n_splits=split_number)
index_iterator = cross_val.split(features_dataframe, classes_dataframe)
clf = RandomForestClassifier()
random_grid = _create_hyperparameter_finetuning_grid()
clf_random = RandomizedSearchCV(estimator = clf, param_distributions = random_grid, n_iter = 100, cv = cross_val,
verbose=2, random_state=42, n_jobs = -1)
for train_index, test_index in index_iterator:
X_train, X_test = np.array(features_dataframe)[train_index], np.array(features_dataframe)[test_index]
y_train, y_test = np.array(classes_dataframe)[train_index], np.array(classes_dataframe)[test_index]
clf_random.fit(X_train, y_train)
clf_list.append(clf_random)
y_train_pred = clf_random.predict(X_train)
train_accuracy = np.mean(y_train_pred.ravel() == y_train.ravel())*100
train_accuracy_list.append(train_accuracy)
y_test_pred = clf_random.predict(X_test)
test_accuracy = np.mean(y_test_pred.ravel() == y_test.ravel())*100
confusion_matrix = pd.crosstab(y_test.ravel(), y_test_pred.ravel(), rownames=['Actual Cultives'],
colnames=['Predicted Cultives'])
...
如您所见,我正在做两次分层 K 折叠的工作,(或者这就是我认为我正在做的事情......)只是为了能够获得评估我的系统所需的四个数据集. 提前感谢您的帮助。
【问题讨论】:
标签: python random-forest