10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

如何将机器学习模型的正确率从 80%提高到 90%以上

  • 2020-09-11
  • 本文字数:2319 字

    阅读完需:约 8 分钟

如何将机器学习模型的正确率从 80%提高到 90%以上

本文最初发表在 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


2020-09-11 08:006850
用户头像
刘燕 InfoQ高级技术编辑

发布了 1112 篇内容, 共 584.2 次阅读, 收获喜欢 1981 次。

关注

评论 1 条评论

发布
用户头像
很不错的总结!这才是干货
2020-09-11 08:09
回复
没有更多了
发现更多内容

好难过!八年深漂,搞Android开发要价50万(1),腾讯、网易必问的20道题Android面试题

android 程序员 移动开发

如何将项目提交到GitHub,mmkv如何保证进程安全

android 程序员 移动开发

如何自学Android gityuan ?,2021年互联网大厂Android面经总结

android 程序员 移动开发

字节跳动面试,第三面挂了,这原因我服了,程序员进阶知识点

android 程序员 移动开发

如何写一篇杀手级的软件工程师简历,通过五轮面试斩获offer阿里实习生亲述

android 程序员 移动开发

如何正确的在 Android 上使用协程 ?,kotlin数组全排列

android 程序员 移动开发

字节跳动+京东+360,帮助程序员提高核心竞争力的30条建议

程序员 移动开发

如何写出一份“有理有据使人信服”的Android项目设计文档

android 程序员 移动开发

架构实战营作业 -- 模块七

冬瓜茶

字节+谷歌超全Kotlin学习王炸笔记!Kotlin入门到精通,我的头条面试经历分享

android 程序员 移动开发

字节跳动抖音安卓客户端日常实习 3+1 面经(已 OC,贼厉害

android 程序员 移动开发

王者荣耀商城异地多活架构设计

Imaginary

字节跳动大神讲座:我们除了技术一无所有,2020Android程序员职业规划

android 程序员 移动开发

女程序员的逆袭之路, 三面通过 15K,HR 说你只值 10K,写给正在求职的安卓开发

android 程序员 移动开发

好难过!八年深漂,搞Android开发要价50万,android面试基础题

android 程序员 移动开发

架构实战营作业 -- 模块六

冬瓜茶

如何才能更容易拿到大厂Offer?阿里大佬十年面试了-2000-人,总结了这7-条---

android 程序员 移动开发

如何教女友学编程?你先去洗澡,我构思一下,androidapp开发语言

android 程序员 移动开发

如果你使用Jetpack中还没踩过这些坑,请务必收下这篇文章

android 程序员 移动开发

如果你是小白,想学Android;如果你是Android开发者,安卓开发快速上手

android 程序员 移动开发

妙用AccessibilityService黑科技实现微信自动加好友拉人进群聊

android 程序员 移动开发

如何加载100M的图片却不撑爆内存,-撑爆了怎么处理?100M-的大图,如何预防-OOM

android 程序员 移动开发

如何学好设计,做好架构? 设计原则才是关键,精通android游戏开发

android 程序员 移动开发

奔三女程序员不禁三思,“中年危机,kotlin常量

android 程序员 移动开发

架构实战营作业 -- 模块五

冬瓜茶

字节跳动面试:对于Tersorflow你怎么理解的,有做过人工智能的应用吗

android 程序员 移动开发

如何加载100M的图片却不撑爆内存,一张 100M 的大图,如何预防 OOM?

android 程序员 移动开发

字节Android岗面试:Handler中有Loop死循环,为什么没有阻塞主线程

android 程序员 移动开发

字节跳动1面Too simple2面怀疑人生,宅家修炼“65天,flutter下拉列表

android 程序员 移动开发

字节跳动已经10万人了?渣本双非Android程序员怎么上车?

android 程序员 移动开发

字节跳动测试开发1,android小游戏开发

android 程序员 移动开发

如何将机器学习模型的正确率从 80%提高到 90%以上_AI&大模型_Terence S_InfoQ精选文章