微调超参数不会提高分类器的分数

2024-02-14

我遇到一个问题,即使用 GridSearchCV 微调超参数并不能真正改善我的分类器。我认为改进应该比这更大。我使用当前代码获得的分类器的最大改进约为 +-0.03。我有一个包含八列和不平衡二进制结果的数据集。对于评分,我使用 f1,并使用 KFold 进行 10 次分割。我希望有人能发现一些不对劲的地方,我应该看看?谢谢你!

我使用以下代码:

model_parameters = {
    "GaussianNB": {     
    },
    "DecisionTreeClassifier": {
        'min_samples_leaf': range(5, 9),
        'max_depth': [None, 0, 1, 2, 3, 4]
    },
    "KNeighborsClassifier": {
        'n_neighbors': range(1, 10),
        'weights': ["distance", "uniform"]
    },
    "SVM": {
        'kernel': ["poly"],
        'C': np.linspace(0, 15, 30)
    },
    "LogisticRegression": {
        'C': np.linspace(0, 15, 30),
        'penalty': ["l1", "l2", "elasticnet", "none"]
    }
}

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4)
n_splits = 10
scoring_method = make_scorer(lambda true_target, prediction: f1_score(true_target, prediction, average="micro"))
cv = KFold(n_splits=n_splits, random_state=random_state, shuffle=True)

for model_name, parameters in model_parameters.items():

    # Models is a dict with 5 classifiers
    model = models[model_name]
    grid_search = GridSearchCV(model, parameters, cv=cv, n_jobs=-1, scoring=scoring_method, verbose=False).fit(X_train, y_train)
    
    cvScore = cross_val_score(grid_search.best_estimator_, X_test, y_test, cv=cv, scoring='f1').mean()
    classDict[model_name] = cvScore

如果你的类不平衡,当你做 Kfold 时你应该保持两个目标之间的比例。

折叠不平衡可能会导致非常糟糕的结果

check 分层 K-Folds 交叉验证器 https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.StratifiedKFold.html

提供训练/测试索引来分割训练/测试集中的数据。

这个交叉验证对象是 KFold 的变体,它返回 分层褶皱。折叠是通过保留百分比来进行的 每个班级的样本。

还有很多处理不平衡数据集的技术。根据上下文:

  • 对少数类进行上采样(例如使用从 sklearn 重新采样 https://elitedatascience.com/imbalanced-classes)
  • 对多数类进行抽样不足(也是这个lib https://pypi.org/project/imbalanced-learn/有一些有用的工具可以进行下采样)
  • 使用特定的 ML 模型处理不平衡

例如,在SVC中,创建模型时有一个参数,class_weight='balanced'

clf_3 = SVC(kernel='linear', 
            class_weight='balanced', # penalize
            probability=True)

这将对少数类别的错误进行更多惩罚。

您可以这样更改您的配置:

"SVM": {
        'kernel': ["poly"],
        'C': np.linspace(0, 15, 30),
        'class_weight': 'balanced'

    }

对于 LogisticRegression,您可以设置权重,反映类的比例

LogisticRegression(class_weight={0:1, 1:10}) # if problem is a binary one

以这种方式更改网格搜索字典:

"LogisticRegression": {
        'C': np.linspace(0, 15, 30),
        'penalty': ["l1", "l2", "elasticnet", "none"],
        'class_weight':{0:1, 1:10}
    }

无论如何,该方法取决于所使用的模型。例如,对于神经网络,您可以更改损失函数,通过加权计算来惩罚少数类(与逻辑回归相同)

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

微调超参数不会提高分类器的分数 的相关文章

  • Python 子进程(ffmpeg)仅在我按 Ctrl-C 程序时启动?

    我正在尝试使用 Cygwin 和 Python 2 7 并行运行一些 ffmpeg 命令 这大概是我所拥有的 import subprocess processes set commands ffmpeg i input mp4 outpu
  • pandas Wide_to_long 后缀参数

    我对在 pandas 中使用 Wide to long 时的参数有疑问 有一个参数叫suffix我不明白 在文档中它说 后缀 str 默认 d 捕获所需后缀的正则表达式 d 捕获数字后缀 没有数字的后缀可以用否定字符类 D 指定 您还可以进
  • 如何使用 Python 裁剪图像中的矩形

    谁能给我关于如何裁剪两个矩形框并保存它的建议 我已经尝试过这段代码 但效果不佳 import cv2 import numpy as np Run the code with the image name keep pressing spa
  • 如何让python优雅地失败?

    我只是想知道如何让 python 在所有可能的错误中以用户定义的方式失败 例如 我正在编写一个处理 大 项目列表的程序 并且某些项目可能不符合我定义的格式 如果 python 检测到错误 它目前只会输出一条丑陋的错误消息并停止整个过程 但是
  • Python GTK + webkit - 在 gtk.main() 之后插入 JavaScript

    我在终端中尝试了这个 一切正常 但是如果我在脚本内运行这个 我无法在 gtk main 之后插入 JavaScript import gtk import webkit w gtk Window b webkit WebView w add
  • 神经网络中的时间序列提前预测(N点提前预测)大规模迭代训练

    N 90 使用神经网络进行提前预测 我试图预测提前 3 分钟 即提前 180 点 因为我将时间序列数据压缩为每 2 个点的平均值为 1 所以我必须预测 N 90 超前预测 我的时间序列数据以秒为单位给出 值在 30 90 之间 它们通常从
  • scikit-learn 和tensorflow 有什么区别?可以一起使用它们吗?

    对于这个问题我无法得到满意的答案 据我了解 TensorFlow是一个数值计算库 经常用于深度学习应用 而Scikit learn是一个通用机器学习框架 但它们之间的确切区别是什么 TensorFlow 的目的和功能是什么 我可以一起使用它
  • Python——捕获异常的效率[重复]

    这个问题在这里已经有答案了 可能的重复 Python 常见问题解答 异常有多快 https stackoverflow com questions 8107695 python faq how fast are exceptions 我记得
  • Django 模型字段默认基于另一个模型字段

    我使用 Django Admin 构建一个管理站点 有两张表 一张是ModelA其中有数据 另一个是ModelB里面什么也没有 如果一个模型字段b b in ModelB为None 可以显示在网页上 值为ModelA的场a b 我不知道该怎
  • Tensorflow 不分配完整的 GPU 内存

    Tensorflow 默认分配所有 GPU 内存 但我的新设置实际上只有 9588 MiB 11264 MiB 我预计大约 11 000MiB 就像我的旧设置一样 张量流信息在这里 from tensorflow python client
  • Python 3在for循环中更改字典键的值不起作用

    我的 python 3 代码没有按预期工作 def addFunc x y print x y def subABC x y z print x y z def doublePower base exp print 2 base exp d
  • Pandas groupby apply 执行缓慢

    我正在开发一个涉及大量数据的程序 我正在使用 python pandas 模块来查找数据中的错误 这通常工作得非常快 然而 我当前编写的这段代码似乎比应有的速度慢得多 我正在寻找一种方法来加快速度 为了让你们正确测试它 我上传了一段相当大的
  • 使用 WSGI 在 Windows XAMPP 中设置 Python 路径

    我正在 Webfaction 上设置实时服务器的开发版本 在本地计算机上的虚拟 Apache 服务器环境 运行没有任何错误 中运行 Django 应用程序 XP 使用 Python 2 6 运行 XAMPP Lite 我可以提交更改通过 G
  • 如何正确导入主代码和模块中同时使用的模块?

    假设我有一个主脚本 main py 它导入另一个 python 文件import coolfunctions另一个 import chores 现在 假设 Coolfunctions 也使用家务活中的东西 因此我声明import chore
  • 根据第三个变量更改散点图中的标记样式

    我正在处理多列字典 我想绘制两列 然后根据第三列和第四列更改标记的颜色和样式 我很难改变 pylab 散点图中的标记样式 我的方法适用于颜色 不幸的是不适用于标记样式 x 1 2 3 4 5 6 y 1 3 4 5 6 7 m k l l
  • Jupyter Notebook 中的深色模式绘图 - Python

    我正在使用 Jupyter Notebook 目前正在使用 JupyterThemes 的深色日光主题 我注意到我的绘图不是处于黑暗模式 并且文本仍然是黑色并且在日光照射的背景上无法读取 JupyterThemes 的自述文件建议在 ipy
  • 在 scipy 中创建新的发行版

    我试图根据我拥有的一些数据创建一个分布 然后从该分布中随机抽取 这是我所拥有的 from scipy import stats import numpy def getDistribution data kernel stats gauss
  • 如何使用 os.chdir 转到减去最后一步的路径?

    例如 一个方法传递了一个路径作为参数 这个路径可能是 C a b c d 如果我想使用 os chdir 更改为 C a b 怎么办 c 没有最后一个文件夹 os chdir 可以接受 命令吗 os chdir 可以采取 作为论点 是的 然
  • 在 HDF5 (PyTables) 中存储 numpy 稀疏矩阵

    我在使用 PyTables 存储 numpy csr matrix 时遇到问题 我收到此错误 TypeError objects of type csr matrix are not supported in this context so
  • Streamlabs API 405 响应代码

    我正在尝试使用Streamlabs API https dev streamlabs com Streamlabs API 使用 Oauth2 来创建应用程序 因此 首先我将使用我的应用程序的用户发送到一个授权链接 其中包含我的应用程序的客

随机推荐

  • 如何取消对 jar 的签名?

    有没有办法取消 java jar 文件的签名 我尝试在开发环境中使用一些已签名的 jar 但遇到安全异常 因此我想取消对这些 jar 的签名 以便稍后在准备部署时对其进行签名 我不知道答案 但我会这样做 解压相关的 jar 文件 jar 只
  • 如何创建腾讯微博(qq)分享按钮?

    我需要实现相当于网站中文翻译的 Tweet 按钮 即not我已经得到的 在微博上分享 按钮 使用生成器here http open weibo com sharebutton 而是一个腾讯 QQ微博分享按钮 到目前为止我所做的 订阅微博 阅
  • 将 sed 的输出存储到变量中[重复]

    这个问题在这里已经有答案了 我想将文件的第二行存储到一个变量中 所以我这样做 sed n 2p myfile 我希望存储的输出sed命令写入名为的变量line 执行此操作的正确语法是什么 Use 命令替换 http tldp org LDP
  • CAD 爆炸图算法

    我正在制作一个程序来查看 3D CAD 模型 并希望构建自动分解视图 将看到的所有组件都是轴对称的 有些可能不是 但大多数是 我想找出一种算法 用于自动将组件中的零件移动到分解视图位置 这是我想通过算法实现的示例 当然不包括标签 我必须使用
  • NaN 和 None 有什么区别?

    我正在使用 pandas 读取 csv 文件的两列readcsv 然后将值分配给字典 这些列包含数字和字母的字符串 有时会出现单元格为空的情况 在我看来 读取该字典条目的值应该是None但反而nan被安排了 一定None更能描述空单元格 因
  • 类型“Observable<{}>”不可分配给类型“Observable |”布尔值'

    我试图跟随本教程 https angular io docs ts latest guide router html route config 但我收到错误 路径匹配 完整 我尝试改变 角度 路由器 to 3 0 0 beta 2 还是同样
  • 检查 Linux 系统上 python 多处理中的 fork 行为

    我必须从许多进程中访问一组大型且不可选取的 python 对象 因此 我想确保这些对象没有被完全复制 根据评论this https stackoverflow com questions 5549190 is shared readonly
  • 如何在 Intellij 13 中创建测试目录?

    我是一个使用 v13 的 Intellij 菜鸟 我有一个简单的 java 项目 默认 结构 如下所示 idea src com test mytestClass1 mytestClass2 现在 我想编写一个简单的测试 并将该代码放在 s
  • “latin-1”编解码器无法对字符进行编码

    我的代码适用于英语文本 但不适用于俄语 search text 我该如何修复它 错误文本 UnicodeEncodeError latin 1 编解码器无法对位置 41 46 中的字符进行编码 主体 不是有效的 Latin 1 如果您想以
  • C++ 从图中删除顶点

    3he 以下使用 boost 1 46 1 进行编译 include
  • 无法使用 MPMoviePlayerViewController 播放视频

    我使用以下 ViewController m 创建了一个新项目 当我运行该应用程序时 我可以看到一个预期来源 大小 38 100 250 163 的框 但它是黑色的并且没有视频播放 Xcode 中有一个奇怪的输出 2012 08 23 15
  • Java调用重载方法[重复]

    这个问题在这里已经有答案了 考虑这个代码段 class StockServer StockServer String company int Shares double currentPrice double cashOnHand doub
  • phpMyAdmin 4.5.0.2 中无法识别 MySql“NOT IN”子句

    一个简单的 SQL 语句 例如 SELECT 1 from MyTable WHERE 1 NOT IN 2 生成 4 Errors were found during analysis 1 Unrecognized keyword nea
  • 测量网格之间的距离

    对于我的项目 我需要测量两个 STL 文件之间的距离 我编写了一个脚本 允许读取文件 将它们相对于彼此放置在所需的位置 现在 在下一步中 我需要检查一个物体到另一个物体的距离 库上是否有可用的函数或脚本允许我执行此过程 因为那时我想要定义诸
  • Flutter ListView.builder() 小部件的交叉轴占据了整个屏幕高度

    我在用ListView builder scrollDirection Horizo ntal 小部件内Container在颤振中 ListView 的主轴占据了预期的整个屏幕宽度 我希望ListView的crossAxis 垂直方向 占据
  • 如何通过将 python 中的列表与单独的列表进行比较来对列表进行排序? [复制]

    这个问题在这里已经有答案了 假设我有一个清单 A cat dog mouse horse bird rabbit 将用作参考列表 以及另一个列表 B dog rabbit horse bird cat dog 它具有与参考列表完全相同的元素
  • 颜色必须是 aRGB 十六进制值?

    所以我之前为污染数据集运行了一些代码 并且代码运行得很好 现在 我收到此错误 颜色必须是 aRGB 十六进制值 我唯一的代码行如下 pollution jawn pd read excel ObservationData irkfioc c
  • C++ 中的友元函数可以有一个类型具有私有析构函数的默认参数吗?

    在下一个示例中 类U带有私有析构函数有一个友元函数foo 这个友元函数有类型参数U带默认值U class U U friend void foo U void foo U Clang 和 MSVC 接受此代码 但 GCC 拒绝它并出现错误
  • “提交”和“修订”有什么区别

    提交和修订有什么区别 我们使用 SVN 并从 Atlassian Fisheye 获取指标 Fisheye 中有一份报告显示了 顶级提交者 按修订 和 顶级提交者 按提交 这里没有人能告诉我有什么区别 非常感谢 安迪 一次提交可以包含许多文
  • 微调超参数不会提高分类器的分数

    我遇到一个问题 即使用 GridSearchCV 微调超参数并不能真正改善我的分类器 我认为改进应该比这更大 我使用当前代码获得的分类器的最大改进约为 0 03 我有一个包含八列和不平衡二进制结果的数据集 对于评分 我使用 f1 并使用 K