特征处理:特征常用处理
Posted yongfuxue
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了特征处理:特征常用处理相关的知识,希望对你有一定的参考价值。
属性构造
1)利用已有的属性构造出新的属性,并加入到现有的属性集合中。
举例:在进行防窃漏电诊断建模时,已有属性有供入电量、供出电量。理论上供入电量和供出电量是相等的,但是由于传输过程中存在电能损耗,使得供入电量略大于供出电量,那为了判断用户的是否存在窃漏电行为,可以构造一个新的指标----线损率
线损率 = (供入电量-供出电量)/供入电量
线损率正常范围一般在3%-15%,远远超过这个范围,就可以认为这个用户很可能存在窃漏电行为
2)合并属性:将一些旧属性合并为新属性
生成多项式特征
通过考虑输入数据的非线性特征,常常增加模型的复杂性。一个简单而常用的方法是多项式特征,可以获得特征的高阶和交互项。
import numpy as np
from sklearn.preprocessing import PolynomialFeatures
X = np.arange(9).reshape(3, 9)
>>>
array([ [0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
poly = PolynomialFeatures(2)
poly.fit_transform(X)
>>>
array([ [ 1., 0., 1., 2., 0., 0., 0., 1., 2., 4.],
[ 1., 3., 4., 5., 9., 12., 15., 16., 20., 25.],
[ 1., 6., 7., 8., 36., 42., 48., 49., 56., 64.]])
在一些情况下,只需要功能之间的交互项,并且可以通过设置得到interaction_only=True
poly = PolynomialFeatures(2, interaction_only=True)
poly.fit_transform(X)
>>>
array([ [ 1., 0., 1., 2., 0., 0., 2.],
[ 1., 3., 4., 5., 12., 15., 20.],
[ 1., 6., 7., 8., 42., 48., 56.]])
特征选择:决策树归纳
利用决策树的归纳方法对初始数据进行分类归纳学习,获得一个初始决策数,所有没有出现在这个决策树上的属性均可认为是无关属性,因此将这些属性从初始集合中删除,就可以获得一个较优的属性子集。
特征选择:包裹型
把特征选择看作一个特征子集搜索问题,筛选各种特征子集,用模型评估效果。
典型的包裹型算法为“递归特征删除算法”(recursive feature elimination algorithm)
比如使用逻辑回归:
(1)用全量特征跑一个模型
(2)根据现行模型的系数(系数越大,相关性越大),删掉5-10%的弱特征,观察准确率/AUC的变化
(3)逐步进行,直至准确率/AUC出现大的下滑停止
包裹型特征选择python包:
from sklearn.feature_selection import RFE
from skleaen.linear_model import LinearRegression
boston = load_boston()
X = boston[“data”]
Y = boston[“target”]
names = boston[“feature_names”]
lr = LinearRegression()
rfe = RFE(lr, n_feature_to_select=1)
rfe.fit(X, Y)
#打印排序后的特征结果
print sorted(zip(map(lamada x: round(x, 4), rfe.ranking_), names))
特征选择:嵌入型
根据模型来分析特征的重要性(有别于上面包裹型的特征选择方式)
最常见的方式是用正则化方式来做特征选择,例如使用L1正则化的LR模型,会得到一些系数为0的权重值。
嵌入型特征选择Python包
from sklearn.svm import LinearSVC
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectFromModel
iris = load_iris()
X, y = iris.data, iris.target
X.shape
>>>(150,4)
lsvc = LinearSVC(C=0.01, penalty=”l1”, dual=False).fit(X, y)
model = SelectFromModel(lsvc, prefit=True)
X_new = model.transform(X)
X_new.shape
>>>(150, 3)
以上是关于特征处理:特征常用处理的主要内容,如果未能解决你的问题,请参考以下文章