机器学习-特征工程
对于某个特定任务来说,如何找到最佳数据表示,称之为特征工程(feature engineering)
分类变量
One_Hot编码与dummy variable
python代码实现在我另一篇博客连接连续变量离散化
特征离散化( discretization)也叫分箱(bining),与上文不同的是,离散化是把原理连续取值的变量转化为几个值表示。
比如在做决策树的时候,是需要变量为离散值的,有时需要用到变量的离散化,虽然在一定程度上会损失变量信息。
在pandas中的实现
import numpy as np
bins=np.linspace(-3,3,7)
print bins
print (“bins:{}”.format(bins))
data_bins=np.digitize(data,bins=bins)
print data_bins
把特征划归为-3至3之间的7份,data_bins显示原取值划为哪一个箱子。
.3. 交互特征与多项式特征
对于简单的线性方程,当数据两个变量有协同效应,具体是其中一个特征在另一个特征每一水平上表现不一致的时候就说存在交互作用。
比如生字密度和主题数学在低水平起作用,也就是图上的出现在低水平时二者特征相交现象,比如这样x1,x2两个特征存在交互,那么交互项的定义为
x1*x2,把这个定义的乘积交互作为一个新的特征放入模型中,
而非线性的关系是,如下通过绘制模型的残差图(residual plot)
可以看出来模型的残差分布有一定规律,呈二次型。所以可以尝试在线性的基础上拟合二次曲线。
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
poly=PolynormialFeatures(degree=3,include_bias=False)
poly.fit(x)
X_poly=poly.transform(x)
reg=LinearRegression().fit(X_poly,y)
degree(自由度),表示拟合的最高次项为三次。
include_bias是添加截距,注意回归模型中的bias(截距)和方差-偏差权衡中的偏置不是一回事。
4.特征的非线性变换
对于数据非正态的时候,往往需要对数据做变换,常见的对数转换,box_cox 转化,平方根变换,倒数变换等
对数转换如:
x_log=np.log(x+1)
5.自动特征选择