说实在的,如果你有过项目实践经历,就会明白80%的精确度并不算糟糕。但在现实世界中,人们期望精确度不会少于80%。事实上,我工作过的大多数公司都期望至少有90%的精确度(或他们正在考虑的任何指标)。

 

因此,我将向你介绍提高准确性的5个技巧。强烈建议你把这五个要点通读一遍,其中有很多细节是大多数初学者不知道的。到最后,你就会明白有比想象中更多的变量在决定机器学习模型的表现。

 

1. 处理缺失值

 

我看到的最大的错误之一,就是人们如何处理缺失值。这并不一定是他们的错,网上有很多资料说,你可以通过均值替换法(mean imputation)来处理缺失值,用给定特性的均值替换空值,但这通常不是最好的方法。

 

例如,假设有一个显示年龄和健康指数的表格,一个80岁老人的缺少健康指数。如果我们取年龄在15到80岁之间的人的平均健康指数,那么80岁的人的健康指数就会比他实际应该得到的要高得多。

 

因此,你要问自己的第一个问题是为什么数据会丢失。接下来,考虑均值/中值之外的处理缺失数据的其他方法:

 

· 特性预测建模:回到年龄与健康分数的例子,可以建立年龄和健康分数之间的关系模型,然后使用模型来找到给定年龄的预期健康分数。这可以通过几种技术来完成,包括回归、方差分析等。

 

· K近邻归算:利用KNN归算,用另一个相似样本的值填充缺失数据,对于不知道的,利用距离函数(即欧几里得距离)确定KNN中的相似性。

 

· 删除行:最后可以删除行。通常不推荐这样做,但是当你有大量的数据要开始时,这样做也是可以的。

 

提升10%!如何将机器学习模型准确率从80%提高到90%以上

图源:unsplash

 

2.特征工程

 

第二种显著改进机器学习模型的方法是通过特征工程。特征工程是将原始数据转换为特征的过程,这些特征能更好地代表人们试图解决的潜在问题。这一步没有具体的方法,这也是数据科学既是一门科学又是一门艺术的原因。话虽如此,这里有一些你可以做的事情:

 

· 将DateTime变量转换为只提取星期几、月份等。

· 为变量创建容器或桶。如。对于一个高度变量,可以有100 149厘米、150 199厘米、200 249厘米等。

· 结合多种特征和/或值来创建一个新的。例如,泰坦尼克号挑战中最准确的模型之一设计了一个名为Is_women_or_child的新变量,如果这个人是女性或儿童,这个变量为真,否则为假。

 

3. 特征选择

 

特征选择,即选择数据集中最相关值的特征。太多的特征会导致算法过适合,太少的特征会导致算法不适合。有两种我喜欢使用的方法,可以使用它们来帮助你选择特性:

 

· 特性重要性:一些算法(如随机森林或XGBoost)使你能确定哪些特性在预测目标变量s值时最重要。通过快速创建其中一个模型并执行特性重要性,将了解哪些变量比其他变量更有用。

 

· 降维:最常见的降维技术之一,主成分分析(PCA)采用大量的特征,并使用线性代数将它们降维为更少的特征。

 

提升10%!如何将机器学习模型准确率从80%提高到90%以上

图源:unsplash

 

4. 集成学习算法

 

改进机器学习模型最简单的方法之一就是选择一个更好的机器学习算法。如果你还不知道什么是集成学习算法,现在是学习的时候了。

 

集成学习是一种结合使用多种学习算法的方法。其的目的是,与单独使用一个算法相比,它允许你获得更高的预测性能。

 

流行的集成学习算法包括随机森林、XGBoost、梯度提升和AdaBoost。为了解释为什么集成学习算法如此强大,我举一个随机森林的例子:随机森林包括使用原始数据的引导数据集创建多个决策树。然后,模型选择每个决策树的所有预测的模式(大多数)。这有什么意义?

 

通过依赖多数人获胜的模型,它减少了单个树出错的风险。

提升10%!如何将机器学习模型准确率从80%提高到90%以上

 

例如,如果创建了一棵决策树,第三个的预测结果是0。但如果我们依赖于所有4棵决策树的模式,预测值将是1。这就是集成学习的力量。

 

5. 调整超参数

 

最后,调整模型的超参数是一件不常提及但仍然非常重要的事情。你必须清楚地理解正在使用的机器学习模型,否则就很难理解每个超参数是什么。看看随机森林的所有超参数:

 

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可能是个好主意,这样当你想要机器学习模型更宽容,就可以调整这个参数。

 

这些将还将使未来的数据科学项目进行得更加顺利,项目精确度大幅提高。