如何在交叉验证和GridSearchCV中实现SMOTE

2024-04-20

我对 Python 比较陌生。您能帮助我将 SMOTE 的实施改进为适当的管道吗?我想要的是在每次 k 次迭代的训练集上应用过采样和欠采样,以便模型在平衡的数据集上进行训练,并在不平衡的遗漏部分上进行评估。问题是,当我这样做时,我无法使用熟悉的sklearn用于评估和网格搜索的界面。

是否可以做类似的东西model_selection.RandomizedSearchCV。我对此的看法:

df = pd.read_csv("Imbalanced_data.csv") #Load the data set
X = df.iloc[:,0:64]
X = X.values
y = df.iloc[:,64]
y = y.values
n_splits = 2
n_measures = 2 #Recall and AUC
kf = StratifiedKFold(n_splits=n_splits) #Stratified because we need balanced samples
kf.get_n_splits(X)
clf_rf = RandomForestClassifier(n_estimators=25, random_state=1)
s =(n_splits,n_measures)
scores = np.zeros(s)
for train_index, test_index in kf.split(X,y):
   print("TRAIN:", train_index, "TEST:", test_index)
   X_train, X_test = X[train_index], X[test_index]
   y_train, y_test = y[train_index], y[test_index]
   sm = SMOTE(ratio = 'auto',k_neighbors = 5, n_jobs = -1)
   smote_enn = SMOTEENN(smote = sm)
   x_train_res, y_train_res = smote_enn.fit_sample(X_train, y_train)
   clf_rf.fit(x_train_res, y_train_res)
   y_pred = clf_rf.predict(X_test,y_test)
   scores[test_index,1] = recall_score(y_test, y_pred)
   scores[test_index,2] = auc(y_test, y_pred)

您需要查看管道对象。不平衡学习有一个Pipeline https://imbalanced-learn.org/stable/generated/imblearn.pipeline.Pipeline.html它扩展了 scikit-learn Pipeline,除了 scikit-learn 的 fit_predict()、fit_transform() 和 Predict() 方法之外,还适应 fit_sample() 和 sample() 方法。

在这里看看这个例子:

  • https://imbalanced-learn.org/stable/auto_examples/pipeline/plot_pipeline_classification.html https://imbalanced-learn.org/stable/auto_examples/pipeline/plot_pipeline_classification.html

对于您的代码,您需要这样做:

from imblearn.pipeline import make_pipeline, Pipeline

smote_enn = SMOTEENN(smote = sm)
clf_rf = RandomForestClassifier(n_estimators=25, random_state=1)

pipeline = make_pipeline(smote_enn, clf_rf)
    OR
pipeline = Pipeline([('smote_enn', smote_enn),
                     ('clf_rf', clf_rf)])

然后你可以通过这个pipeline对象 GridSearchCV、RandomizedSearchCV 或 scikit-learn 中的其他交叉验证工具作为常规对象。

kf = StratifiedKFold(n_splits=n_splits)
random_search = RandomizedSearchCV(pipeline, param_distributions=param_dist,
                                   n_iter=1000, 
                                   cv = kf)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在交叉验证和GridSearchCV中实现SMOTE 的相关文章

随机推荐

  • fork() & 内存分配行为

    我在一个禁用交换和禁用内存过量使用的系统上工作 假设我的进程当前消耗 100 MB 内存 而系统可用内存小于 100 MB 如果我执行 fork 它会失败 因为内核也尝试为子进程分配 100 MB 的空间吗 我读过 Linux 在分叉时使用
  • iOS 7 下 UITableView 部分索引相关崩溃

    我有一个简单的表视图部分索引 第一次看起来很好 但如果发生某些类型的交互 强制重新绘制部分索引 则崩溃 方法是 通过点击其中一个单元格来推动视图控制器 点击表视图标题中的搜索栏或以其他方式使其成为第一响应者 转到信息屏幕 然后返回带有该表视
  • 如何更改sqlite中的数据库名称?

    我必须简单地更改数据库名称 但似乎ALTER DATABASE命令在 SQLite 中无效 我的场景是我有一个 SQLite 加密数据库 现在我想重命名它 手动重命名 db 文件后 加密不起作用 所以我尝试使用命令更改数据库的名称 看起来问
  • 如何修复错误:spawnSync powershell.exe ENOENT

    我想使用以下命令通过提升的 PowerShell 控制台安装 Windows 构建工具 npm install global production windows build tools 但每次运行时我都会收到以下错误npm install
  • 如何解决这个java.lang.RuntimeException?

    Google 开发者控制台显示我的应用程序在过去一个月中收到了两个相同的错误 但是这个RuntimeException没有指定错误源自的类或文件 我看不出什么具体的东西 以下是两种不同设备的错误 三星 Galaxy S8 Active cr
  • 在反应本机地图上显示用户位置

    如何在 React Native 地图上显示用户位置
  • 如何以编程方式更改 log4j2 中的 AppenderRef Level?

    我怎样才能改变AppenderRef Level在 log4j2 中 有一个堆栈溢出问题 https stackoverflow com questions 41427352 带答案 这是通过非编程方式解决的 我想要相同的但以编程方式代替
  • Google App Engine 是否识别并使用 .htaccess 文件?

    我正在使用 Google App Engine Launcher 在本地测试我的应用程序localhost 8080 我猜 Google App Engine Launcher 使用 Python 在本地运行服务器 但我读过 htacces
  • 如何将 ChromeDriver 包含在 JAR 中?

    我正在编写一个网络自动化程序 到目前为止 它使用 Selenium 的 FirefoxDriver 运行良好 但是 如果未安装 Firefox 我想让它使用 Chrome 我下载了 ChromeDriver 将其放入 Eclipse 项目的
  • 如何在android中录制视频的同时在视频上绘图,并保存视频和绘图?

    我正在尝试开发一款应用程序 允许我在录制视频时在视频上绘图 然后将录制内容和视频保存在一个 mp4 文件中以供以后使用 另外 我想使用camera2库 特别是我需要我的应用程序在高于API 21的设备上运行 并且我总是避免使用已弃用的库 我
  • 在 WPF 应用程序中绑定可为 null 的日期时间

    我有一个 wpf 应用程序 其中我有这个属性绑定到日期选择器 public Nullable
  • Swift 4 编程三引号

    当他们说 它与结束引用的缩进匹配时 是什么意思 对于占用多行的字符串 请使用三个双引号 只要与结束引号的缩进相匹配 每个带引号的行开头的缩进就会被删除 例如 让引号 虽然左边有空格 实际的行没有缩进 除了这一行 双引号 可以出现而无需转义
  • 查找图像列表的中值

    如果我有一个由 3D ndarray 表示的图像列表 例如 x y color 我可以使用哪些操作来输出具有所有值中值的图像 我正在使用 for 循环 发现它太慢了 这是我使用的矢量化实现NumPy http www numpy org 在
  • 如何在带有流星的车把助手中使用多个参数?

    我正在尝试使用 Meteor 创建一个自定义助手 以下是此处的文档 https github com meteor meteor wiki Handlebars https github com meteor meteor wiki Han
  • UIButton 和外观 API - 支持与否?

    根据UIAppearance协议参考 http developer apple com library ios documentation UIKit Reference UIAppearance Protocol Reference Re
  • GCF 部署失败(区域/计费)

    我无法再部署功能 即使在其他项目上也是如此 我一如既往地部署gcloud functions deploy 现在我收到这个错误 Failed to initialize region action ID 5a9a2fb704b2df80 E
  • 在 Rails 5 应用程序记录类中包含一个模块

    我正在使用应用程序记录来简化整个应用程序的共享逻辑 下面是一个编写布尔值及其逆的范围的示例 这效果很好 class ApplicationRecord lt ActiveRecord Base self abstract class tru
  • 根据条件替换数据框中的行

    我有以下数据框 id f1 f2 1 a 1 3 2 b 3 5 3 c 4 7 我想用一行替换 f1 gt 3 的所有行 id x f1 0 f2 0 所以上面的内容会映射到 id f1 f2 1 a 1 3 2 b 3 5 3 x 0
  • C# 的 switch 语句区分大小写。有没有办法切换它,使其不区分大小写? [复制]

    这个问题在这里已经有答案了 C 的 switch 语句区分大小写 有没有办法切换它 使其不区分大小写 谢谢 但是 我不喜欢这些解决方案 因为 case 条件将是一个变量 并且我不知道它们是否都是 UPPER 或 lower 是的 使用ToL
  • 如何在交叉验证和GridSearchCV中实现SMOTE

    我对 Python 比较陌生 您能帮助我将 SMOTE 的实施改进为适当的管道吗 我想要的是在每次 k 次迭代的训练集上应用过采样和欠采样 以便模型在平衡的数据集上进行训练 并在不平衡的遗漏部分上进行评估 问题是 当我这样做时 我无法使用熟