特征工程---Boston房价预测

1、什么是特征工程

特征工程是对原始特征做必要的数据预处理和特征编码,使得变换后的特征符合模型要求。

数据预处理好理解,那么什么是特征编码?

2、特征编码

特征编码分为离散型特征编码和数值型(连续)特征编码

  • 离散型特征编码

         离散特征可以通过独热编码(one-hot encode),将原来有K种取值的离散型特征变成K维0-1编码特征,这K维特征中只有一个是1(独热),其余维是0,独热编码可以用pandas的get_dummies方法(哑编码),或者Scikit-Learn中的OneHotEncoder类实现。

        get_dummies方法要求输入特征的类型是非数值型('object');而OneHotEncoder要求输入是整数。如果是字符串要先用LabelEncoder变成整数(但是LabelEncoder 输出是一维(1D)数组,而OneHotEncoder要求输出是2D数组,需要在二者之间做格式转换,否则会报错

        另外如果训练数据和测试数据不能同时获得的话,需要用OneHotEncoder用训练集训练编码器,然后对训练集和测试集进行编码;而get_dummies是依赖于DataFrame,只适用于一个数据集的情况(注意DataFrame和Series的区别,。DataFrame是一张表,而Series是表里的某一行或某一列)

  • 数值型特征编码

       Scikit-Learn中提供的数据预处理功能。

       在数据探索阶段如果发现数据的各特征差异较大,需要进行数据标准化预处理,标准化的目的在于避免原始特征值差异过大,导致训练得到的参数权重、单位不一致,无法比较各特征的重要性。另外,一些优化算法(如随机梯度下降法)只有在各特征尺度差不多的情况下才能保证收敛。

3、对波士顿房价的数据做特征工程

代码如下:

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
import sklearn.datasets
from sklearn import preprocessing
#from sklearn.preprocessing import StandardScaler
import warnings
df=pd.read_csv('boston_house_prices.csv')

#1、数据去噪,将房价大于等于50的去掉
df=df[df.MEDV<50]
#print(df.shape)
#取出MEDV列的数据给y
y=df['MEDV']
#y=np.reshape(y,(-1,1))
X=df.drop('MEDV',axis=1)
#对房屋价格做log变换
log_y=np.log1p(y)

#2、对RAD做独热编码
X['RAD'].astype('object')
X_cat=X['RAD']
X_cat=pd.get_dummies(X_cat,prefix='RAD')
X=X.drop('RAD',axis=1)
#特征名称,用于保存特征工程结果
feature_names=X.columns
print(X_cat.head())

#数值的标准化处理
#3、特征编码
ss_X=preprocessing.StandardScaler()
ss_y=preprocessing.StandardScaler()
ss_log_y=preprocessing.StandardScaler()
X=ss_X.fit_transform(X)
y=ss_y.fit_transform(y.values.reshape(-1,1))
log_y=ss_y.fit_transform(log_y.values.reshape(-1,1))

#4、保存特征工程的结果到文件,供机器学习模型使用
fe_data=pd.DataFrame(data=X,columns=feature_names,index=df.index)
fe_data=pd.concat([fe_data,X_cat],axis=1,ignore_index=False)
#加上标签y
fe_data['MEDV']=y
fe_data['log_MEDV']=log_y
#保存结果到文件
fe_data.to_csv('FE_boston_housing.csv',index=False)
print(fe_data.head())
print(fe_data.info())

未处理前的数据:

    

处理后的前5行数据:

    

处理后的数据总览:

    

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值