0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

通过实战针对机器学习之特征工程进行处理

lviY_AI_shequ 来源:lp 2019-03-14 15:19 次阅读

前言

上次对租金预测比赛进行的是数据分析部分的处理机器学习实战--住房月租金预测(1),今天继续分享这次比赛的收获。本文会讲解对特征工程的处理。话不多说,我们开始吧!

特征工程

“数据决定了机器学习的上限,而算法只是尽可能逼近这个上限”,这里的数据指的就是经过特征工程得到的数据。特征工程指的是把原始数据转变为模型的训练数据的过程,它的目的就是获取更好的训练数据特征,使得机器学习模型逼近这个上限。特征工程能使得模型的性能得到提升,有时甚至在简单的模型上也能取得不错的效果。特征工程在机器学习中占有非常重要的作用,上面的思维导图包含了针对特征工程处理的所有方法。

缺失值处理

1print(all_data.isnull().sum())

使用上面的语句可以查看数据集中的缺失值

从上面的图中可以清楚的看到各数据的缺失值。

对于缺失值是任何一个数据集都不可避免的,在数据统计过程中可能是无意的信息被遗漏,比如由于工作人员的疏忽,忘记而缺失;或者由于数据采集器等故障等原因造成的缺失,或者是有意的有些数据集在特征描述中会规定将缺失值也作为一种特征值,再或者是不存在的,有些特征属性根本就是不存在的。

缺失值的处理,我们常用的方法有:删除记录:对于样本数据量较大且缺失值不多同时正相关性不大的情况下是有效。可以使用pandas的dropna来直接删除有缺失值的特征。数据填充:数据填充一般采用均值,中位数和中数,当然还有其他的方法比如热卡填补(Hot deck imputation),K最近距离邻法(K-means clustering)等。不作处理:因为一些模型本身就可以应对具有缺失值的数据,此时无需对数据进行处理,比如Xgboost,rfr等高级模型,所以我们可以暂时不作处理。

对于这次比赛缺失值的处理主要是数据的填充。

1cols=["renovated","living_status","subway_distance","subway_station","subway_line"] 2forcolincols: 3kc_train[col].fillna(0,inplace=True) 4kc_test[col].fillna(0,inplace=True) 5 6kc_train["way_rent"].fillna(2,inplace=True) 7kc_test["way_rent"].fillna(2,inplace=True) 8kc_train["area"].fillna(8,inplace=True) 9kc_train=kc_train.fillna(kc_train.mean())10kc_test["area"].fillna(8,inplace=True)11kc_test=kc_test.fillna(kc_test.mean())

对于装修状态,居住状态,距离,地铁站点和线路均用0填充,区均用中位数8来填充,出租方式用2填充,同时做了一个判断

1kc_train['is_living_status']=kc_train['living_status'].apply(lambdax:1ifx>0else0)2kc_train['is_subway']=kc_train['subway_distance'].apply(lambdax:1ifx>0else0)3kc_train['is_renovated']=kc_train['renovated'].apply(lambdax:1ifx>0else0)4kc_train['is_rent']=kc_train['way_rent'].apply(lambdax:1ifx< 2 else 0)56kc_test['is_living_status'] = kc_test['living_status'].apply(lambda x: 1 if x >0else0)7kc_test['is_subway']=kc_test['subway_distance'].apply(lambdax:1ifx>0else0)8kc_test['is_renovated']=kc_test['renovated'].apply(lambdax:1ifx>0else0)9kc_test['is_rent']=kc_test['way_rent'].apply(lambdax:1ifx< 2 else 0)

异常值处理

异常值是分析师和数据科学家常用的术语,因为它需要密切注意,否则可能导致错误的估计。 简单来说,异常值是一个观察值,远远超出了样本中的整体模式。

什么会引起异常值呢?

主要有两个原因:人为错误和自然错误

如何判别异常值?

正态分布图,箱装图或者离散图。以正态分布图为例:符合正态分布时,根据正态分布的定义可知,距离平均值3δ之外的概率为 P(|x-μ|>3δ) <= 0.003 ,这属于极小概率事件,在默认情况下我们可以认定,距离超过平均值3δ的样本是不存在的。 因此,当样本距离平均值大于3δ,则认定该样本为异常值。当数据不服从正态分布:当数据不服从正态分布,可以通过远离平均距离多少倍的标准差来判定,多少倍的取值需要根据经验和实际情况来决定。

异常值的处理方法常用有四种:1.删除含有异常值的记录2.将异常值视为缺失值,交给缺失值处理方法来处理3.用平均值来修正4.不处理

1all_data=pd.concat([train,test],axis=0,ignore_index=True) 2all_data.drop(labels=["price"],axis=1,inplace=True) 3fig=plt.figure(figsize=(12,5)) 4ax1=fig.add_subplot(121) 5ax2=fig.add_subplot(122) 6g1=sns.distplot(train['price'],hist=True,label='skewness:{:.2f}'.format(train['price'].skew()),ax=ax1) 7g1.legend() 8g1.set(xlabel='Price') 9g2=sns.distplot(np.log1p(train['price']),hist=True,label='skewness:{:.2f}'.format(np.log1p(train['price']).skew()),ax=ax2)10g2.legend()11g2.set(xlabel='log(Price+1)')12plt.show()

查看训练集的房价分布,左图是原始房价分布,右图是将房价对数化之后的。

由于房价是有偏度的,将房价对数化并且将有偏的数值特征对数化

1train['price']=np.log1p(train['price'])23#将有偏的数值特征对数化4num_features_list=list(all_data.dtypes[all_data.dtypes!="object"].index)56foriinnum_features_list:7ifall_data[i].dropna().skew()>0.75:8all_data[i]=np.log1p(all_data[i])

根据上一篇我们筛选出的十个最相关的特征值,画出离散图,并且对离散点做处理,这里只取房屋面积举个栗子。

1var='sqft_living'2data=pd.concat([train['price'],train[var]],axis=1)3data.plot.scatter(x=var,y='price',ylim=(0,150));

1train.drop(train[(train["sqft_living"]>0.125)&(train["price"]<20)].index,inplace=True)

这里将面积大于0.125且价格小于20的点全部删除。

对于特征工程的处理这是在自己代码中最重要的两步--缺失值和异常值的处理,将类别数值转化为虚拟变量和归一化的处理效果不是特别好所以没有贴上,数据集中的房屋朝向可以采用独热编码,感兴趣的可以试一下,我一直没搞懂看了同学的处理他的代码量太大,效果也不是特别明显,自己索性没去研究。下一次更新将针对这个问题进行模型选择。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机器学习
    +关注

    关注

    66

    文章

    8371

    浏览量

    132375
  • 数据分析
    +关注

    关注

    2

    文章

    1425

    浏览量

    34003
  • 数据集
    +关注

    关注

    4

    文章

    1205

    浏览量

    24633

原文标题:机器学习实战--住房月租金预测(2)

文章出处:【微信号:AI_shequ,微信公众号:人工智能爱好者社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    机器学习算法的特征工程与意义详解

    1、特征工程与意义 特征就是从数据中抽取出来的对结果预测有用的信息。 特征工程是使用专业知识背景知识和技巧
    发表于 10-08 15:24 2854次阅读
    <b class='flag-5'>机器</b><b class='flag-5'>学习</b>算法的<b class='flag-5'>特征</b><b class='flag-5'>工程</b>与意义详解

    机器学习实战logistic回归

    输入数据的判断结果。过程非常关键,需要预测函数的大概形式, 比如是线性还是非线性的。 本文参考机器学习实战的相应部分,看一下数据集。 // 两个特征 -0.017612 14.0530
    的头像 发表于 09-29 15:17 2312次阅读
    <b class='flag-5'>机器</b><b class='flag-5'>学习</b><b class='flag-5'>实战</b><b class='flag-5'>之</b>logistic回归

    【下载】《机器学习》+《机器学习实战

    、Apriori算法、FP-Growth算法。第四部分介绍了机器学习算法的一些附属工具。全书通过精心编排的实例,切入日常工作任务,摒弃学术化语言,利用高效的可复用Python代码来阐释如何处理
    发表于 06-01 15:49

    机器学习实战:GNN加速器的FPGA解决方案

    推出的 Speedster7t系列高性能FPGA,专门针对数据中心和机器学习工作负载进行了优化,消除了CPU、GPU以及传统 FPGA 存在的若干性能瓶颈。Speedster7t FP
    发表于 10-20 09:48

    想掌握机器学习技术?从了解特征工程开始

    问题。解决这些问题的方法与数据预处理的方法在机器学习中被统称为特征工程,今天我们就来了解一下吧。 ◆  ◆  ◆
    的头像 发表于 12-05 09:36 2112次阅读

    机器学习特征工程的五个方面优点

    特征工程是用数学转换的方法将原始输入数据转换为用于机器学习模型的新特征特征
    的头像 发表于 03-15 16:57 3911次阅读

    机器学习特征提取 VS 特征选择

    机器学习特征选择和特征提取区别 demi 在 周四, 06/11/2020 - 16:08 提交 1. 特征提取 V.S
    的头像 发表于 09-14 16:23 4075次阅读
    <b class='flag-5'>机器</b><b class='flag-5'>学习</b><b class='flag-5'>之</b><b class='flag-5'>特征</b>提取 VS <b class='flag-5'>特征</b>选择

    机器学习实战的源代码资料合集

    本文档机器学习实战的源代码资料合集
    发表于 03-01 09:28 51次下载
    <b class='flag-5'>机器</b><b class='flag-5'>学习</b><b class='flag-5'>实战</b>的源代码资料合集

    特征选择和机器学习的软件缺陷跟踪系统对比

    针对Bugzilla缺陷跟踪系统的ε clipse项目软件缺陷报告数据集,使用特征选择和机器学习算法对向量化的原始数据进行
    发表于 06-10 10:50 12次下载

    机器学习算法学习特征工程1

    特征工程机器学习过程中的关键步骤,涉及将原始数据转换为机器学习算法可以有效使用的格式。在本篇博
    的头像 发表于 04-19 11:38 760次阅读
    <b class='flag-5'>机器</b><b class='flag-5'>学习</b>算法<b class='flag-5'>学习</b><b class='flag-5'>之</b><b class='flag-5'>特征</b><b class='flag-5'>工程</b>1

    机器学习算法学习特征工程2

    特征工程机器学习过程中的关键步骤,涉及将原始数据转换为机器学习算法可以有效使用的格式。在本篇博
    的头像 发表于 04-19 11:38 802次阅读
    <b class='flag-5'>机器</b><b class='flag-5'>学习</b>算法<b class='flag-5'>学习</b><b class='flag-5'>之</b><b class='flag-5'>特征</b><b class='flag-5'>工程</b>2

    机器学习算法学习特征工程3

    特征工程机器学习过程中的关键步骤,涉及将原始数据转换为机器学习算法可以有效使用的格式。在本篇博
    的头像 发表于 04-19 11:38 971次阅读
    <b class='flag-5'>机器</b><b class='flag-5'>学习</b>算法<b class='flag-5'>学习</b><b class='flag-5'>之</b><b class='flag-5'>特征</b><b class='flag-5'>工程</b>3

    数据预处理特征工程的常用功能

    机器学习最基础的5个流程,分别是数据获取,数据预处理特征工程,建模、测试和预测,上线与部署。
    的头像 发表于 01-25 11:26 700次阅读

    通过强化学习策略进行特征选择

    来源:DeepHubIMBA特征选择是构建机器学习模型过程中的决定性步骤。为模型和我们想要完成的任务选择好的特征,可以提高性能。如果我们处理
    的头像 发表于 06-05 08:27 317次阅读
    <b class='flag-5'>通过强化学习</b>策略<b class='flag-5'>进行</b><b class='flag-5'>特征</b>选择

    机器学习中的数据预处理特征工程

    机器学习的整个流程中,数据预处理特征工程是两个至关重要的步骤。它们直接决定了模型的输入质量,进而影响模型的训练效果和泛化能力。本文将从数
    的头像 发表于 07-09 15:57 286次阅读