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

前言
上次对租金预测比赛进行的是数据分析部分的处理机器学习实战--住房月租金预测(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:1ifx0else0)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:1ifx3δ) 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的点全部删除。
对于特征工程的处理这是在自己代码中最重要的两步--缺失值和异常值的处理,将类别数值转化为虚拟变量和归一化的处理效果不是特别好所以没有贴上,数据集中的房屋朝向可以采用独热编码,感兴趣的可以试一下,我一直没搞懂看了同学的处理他的代码量太大,效果也不是特别明显,自己索性没去研究。下一次更新将针对这个问题进行模型选择。

上位机是什么?上位机具有哪些特点?上位机能替代PLC实现控制吗?
千视新品预告:E3 H.265 4K 双接口编码器
vivoAPEX2019高清图赏
EMI兼容的汽车开关稳压器设计
边缘计算创新:事半功倍
通过实战针对机器学习之特征工程进行处理
通用测试仪器大全之电子负载仪(特性,工作原理,使用方法,应用范围)
又曝iPhone7防盗神级功能,可保存指纹助破案
谷歌10大最成功产品
需求释放刺激钢材价格飙涨,汽车产业链后市怎么走?
云通信的应用场景
为什么不建议漏电保护空开
基于Multisim实现串联反馈式稳压电源
快速熔断器的型号
基于磁传感器设计的数字转速表
c语言整型数据的溢出计算
以太网的标准发展历史详细表格分析
la7837各引脚功能与工作电压
IGBT保护技术在光伏逆变器的应用
家电维修业人才素质