最近在进行一个比赛的时候遇到特征处理的问题,于是就在sklearn官网查了一下,发现有专门的一节来讲关于特征选择的,因此翻译一下主要供自己学习使用,当然如果对你也有帮助,那更好。
sklearn.feature_selection
PS:翻译如果觉得有问题,请大佬帮忙纠正!谢谢。
----------------------------------------------我是一条无感情的分界线---------------------------------------
1.13. Feature selection
sklearn.feature_selection模块能在样本数据集上进行特征选择或降维,这既能改善评估器的准确得分,也能提升高维数据集的泛化性能。
举个例子,假设现在有个布尔特征的数据集,然后我们想要移除 样本里超过80%是1或0的所有特征。布尔特征就是伯努利随机变量,这些变量的方差是由下面这个公式得来:
V a r [ X ] = p ( 1 − p ) Var[X]= p(1-p) Var[X]=p(1−p)
所以我们可以选择使用 .8 * (1 - .8) 的阈值:
>>> from sklearn.feature_selection import VarianceThreshold
>>> X = [[0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 1, 1], [0, 1, 0], [0, 1, 1]]
>>> sel = VarianceThreshold(threshold=(.8 * (1 - .8)))
>>> sel.fit_transform(X)
array([[0, 1],
[1, 0],
[0, 0],
[1, 1],
[1, 0],
[1, 1]])
如上,VarianceThreshold 方法移除了第一列,因为它里面0的占比 p = 5 / 6 > . 8 p = 5 / 6 > .8 p=5/6>.8 。
transform
方法的对象:
例如,我们可以在下面这个样本集中利用 χ 2 \chi^2 χ2检验来找到仅有的两个最佳特征:
>>> from sklearn.datasets import load_iris
>>> from sklearn.feature_selection import SelectKBest
>>> from sklearn.feature_selection import chi2
>>> X, y = load_iris(return_X_y=True)
>>> X.shape
(150, 4)
>>> X_new = SelectKBest(chi2, k=2).fit_transform(X, y)
>>> X_new.shape
(150, 2)
这些对象将一个得分函数作为输入,该函数返回单变量得分和p值(或仅返回SelectKBest和SelectPercentile的得分):
该方法是基于F检验来估计两个随机变量之间的线性相关程度。另一方面,互信息方法可以捕获任何类型的统计依赖关系,但由于是非参数性的,因此需要更多样本才能进行准确估计。
稀疏数据的特征选择
如果你使用稀疏数据(例如稀疏矩阵这样的数据),那么chi2,mutual_info_regression, mutual_info_classif这几个函数在处理数据的时候不会让其变得密集。
警告:请注意不要使用回归得分函数来解决分类问题,因为你会得到一个无效的结果。
示例: