- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 stratifiedKFold 和 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 折叠的工作(或者这就是我认为我正在做的事情......),只是为了能够获得评估我的系统所需的四个数据集。预先感谢您的帮助。
最佳答案
RandomizedSearchCV 用于寻找分类器的最佳参数。它选择随机参数并用它们拟合您的模型。之后需要评估这个模型,你可以选择策略,它是cv参数。然后用另一个参数。你不需要做两次。你可以直接写:
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)
clf_random.fit(X, y)
一切都会自动完成。之后您应该查看 cv_results_ 或 best_estimator_ 等参数。如果你不想搜索分类器的最佳参数 - 你不应该使用 RandomizedSearchCV。只是为了做到这一点。
这是一个很好的 example .
UPD:尝试这样做:
clf = RandomForestClassifier()
random_grid = _create_hyperparameter_finetuning_grid()
clf_random = RandomizedSearchCV(estimator = clf, param_distributions = random_grid,
score = 'accuracy', n_iter = 100,
cv = StratifiedKFold(n_splits=split_number),
verbose=2, random_state=42, n_jobs = -1)
clf_random.fit(X, y)
print(clf_random.cv_results_)
这是你想要的吗?
cv_results_ 显示所有分割和所有迭代的训练和测试的准确性。
关于python - 如何使用 RandomizedSearchCV 正确实现 StratifiedKFold,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51944281/
StratifiedKFold、StratifiedShuffleSplit、StratifiedKFold + Shuffle 之间的区别是什么? 我应该什么时候使用每一种?当我获得更好的准确度分数
我正在参加 APTOS 2019 Kaggle 竞赛,并尝试组合 5 层折叠,但在正确实现 StratifiedKFold 时遇到问题。 我尝试用谷歌搜索 fastai 讨论,但没有看到任何解决方案。
我读过一些关于各种简历方法的帖子。但我不明白的是,为什么在函数中打乱数据会导致准确性显着提高,以及何时这样做是正确的。 在我的时间序列数据集中,大小为 921 *10080其中每行是一个区域中特定位置
我正在尝试使用 stratifiedKFold 和 RandomizedSearchCV 来实现随机森林分类器。问题是我可以看到 RandomizedSearchCV 的“cv”参数用于进行交叉验证。
我有一个 pandas DataFrame,其中包含需要拆分成平衡切片的字符串和浮点列,以便训练 sklearn 管道。 理想情况下,我会使用 StratifiedKFold在 DataFrame 上
我有一个数据集,可以以 python 字典 或 列表 的形式传递给多输入神经网络: 示例: #dict {'input1': X1, 'input2': X2, 'input3': X3}, {'ou
我正在尝试使用 StratifiedKFold 创建用于非 sklearn 机器学习工作流程的训练/测试/验证拆分。因此,DataFrame 需要拆分然后保持原样。 我正在尝试像下面这样使用 .val
我正在处理一个分类问题,我需要预测文本数据的类别。我需要为我正在考虑使用 GridSearchCV 的分类模型进行超参数调整。我还需要执行 StratifiedKFold,因为我的数据不平衡。我知道如
我想在RandomForestClassifier中执行GridSearchCV,但是数据不平衡,所以我使用StratifiedKFold: from sklearn.model_selection
这个问题在这里已经有了答案: difference between StratifiedKFold and StratifiedShuffleSplit in sklearn (3 个回答) 10 个
我想为我的 StratifiedKFold 找到最佳分割,并在最佳分割上构建我的模型。代码如下: def best_classifier(clf,k,x,y): skf = Stratifie
我一直在尝试在 python 2.7 中实现这段代码。它给了我这个错误。我将不胜感激帮助。我有最新版本的 sklearn(0.18.1) 和 xgboost(0.6) import xgboost a
使用 Sklearn 分层 kfold 拆分,当我尝试使用多类拆分时,我收到错误消息(见下文)。当我尝试使用二进制进行拆分时,它没有问题。 num_classes = len(np.unique(y_
我是一名优秀的程序员,十分优秀!