首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

实战:把一个机器学习项目的准确率从0.65提升到0.98

在一幢建筑里要看到三样东西:它是否被正确的选址,它是否被牢固的奠基,它是否被成功的建造——约翰·沃尔夫冈·冯·歌德

大家好,我是今天的值班编辑,今天是中华民族最隆重、最热闹的传统节日,小编在此祝您全家新年快乐。财源滚滚随春到,喜气洋洋伴福来。骐骥一跃奔锦绣,大地流金万象新。高居宝地财兴旺,福照家门富生辉。欢聚一堂迎新春,欢天喜地度佳节。

小编之前在这个公众号里面挖过一个坑,写过一篇文章《25行python代码实现一个机器学习项目》,在文章中,小编用25行python代码训练的机器学习分类模型(决策树模型)的准确率得分为0.65,距离1.0还比较遥远。今天就来讲一讲如何提高模型的准确率。

提高模型准确率的多种方法

以小编几年来搞机器学习分类模型的经验来看,面对一个快速搭建起来的模型,有如下几种方法都可以(在一定程度上)提升模型的准确率:

1)使用更多数据去训练模型。

对于一个刚刚搭建起来的模型,使用更多数据去训练的方法非常的行之有效;此方法的不足之处在于,数据越多则模型的训练速度越慢,小编曾经见过一个模型训练一轮要一周左右的时间,等结果等的人望眼欲穿。

而且,还有可能存在更悲剧的情况:无法取得更多的训练数据。通常对于一个工程师来说,资源总是有限的,即使公司的其它部门手中有更多的数据,也很难协调得到。

2)特征工程

特征工程(Feature Engineering)指的是从现有的训练数据中提取更多有效特征出来的神操作。

比如数据类型转化、标准化、归一化、分箱、one-hot编码、缺失值填充、特征选择、降维、组合等等。

特征工程可以说是机器学习项目中最苦最累最没有技术含量的活(IT民工的说法不是白来的),但通常也是见效最快的方法。

既然说到了“工程“二字,小编就再罗索几句。通常一个机器学习工程师都把自己的技术方向称为”策略方向”,以区别于”工程方向“; 并且,”策略方向“的工程师通常会鄙视”工程方向“的工程师,好像自己天生就高人一等的样子。

3)尝试不同的模型

在特定数据上,有些模型的表现会优于其它的模型(尤其是有bagging/boosting机制的模型,如xgboost 、gbdt、随机森林),朋友们可以靠经验、靠直觉来尝试不同的模型。

可能有的朋友们这里就要问了:为什么要靠经验或者直觉呢,我把全部或者大部分流行的模型都尝试一遍不就可以了吗。

主要原因在于时间,尝试一个模型(开发、调参、训练)需要花不少的时间,通常一个项目不会有太多太多的时间用来尝试全部模型。

4)模型调参

通常,一个模型都有几个参数可以调整,这些参数被称为“超参数”。我们可以想办法寻找到这些参数的最优值,当然,有时候超参数的默认值就已经足够好了。调参也是要花不少时间的,毕竟每一次参数的调整都意味着重新训练一次模型。

代码解析

下面来看小编是如何综合使用上面几种方法来提高模型的准确率的。

首先导入pandas这个数据处理神器。

然后凭经验,选择使用sklearn 中的随机森林分类器, 之后加载训练数据集和测试数据集、去掉四个无用的字段(特征)。为什么去掉这4个特征呢?也是凭经验和对项目背景的理解 ,再加上几次尝试。

对pclass特征进行one-hot编码并填充回df(编码并填充之后就可以删除原始特征了)、对age特征用中位数填充缺失值并且转化为int:

把sex特征与age特征组合在一起,成为一个新的特征:Person,并做one-hot编码:

组合Parch 和 SibSp两个特征,生成新的特征family,并且把它二值化为0或1(有没有家属);

对Fare特征也使用中位数来补全缺失数据:

Embarked特征使用众数S来补全缺失值,one-hot编码,然后去掉值为S的特征(去不去都可以)。

至于如何找到众数,可以print一下train_df['Embarked'].describe()。

生成x与y,初始化随机森林模型,开始训练、预测、评估:

最终模型的准确率为:0.9798,已经非常接近于上限1.0了,达到了一个新的高度。

总结

通过上面对代码的分析,朋友们可以清楚地认识到特征工程的重要性了吧,一个机器学习项目中绝大部分的python代码都是特征工程代码。

有其它问题可以在下方评论或者私信小编哦。

最后用歌德同志的一句话与各位机器学习工程师共勉:在一幢建筑里要看到三样东西:它是否被正确的选址,它是否被牢固的奠基,它是否被成功的建造——约翰·沃尔夫冈·冯·歌德

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200125A0D1RL00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券