提高机器学习模型准确率的八大方法

提高机器学习模型准确率的八大方法

1. 增加更多数据

持有更多的数据永远是个好主意。相比于去依赖假设和弱相关,更多的数据允许数据进行“自我表达”。数据越多,模型越好,正确率越高。

我明白,有时无法获得更多数据。比如,在数据科学竞赛中,训练集的数据量是无法增加的。但对于企业项目,我建议,如果可能的话,去索取更多数据。这会减少由于数据集规模有限带来的痛苦。

2. 处理缺失值和异常值

训练集中缺失值与异常值的意外出现,往往会导致模型正确率低或有偏差。这会导致错误的预测。这是由于我们没能正确分析目标行为以及与其他变量的关系。所以处理好缺失值和异常值很重要。

仔细看下面一幅截图。在存在缺失值的情况下,男性和女性玩板球的概率相同。但如果看第二张表(缺失值根据称呼“Miss”被填补以后),相对于男性,女性玩板球的概率更高。

<span>提高机器学习模型准确率的八大方法</span>

左侧:缺失值处理前;右侧:缺失值处理后

从上面的例子中,我们可以看出缺失值对于模型准确率的不利影响。所幸,我们有各种方法可以应对缺失值和异常值:

缺失值:对于连续变量,可以把缺失值替换成平均值、中位数、众数。对于分类变量,可以把变量作为一个特殊类别看待。你也可以建立模型预测缺失值。KNN 为处理缺失值提供了很好的方法。想了解更多这方面内容,推荐阅读《Methods to deal and treat missing values》。

异常值:你可以删除这些条目,进行转换,分箱。如同缺失值,你也可以对异常值进行区别对待。想了解更多这方面内容,推荐阅读《How to detect Outliers in your dataset and treat them?》。

3. 特征工程学

这一步骤有助于从现有数据中提取更多信息。新信息作为新特征被提取出来。这些特征可能会更好地解释训练集中的差异变化。因此能改善模型的准确率。

假设生成对特征工程影响很大。好的假设能带来更好的特征集。这也是我一直建议在假设生成上花时间的原因。特征工程能被分为两个步骤:

特征转换:许多场景需要进行特征转换:

A) 把变量的范围从原始范围变为从 0 到 1 。这通常被称作数据标准化。比如,某个数据集中第一个变量以米计算,第二个变量是厘米,第三个是千米,在这种情况下,在使用任何算法之前,必须把数据标准化为相同范围。

B) 有些算法对于正态分布的数据表现更好。所以我们需要去掉变量的偏向。对数,平方根,倒数等方法可用来修正偏斜。

<span>提高机器学习模型准确率的八大方法</span>

C) 有些时候,数值型的数据在分箱后表现更好,因为这同时也处理了异常值。数值型数据可以通过把数值分组为箱变得离散。这也被称为数据离散化。

创建新特征:从现有的变量中衍生出新变量被称为特征创建。这有助于释放出数据集中潜藏的关系。比如,我们想通过某家商店的交易日期预测其交易量。在这个问题上日期可能和交易量关系不大,但如果研究这天是星期几,可能会有更高的相关。在这个例子中,某个日期是星期几的信息是潜在的。我们可以把这个信息提取为新特征,优化模型。

4. 特征选择

特征选择是寻找众多属性的哪个子集合,能够最好的解释目标变量与各个自变量的关系的过程。

你可以根据多种标准选取有用的特征,例如:

所在领域知识:根据在此领域的经验,可以选出对目标变量有更大影响的变量。

可视化:正如这名字所示,可视化让变量间的关系可以被看见,使特征选择的过程更轻松。

统计参数:我们可以考虑 p 值,信息价值(information values)和其他统计参数来选择正确的参数。

PCA:这种方法有助于在低维空间表现训练集数据。这是一种降维技术。 降低数据集维度还有许多方法:如因子分析、低方差、高相关、前向后向变量选择及其他。

5. 使用多种算法

使用正确的机器学习算法是获得更高准确率的理想方法。但是说起来容易做起来难。

这种直觉来自于经验和不断尝试。有些算法比其他算法更适合特定类型数据。因此,我们应该使用所有有关的模型,并检测其表现。

<span>提高机器学习模型准确率的八大方法</span>

来源:Scikit-Learn 算法选择图

6. 算法的调整

我们都知道机器学习算法是由参数驱动的。这些参数对学习的结果有明显影响。参数调整的目的是为每个参数寻找最优值,以改善模型正确率。要调整这些参数,你必须对它们的意义和各自的影响有所了解。你可以在一些表现良好的模型上重复这个过程。

例如,在随机森林中,我们有 max_features, number_trees, random_state, oob_score 以及其他参数。优化这些参数值会带来更好更准确的模型。

想要详细了解调整参数带来的影响,可以查阅《Tuning the parameters of your Random Forest model》。下面是随机森林算法在scikit learn中的全部参数清单:

RandomForestClassifier(n_estimators=10, 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,bootstrap=True, oob_score=False, n_jobs=1, random_state=None, verbose=0, warm_start=False,class_weight=None)

7. 集成模型

在数据科学竞赛获胜方案中最常见的方法。这个技术就是把多个弱模型的结果组合在一起,获得更好的结果。它能通过许多方式实现,如:

  • Bagging (Bootstrap Aggregating)
  • Boosting

想了解更多这方面内容,可以查阅《Introduction to ensemble learning》。

使用集成方法改进模型正确率永远是个好主意。主要有两个原因:

  1. 集成方法通常比传统方法更复杂;
  2. 传统方法提供好的基础,在此基础上可以建立集成方法。

注意!

到目前为止,我们了解了改善模型准确率的方法。但是,高准确率的模型不一定(在未知数据上)有更好的表现。有时,模型准确率的改善是由于过度拟合。

8. 交叉验证

如果想解决这个问题,我们必须使用交叉验证技术(cross validation)。交叉验证是数据建模领域最重要的概念之一。它是指,保留一部分数据样本不用来训练模型,而是在完成模型前用来验证。

<span>提高机器学习模型准确率的八大方法</span>

这种方法有助于得出更有概括性的关系。想了解更多有关交叉检验的内容,建议查阅《Improve model performance using cross validation》。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119602.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mysql数据库多表查询练习题[通俗易懂]

    mysql数据库多表查询练习题[通俗易懂]下面练习题中设计四个表。分别为:dept表emp表salgrade表tbyear表1.查出至少有一个员工的部门。显示部门编号、部门名称、部门位置、部门人数。SELECTd.deptno,d.dname,d.loc,e1.`count(*)`FROMdeptdINNERJOIN(SELECTdeptno,COUNT(*)FROMemp…

    2022年5月21日
    56
  • 2021版idea激活码99年csdn_在线激活

    (2021版idea激活码99年csdn)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月28日
    84
  • 华为服务器安装nas系统,服务器 nas 配置[通俗易懂]

    华为服务器安装nas系统,服务器 nas 配置[通俗易懂]服务器nas配置内容精选换一换为了确保DBService日常数据安全,或者系统管理员需要对DBService进行重大操作(如升级或迁移等)时,需要对DBService数据进行备份,从而保证系统在出现异常或未达到预期结果时可以及时进行数据恢复,将对业务的影响降到最低。系统管理员可以通过FusionInsightManager创建备份DBService任务并备份数据。支表1列出了云备份CBR的…

    2022年6月23日
    62
  • npn饱和截止放大怎么判断_二极管饱和状态

    npn饱和截止放大怎么判断_二极管饱和状态幼儿园水平理解三极管截止、放大和饱和状态!书上看不懂,听课听不懂的过来!绕不开的三极管结构以NPN为例,晶体三极管的结构,这是很多人不想看的,但是确实是非常重要的!不看结构是理解不了工作原理的!(这样记忆:N是negative,负,代表多子为电子;P是positive,正,代表多子为空穴)注意观察三极管的结构,有助于理解工作时的状态。两张图结合起来看,略作解释:1.图中空心为空穴带正…

    2022年9月10日
    0
  • sql server嵌套查询实验_exists嵌套查询

    sql server嵌套查询实验_exists嵌套查询嵌套查询一带有IN谓词的子查询1.查询与“刘晨”在同一个系学习的学生selectsno,snamefromstudentwheresdeptin( selectsdept fromstudent wheresname=’刘晨’)二.带有比较运算符的子查询1.找出每个学生超过他自己选修课程平均成绩的课程号selectsno,cnofrom…

    2022年8月10日
    19
  • 两个求和符号如何用计算机,计算:两个求和符号∑∑怎么办「建议收藏」

    两个求和符号如何用计算机,计算:两个求和符号∑∑怎么办「建议收藏」先将其中一个未知数当常量,另一个未知数从1至n依次递加后各项式子相加。然后再将另一个未知数从1至n依次递加后各项式子相加便是结果。∑是一个求和符号,汉语名称为西格玛(大写Σ,小写σ)。第十八个希腊字母。在希腊语中,如果一个单字的最末一个字母是小写sigma,要把该字母写成ς,在现代的希腊数字代表6。大写Σ用于数学上的总和符号,比如:∑Pi,其中i=1,2,…,T,即为求P1+P2+…

    2022年10月11日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号