Scikit-learn 学习笔记--(1)特征选择
来源:互联网 发布:数据透视表值字段设置 编辑:程序博客网 时间:2024/05/16 06:36
特征选择(排序)对于数据科学家、机器学习从业者来说非常重要。好的特征选择能够提升模型的性能,更能帮助我们理解数据的特点、底层结构,这对进一步改善模型、算法都有着重要作用。
特征选择主要有两个功能:
- 减少特征数量、降维,使模型泛化能力更强,减少过拟合
- 增强对特征和特征值之间的理解
拿到数据集,一个特征选择方法,往往很难同时完成这两个目的。通常情况下,我们经常不管三七二十一,选择一种自己最熟悉或者最方便的特征选择方法(往往目的是降维,而忽略了对特征和数据理解的目的)。
scikit-learn Feature selection
1. Removing features with low variance 去掉取值变化小的特征
假设某特征的特征值只有0和1,并且在所有输入样本中,95%的实例的该特征取值都是1,那就可以认为这个特征作用不大。如果100%都是1,那这个特征就没意义了。当特征值都是离散型变量的时候这种方法才能用,如果是连续型变量,就需要将连续变量离散化之后才能用。
可以把它作为特征选择的预处理,先去掉那些取值变化小的特征,然后再从接下来提到的的特征选择方法中选择合适的进行进一步的特征选择。
我们想移除特征值全0或者全1超过百分之80的特征,满足伯努利分布,方差为:
所以我们可以设定阈值为:
>>> 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 = (0.8*(1-0.8)))>>> sel.fit_transform(X)array([[0, 1], [1, 0], [0, 0], [1, 1], [1, 0], [1, 1]])Parsed in 0.006 seconds
正如预期的那样,VarianceThreshold 消除了第一列
2. Univariate feature selection 单变量特征选择
单变量特征选择能够对每一个特征进行测试,衡量该特征和响应变量之间的关系,根据得分扔掉不好的特征。可以看做一个预处理步骤的估计量,对于回归和分类问题可以采用卡方检验等方式对特征进行测试。
这种方法比较简单,易于运行,易于理解,通常对于理解数据有较好的效果(但对特征优化、提高泛化能力来说不一定有效);这种方法有许多改进的版本、变种。
SelectKBest /SelectPercentile
SelectKBest :只保留得分最高的前k个特征
SelectPercentile:只保留得分最高的前百分之k个特征
而他们通过什么指标来进行排名呢?根据官方文档,有以下几个指标:
>>> 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.shape(150, 2)>>>###Percentile>>> from sklearn.feature_selection import SelectPercentile>>> X_new_Percent = SelectPercentile(chi2,percentile=50).fit_transform(X,y)>>> X_new_Percent.shape(150, 2)
对于regression问题,可以使用f_regression指标。对于classification问题,可以使用chi2或者f_classif变量。
3. Recursive feature elimination 递归特征选择(RFE)
递归特征消除的主要思想是反复的构建模型(如SVM或者回归模型)然后选出最好的(或者最差的)的特征(可以根据系数来选),把选出来的特征放到一遍,然后在剩余的特征上重复这个过程,直到所有特征都遍历了。这个过程中特征被消除的次序就是特征的排序。因此,这是一种寻找最优特征子集的贪心算法。
RFE的稳定性很大程度上取决于在迭代的时候底层用哪种模型。例如,假如RFE采用的普通的回归,没有经过正则化的回归是不稳定的,那么RFE就是不稳定的;假如采用的是Ridge,而用Ridge正则化的回归是稳定的,那么RFE就是稳定的。
Sklearn提供了RFE包,可以用于特征消除,还提供了RFECV,可以通过交叉验证来对的特征进行排序。
>>> from sklearn.datasets import make_friedman1>>> from sklearn.feature_selection import RFE>>> from sklearn.svm import SVR>>> X, y = make_friedman1(n_samples=50, n_features=10, random_state=0)>>> estimator = SVR(kernel="linear")>>> selector = RFE(estimator, 5, step=1)>>> selector = selector.fit(X, y)>>> selector.support_ array([ True, True, True, True, True, False, False, False, False, False], dtype=bool)>>> selector.ranking_array([1, 1, 1, 1, 1, 6, 4, 3, 2, 5])
其中SVR是支持向量回归算法,他跟SVM的区别:戳我戳我!!
4. Feature selection using SelectFromModel
L1-based feature selection
该思路的原理是:在linear regression模型中,有的时候会得到sparse solution。意思是说很多变量前面的系数都等于0或者接近于0。这说明这些变量不重要,那么可以将这些变量去除
That’s it References:
http://dataunion.org/14072.html
未完---------》》》
- Scikit-learn 学习笔记--(1)特征选择
- 特征选择--scikit-learn
- scikit-learn 中文文档-特征选择-监督学习|ApacheCN
- <机器学习笔记-03><scikit-learn 03>特征提取
- Scikit-learn 学习笔记
- scikit-learn 学习笔记
- Scikit-Learn学习笔记
- 常用Scikit-learn特征选择方法
- 【Scikit-Learn 中文文档】特征选择
- 【Scikit-Learn 中文文档】十五:特征选择
- 【Scikit-Learn 中文文档】特征选择
- 【Scikit-Learn 中文文档】特征选择
- 【Scikit-Learn 中文文档】特征选择
- 【Scikit-Learn 中文文档】特征选择
- 【Scikit-Learn 中文文档】15 特征选择
- 【Scikit-Learn 中文文档】特征选择
- 【Scikit-Learn 中文文档】特征选择
- 【Scikit-Learn 中文文档】特征选择
- 解决用xstream生成的xml字符串中间有空格的问题
- IELTS Speaking Part 2: educational TV programme
- 0/1背包问题动态规划 空间复杂度是o(C)
- ListView中嵌套ListView
- description The server refused this request because the request entity is in a format not supported
- Scikit-learn 学习笔记--(1)特征选择
- 音频与视频标签—audio和video
- Nginx 源码完全剖析 nginx 自旋锁 ngx_spinlock
- 笔记本出现过的问题(联想)
- Linux SSH 客户端保存密码 自动登录服务端
- HttpURLConnection--HttpURLConnection的Post请求方式
- B与BL的区别
- 海量数据处理
- Android开发UI之ActionBar的覆盖叠加