sklearn里的特征工程

2019-12-31  本文已影响0人  小幸运Q

https://www.jianshu.com/p/b3056d10a20f
http://www.sohu.com/a/340983395_654419


用sklearn中的feature_selection库来进行特征选择


Filter:

<1> 过滤法:

按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的 个数,选择特征。

方差选择法(VarianceThreshold)

去掉那些方差没有达到阈值的特征。默认情况下,删除零方差的特征,例如那些只有一个值的样本。

from sklearn import datasets
iris = datasets.load_iris()

print(iris.data)
# array([[5.1, 3.5, 1.4, 0.2], ...])

from sklearn.feature_selection import VarianceThreshold

#方差选择法,返回值为特征选择后的数据

#参数threshold为方差的阈值

vardata = VarianceThreshold(threshold= 3).fit_transform(iris.data)

print(vardata)
# array([[1.4],...])
# 筛选后删除了第一二四的特征,输出了第三个特征 petal length
相关系数法(SelectKBest)

使用相关系数法,先要计算各个特征对目标值的相关系数。用feature_selection库的SelectKBest类 结合相关系数来选择特征

举个例子,使用卡方检验选择两个最优特征:

from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
iris = load_iris()
X, y = iris.data, iris.target
X.shape
# (150, 4)

X_new = SelectKBest(chi2, k=2).fit_transform(X, y)
# X_new = SelectKBest(f_classif, k=20).fit_transform(X, y) 

X_new.shape
# (150, 2)

SelectPercentile 根据最高分数的百分位数选择功能。
SelectFpr 根据误报率测试选择功能。
SelectFdr 根据估计的错误发现率选择功能。
SelectFwe 根据家庭错误率选择功能。
GenericUnivariateSelect 具有可配置模式的单变量特征选择器。

?什么是卡方检测 ? -- 特征与类之间的相关性


Wrapper:

包装法:根据目标函数(通常是预测效果评分),每次选择若干特征,或者排除若干特征。

from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression

#递归特征消除法,返回特征选择后的数据
#参数estimator为基模型
#参数n_features_ to_select为选择的特征个数
RFE(estimator=LogisticRegression(), n_features_to_select= 2).fit_transform(iris.data, iris.target)[:10]

Embedded嵌入法:

嵌入法:先使用某些机器学习的算法和模型进行训练,得到各个特征的权值 系数,根据系数从大到小选择特征。类似于Filter方法,但是是通过训练来确定特征的优劣。

使用带惩罚项的基模型,除了筛选出特征外,同时也进行了降维。使用L1范数的线性模型有一个稀疏解:许多估计系数都为0。当降维的目的是为了使用其他分类器,他们能和feature_selection.SelectFromModel一起使用选择非零系数。特别地,稀疏估计量对于回归中的 linear_model.Lasso、分类中的linear_model.LogisticRegression和svm.LinearSVC都很有用。

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)

树模型中GBDT也可用来作为基模型进行特征选择,使用feature_selection库的SelectFromModel类 结合GBDT模型,来选择特征的代码如下:

from sklearn.ensemble import ExtraTreesClassifier
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)
clf = ExtraTreesClassifier()
clf = clf.fit(X, y)
clf.feature_importances_ 
# array([ 0.04...,  0.05...,  0.4...,  0.4...])
model = SelectFromModel(clf, prefit=True)
X_new = model.transform(X)
X_new.shape
# (150, 2)        
上一篇下一篇

猜你喜欢

热点阅读