如何将机器学习模型的正确率从 80%提高到 90%以上
2020-09-11 13:00:40
本文最初发表在 datascience 网站,由 InfoQ 中文站翻译并分享。
前 言
如果你已经完成了自己的一些数据科学项目,那么现在,你可能已经意识到,达到 80% 的正确率还不错,并不是很糟糕!但在现实中, 80% 的正确率是无法达到的。事实上,在我工作过的大多数公司,都希望最低正确率至少要达到 90%(或他们正在关注的任何指标)。
因此,为了显著提高你的正确率,我将与你讨论你可以掌握哪五个技巧。我强烈建议你要通读这五种技巧,因为这些技巧有很多细节,而这些细节尚不为大多数初学者所知。
读完本文后,我想你应该会明白,在决定你的机器学习模型的性能方面起作用的变量,比你想象的要多得多。
话虽如此,本文介绍了你可以掌握的五个技巧,能够改善你的机器学习模型!
1. 缺失值处理
我见过的最大的错误之一,就是人们对缺失值的处理,这不一定是他们的错。网上很多资料都说,通常要通过均数填补法(Mean imputation)来处理缺失值,用给定特征的均值来替换空值,但这通常并不是最好的方法。
例如,假设我们有一个现实年龄和健康评估分数的表格,并假设一个 80 岁的老人缺少健康评估分数。如果我们从 15 岁到 80 岁的年龄范围内去平均健康评估分数,那么这名 80 岁老人的健康评估分数似乎会比他实际应该的分数要高得多。
因此,你要问自己的第一个问题就是,为什么数据一开始就缺失了?
接下来,让我们考虑处理缺失数据的其他方法,除了平均值 / 中值填补法:
- 特征预测建模法:回到我刚才提到的关于年龄和健康评估分数的例子,我们可以建立年龄和健康评估得分之间的关系进行建模,然后使用这个模型来找出给定年龄的预期健康评估分数。这可以通过多种技术来实现,包括回归分析、方差分析等等。
- K 最近邻填补法:使用 K 最近邻填补法,缺失数据用另一个相似样本的值来填充,对于那些不知道的,就用距离函数(即欧几里得距离)来确定 K 最近邻的相似度。
- 删除行:最后,你可以删除该行。通常不建议这样做,但当你有大量的数据要处理时,这样的做法是可以接受的。
2. 特征工程
第二个可以显著改进机器学习模型的技巧是通过特征工程。特征工程是将原始数据转换为特征的过程,这些特征更好地表示人们试图解决的潜在问题。不过,这个步骤并没有具体的方法,这就是为什么说数据科学既是一门科学,又是一门艺术。尽管如此,但还是有一些你可以考虑的事情,如下。
- 将 DateTime 变量转换为一周中的某一天、一年中的某一个月等等。
- 为变量进行分桶操作。(如,对于高度变量,可以这样分桶:100~149 厘米、150~199 厘米、200~249 厘米等等)。
- 组合多个特征和 / 或值来创建新特征。例如,由 Kaggle 主持的泰坦尼克号生存挑战赛中正确率最高的模型之一,设计了一个名为 “is_women_or_child” 的新变量,如果这个人是妇女或儿童,则为真,否则为假。
3. 特征选择
可以大大提高模型正确率的第三个技巧是特征选择,即选择数据集中最相关 / 最有价值的特征。太多的特征会导致算法过拟合,而太少的特征又会导致算法的欠拟合。
有两种我喜欢使用的主要方法,你可以使用它们来帮助你进行特征选择。
- 特征重要性法:一些算法,如随机森林或 XGBoost,允许你确定哪些特征在预测目标变量的值时是最“重要”的。通过快速创建其中的一个模型并进行特征重要性的处理,你将了解到哪些变量比其他变量更为有用。
- 降维法:作为最常用的降维分析技术之一,主成分分析(Principal Component Analysis,PCA)采用了大量的特征,并使用线性代数将它们约简到较少的特征。
4. 集成学习算法
改进机器学习模型的最简单技巧之一就是简单地选择一种更好的机器学习算法。如果你还不知道什么是集成学习(Ensemble Learning)算法,那么现在就是学习它的时候了!
集成学习是一种将多种学习算法结合使用的方法。这样做的目的是,与单独使用单个算法相比,它能允许你实现更高的预测性能。
流行的集成学习算法包括随机森林算法、XGboost 算法、梯度提升算法和 AdaBoost 算法等。为了解释集成学习算法如此强大的原因,我将举一个随机森林的例子:
随机森林包括使用原始数据经过自助法(Bootstrap)处理的数据集创建多个决策树。然后,模型选择每个决策树的所有预测的模式(大多数)。这有什么意义呢?通过依赖“多数为胜”模型,它降低了单个树出错的风险。
例如,如果我们创建一个决策树,即第三个决策树,它将预测为 0。但是如果我们依赖所有 4 个决策树的模式,那么预测值将为 1。这就是集成学习的力量!
超参数调整
最后,有些技巧虽然不经常谈到,但仍然非常重要,那就是调整模型超参数。你必须清楚地理解你正在使用的机器学习模型,否则,你很难理解这个模型的超参数是什么。
来看一下随机森林的所有超参数:
class sklearn.ensemble.RandomForestClassifier(n_estimators=100, *, criterion='gini', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features='auto', max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, bootstrap=True, oob_score=False, n_jobs=None, random_state=None, verbose=0, warm_start=False, class_weight=None, ccp_alpha=0.0, max_samples=None
例如,了解min_impurity_decrease是什么可能是个好主意,这样,当你想让你的机器学习模型更宽容时,可以对这个参数进行调整!
结语
通过阅读本文,我相信,当涉及到将模型的正确率从 80% 提高到 90% 以上时,你现在应该会有更多的想法了。本文提到的这些信息,也会让你在未来的数据科学项目更加顺利。
作者简介:
Terence S,学生,数据科学、数据分析及 MBA 专业。
原文链接:
https://towardsdatascience.com/how-i-consistently-improve-my-machine-learning-models-from-80-to-over-90-accuracy-6097063e1c9a
如何将机器学习模型的正确率从 80%提高到 90%以上相关推荐
- 提升10%!如何将机器学习模型准确率从80%提高到90%以上
全文共2402字,预计学习时长7分钟 图源:unsplash 说实在的,如果你有过项目实践经历,就会明白80%的精确度并不算糟糕.但在现实世界中,人们期望精确度不会少于80%.事实上,我工作过的大多数 ...
- 在实际项目中,如何选择合适的机器学习模型?
https://blog.csdn.net/gitchat/article/details/78913235 本文来自作者 chen_h 在 GitChat 上分享 「在实际项目中,如何选择合适的机器 ...
- 盘点实际项目应用中的最佳机器学习模型
点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 作者简介:chen_h,AI 算法工程师,擅长利用 TensorFlow 处理 NLP 问题 ...
- 机器学习模型 知乎_算法有没有价值观?知乎内容推荐算法解析
[IT168 技术]今年,我们已经听到了多家内容平台整改的消息,对于标题党.蹭热点等行为,用户早已经见怪不怪.同样是知识分享平台,知乎倒是躲过了每一次整改,肯定有人会说是幸运,也肯定有人会从理性的角度 ...
- 机器学习——模型评估,选择与验证
文章目录 机器学习--模型评估,选择与验证 训练集与测试集 为什么要有训练集与测试集 如何划分训练集与测试集 欠拟合与过拟合 欠拟合 过拟合 偏差与方差 模型误差来源 偏差与方差 验证集与交叉验证 为 ...
- 机器学习 --- 模型评估、选择与验证
机器学习的目的是使学到的模型不仅对已知数据而且对未知数据都能有很好的预测能力.不同的学习方法会训练出不同的模型,不同的模型可能会对未知数据作出不同的预测,然而我们手上并没有"未知" ...
- 机器学习——模型评估、选择与验证
选择 评估 验证 训练集与测试集 过(欠)拟合 偏差与方差 验证集与交叉验证 衡量回归的性能指标 准确度的陷阱与混淆矩阵 精准率和召回率 F1 Score ROC AUC sklearn中的分类性能指 ...
- 你的机器学习模型为什么会出错?奉上四大原因解析及五条改进措施
对开发者来说,目前有一系列的机器学习模型可供选择.雷锋网(公众号:雷锋网)了解,可以用线性回归模型预测具体的数值,用逻辑回归模型对不同的运算结果进行归类,以及用神经网络模型处理非线性的问题等等. 不论 ...
- 掌握这些步骤,机器学习模型问题药到病除
作者 | Cecelia Shao 编译 | ronghuaiyang 来源 | AI公园(ID:AI_Paradise) [导读]这篇文章提供了切实可行的步骤来识别和修复机器学习模型的训练.泛化和优 ...
最新文章
- 征文 | 第一届全国计算社会科学高端论坛
- java itext 设计器_使用Java组件itext 生成pdf的介绍
- Dockerfile里的VOLUMES关键字
- zip和unzip上的Java要点
- 本地修改指向服务器,本地修改指向服务器
- “大龄”程序员的出路
- iOS 国际化多语言设置 xcode7
- 红橙Darren视频笔记 反射注解泛型简介
- 给linux添加新硬盘
- Python基础知识之二
- 【数值分析】python实现复化高斯积分
- 为什么我的QQ会被冻结?
- windows server 2008 关机后安装自动更新,反复启动,不能进入系统
- 腾讯觅影正式对外开放,可用AI进行医学图像分析和辅助诊疗
- Django1.9重写用户模型报错has no attribute 'USERNAME_FIELD'
- 以码为梦,心向远方,路在脚下|211应届计算机毕业生的迷茫
- 任务管理器中的PID是什么 怎么查看
- mysql reads sql data_在其声明中使用DETERMINISTIC,NO SQL或READS SQL DATA并启用二进制日志记录...
- 什么是gnuplot
- 软件测试技术的发展史,软件测试的发展史
热门文章
- 微型计算机步进电机控制,步进电机的微型计算机控制
- 自然语言处理中句子相似度计算的几种方法
- 出国读博前希望有人告诉我
- C++ size_t 与 size_type区别
- 提到“子类”和“子类型”是不同的
- 类的包访问权限:《Java编程思想》中一段话的困惑
- 解决运行eclipse内存不足的问题
- Deno 正式发布,彻底弄明白和 node 的区别
- 【开放书】《命令行数据科学指南(第二版)》
- Kaggle 年度报告出炉:数据科学家年轻多金,薪资近百万