特征选取1-from sklearn.feature_selection import SelectKBest

 


转载:https://www.zhihu.com/question/28641663/answer/41653367
特征选择是特征工程中的重要问题(另外一个重要的问题是特征提取),坊间常说:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。因而可知,特征工程尤为是特征选择在机器学习中占有至关重要的地位。
一般而言,特征选择是指选择得到相应模型和算法最好性能的特征集,工程上经常使用的方法有如下:
1. 计算每个特征与响应变量的相关性:工程上经常使用的手段有计算皮尔逊系数和互信息系数,皮尔逊系数只能衡量线性相关性而互信息系数可以很好地度量各类相关性,可是计算相对复杂一些,好在不少toolkit里边都包含了这个工具(如sklearn的MINE),获得相关性以后就能够排序选择特征了;
2. 构建单个特征的模型,经过模型的准确性为特征排序,借此来选择特征,另外,记得JMLR'03上有一篇论文介绍了一种基于决策树的特征选择方法,本质上是等价的。当选择到了目标特征以后,再用来训练最终的模型;
3. 经过L1正则项来选择特征:L1正则方法具备稀疏解的特性,所以自然具有特征选择的特性,可是要注意,L1没有选到的特征不表明不重要,缘由是两个具备高相关性的特征可能只保留了一个,若是要肯定哪一个特征重要应再经过L2正则方法交叉检验;
4. 训练可以对特征打分的预选模型:RandomForest和Logistic Regression等都能对模型的特征打分,经过打分得到相关性后再训练最终模型;
5. 经过特征组合后再来选择特征:如对用户id和用户特征最组合来得到较大的特征集再来选择特征,这种作法在推荐系统和广告系统中比较常见,这也是所谓亿级甚至十亿级特征的主要来源,缘由是用户数据比较稀疏,组合特征可以同时兼顾全局模型和个性化模型,这个问题有机会能够展开讲。
6. 经过深度学习来进行特征选择:目前这种手段正在随着深度学习的流行而成为一种手段,尤为是在计算机视觉领域,缘由是深度学习具备自动学习特征的能力,这也是深度学习又叫 unsupervised feature learning的缘由。从深度学习模型中选择某一神经层的特征后就能够用来进行最终目标模型的训练了。
总体上来讲,特征选择是一个既有学术价值又有工程价值的问题,目前在研究领域也比较热,值得全部作机器学习的朋友重视。

 

http://blog.csdn.net/ae5555/article/details/49534263python

去除方差小的特征

设置一个方差阈值,没有达到这个方差阈值的特征都会被丢弃。 
VarianceThreshold,算法输入只要求特征(X),不须要输入结果(Y)。算法

from sklearn.feature_selection import VarianceThreshold 
X=[[feature1,feature2,…],…] 
sel=VarianceThreshold(threshold=xx) 
print(sel.fit_transform(X))数组

单变量特征选取

单变量特征提取的原理是分别计算每一个特征的某个统计指标,根据该指标来选取特征。 
SelectKBest、SelectPercentile,前者选择排名前k个的特征,后者选择排名在前k%的特征。选择的统计指标须要指定,对于regression问题,使用f_regression指标;对于classification问题,可使用chi2或者f_classif指标。markdown

from sklearn.feature_selection import SelectKBest,chi2 
X_new=SelectKBest(chi2,k=2).fit_transform(test_X,test_Y)dom

  1. False Positive Rate,假阳性率
  2. chi2,卡方统计量,X中特征取值必须非负。卡方检验用来测度随机变量之间的依赖关系。经过卡方检验获得的特征之间是最可能独立的随机变量,所以这些特征的区分度很高。
循环特征选取

不单独地检验某个特征的价值,而是检验特征集的价值。对于一个数量为n的特征集合,子集的个数为2的n次方减一。经过指定一个学习算法,经过算法计算全部子集的error,选择error最小的子集做为选取的特征。机器学习

RFE

 


  1. 对初始特征集合中每一个特征赋予一个初始权重。
  2. 训练,将权重最小的特征移除。
  3. 不断迭代,直到特征集合的数目达到预约值。 

 

from sklearn.svm import SVC 
from sklearn.feature_selection import RFE 
//X为样本集合,每一个样本为一个数组,数组元素为各个特征值,Y样本的评分 
svc=SVC(kernel=”linear”,C=1) 
rfe=RFE(estimator=svc,n_features_to_select=5,step=1) 
X_new=rfe.fit_transform(X,Y)
RFECV

在RFE训练时,增长交叉验证。ide

L1-base

在线性回归模型中,每个特征表明一个w,若获得的w系数等于或接近0,则说明这些特征不重要。 
LinearSVC 
参数C控制特征系数稀疏度,C的值越小,选择的特征数越少。工具

from sklearn.svm import LinearSVC 
X_new=LinearSVC(C=0.01,penalty=”l1”,dual=False).fit_transform(x,y)post

决策树特征选取

经过决策树能够计算特征的重要性,抛弃不过重要的特性。性能

from sklearn.ensemble import ExtraTreesClassifier 
clf=ExtraTreesClassifier() 
X_new=clf.fit(x,y).transform(x) 
//各个特征重要性 
print(clf.feature_importances)

sklearn分类数据

sklearn.datasets.make_classification用来随机产生一个多分类问题。 
n_features=n_informative+n_redundant+n_repeated。 
n_clusters_per_class 每一个分类的集群数

import sklearn.datasets 
(x,y)=make_classification(n_samples=, 
n_features=, 
n_informative=, 
n_redundant=, 
n_repeated=, 
n_classes=, 
random_state=, 
shuffle=False 
)

 

 

 

 https://study.163.com/provider/400000000398149/index.htm?share=2&shareId=400000000398149( 欢迎关注博主主页,学习python视频资源,还有大量免费python经典文章)


相关文章
相关标签/搜索