1.13. 特征选择(Feature selection)

1.13. 特征选择(Feature selection)

sklearn.feature_selection 模块中的类能够用于数据集的特征选择/降维,以此来提高预测模型的准确率或改善它们在高维数据集上的表现。

1.13.1. 移除低方差的特征(Removing features with low variance)

VarianceThreshold 是特征选择中的一项基本方法。它会移除所有方差不满足阈值的特征。默认设置下,它将移除所有方差为0的特征,即那些在所有样本中数值完全相同的特征。

假设我们有一个带有布尔特征的数据集,我们要移除那些超过80%的数据都为1或0的特征。布尔特征是伯努利随机变量,该类变量的方差为:

\mathrm{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 。

1.13.2. 单变量特征选择(Univariate feature selection)

单变量特征选择基于单变量的统计测试来选择最佳特征。它可以看作预测模型的一项预处理。Scikit-learn将特征选择程序用包含 transform 函数的对象来展现:

  • SelectKBest 移除得分前 k 名以外的所有特征
  • SelectPercentile 移除得分在用户指定百分比以后的特征
  • 对每个特征使用通用的单变量统计测试: 假正率(false positive rate) SelectFpr, 伪发现率(false discovery rate) SelectFdr, 或族系误差率 SelectFwe.
  • GenericUnivariateSelect 可以设置不同的策略来进行单变量特征选择。同时不同的选择策略也能够使用超参数寻优,从而让我们找到最佳的单变量特征选择策略。

比如,我们可以对样本进行一次 :math:`chi^2 测试来选择最佳的两项特征:

>>> 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)

这些作为打分函数输入的对象,返回单变量的概率值:

稀疏数据的特征选择

如果你使用稀疏数据 (比如,使用稀疏矩阵表示的数据), 只有 chi2 能在处理数据时保持其稀疏性.

1.13.3. 递归特征消除(Recursive feature elimination)

对于一个为数据特征指定权重的预测模型(例如,线性模型对应参数coefficients),递归特征消除 (RFE)通过递归减少考察的特征集规模来选择特征。首先,预测模型在原始特征上训练,每项特征指定一个权重。之后,那些拥有最小绝对值权重的特征被踢出特征集。如此往复递归,直至剩余的特征数量达到所需的特征数量。

RFECV 通过交叉验证的方式执行RFE,以此来选择最佳数量的特征。

示例:

1.13.4. 使用SelectFromModel选择特征(Feature selection using SelectFromModel)

SelectFromModel 作为meta-transformer,能够用于拟合后任何拥有``coef_`` 或``feature_importances_`` 属性的预测模型。 如果特征对应的``coef_`` 或 feature_importances_ 值低于设定的阈值``threshold``,那么这些特征将被移除。除了手动设置阈值,也可通过字符串参数调用内置的启发式算法(heuristics)来设置阈值,包括:平均值(“mean”), 中位数(“median”)以及他们与浮点数的乘积,如”0.1*mean”。

关于SelectFromModel使用的示例见下节。

Examples

1.13.4.1. 基于L1的特征选择(L1-based feature selection)

使用L1范数作为惩罚项的:ref:Linear models <linear_model> 会得到稀疏解:大部分特征对应的系数为0。当你希望减少特征的维度以用于其它分类器时,可以通过 feature_selection.SelectFromModel 来选择不为0的系数。特别指出,常用于此目的的稀疏预测模型有 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)

对于SVM和逻辑回归,参数C控制稀疏性:C越小,被选中的特征越少。对于Lasso,参数alpha越大,被选中的特征越少 。

示例:

L1恢复和压缩感知(L1-recovery and compressive sensing)

对于一个好的alpha值,在满足特定条件下, Lasso 仅使用少量观测值就能够完全恢复出非零的系数。特别地,样本的数量需要“足够大”,否则L1模型的表现会充满随机性,所谓“足够大”取决于非零系数的数量,特征数量的对数,噪声的数量,非零系数的最小绝对值以及设计矩阵X的结构。此外,设计矩阵必须拥有特定的属性,比如不能太过相关(correlated)。 对于非零系数的恢复,还没有一个选择alpha值的通用规则 。alpha值可以通过交叉验证来设置(LassoCV or LassoLarsCV),尽管这也许会导致模型欠惩罚(under-penalized):引入少量非相关变量不会影响分数预测。相反BIC (LassoLarsIC) 更倾向于设置较大的alpha值。

Reference Richard G. Baraniuk “Compressive Sensing”, IEEE Signal Processing Magazine [120] July 2007http://dsp.rice.edu/files/cs/baraniukCSlecture07.pdf

1.13.4.2. 随机稀疏模型(Randomized sparse models)

基于L1的稀疏模型的局限在于,当面对一组互相关的特征时,它们只会选择其中一项特征。为了减轻该问题的影响可以使用随机化技术,通过多次重新估计稀疏模型来扰乱设计矩阵,或通过多次下采样数据来统计一个给定的回归量被选中的次数。

RandomizedLasso 实现了使用这项策略的Lasso, RandomizedLogisticRegression 使用逻辑回归,适用于分类任务。要得到整个迭代过程的稳定分数,你可以使用 lasso_stability_path

../_images/plot_sparse_recovery_0031.png

注意到对于非零特征的检测,要使随机稀疏模型比标准F统计量更有效, 那么模型的参考标准需要是稀疏的,换句话说,非零特征应当只占一小部分。

示例:

参考文献:

1.13.4.3. 基于树的特征选择(Tree-based feature selection)

基于树的预测模型(见 sklearn.tree 模块,森林见 sklearn.ensemble 模块)能够用来计算特征的重要程度,因此能用来去除不相关的特征(结合 sklearn.feature_selection.SelectFromModel ):

>>> 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)

示例:

1.13.5. 特征选择融入pipeline(Feature selection as part of a pipeline)

特征选择常常被当作学习之前的一项预处理。在scikit-learn中推荐使用

sklearn.pipeline.Pipeline:

clf = Pipeline([
  ('feature_selection', SelectFromModel(LinearSVC(penalty="l1"))),
  ('classification', RandomForestClassifier())
])
clf.fit(X, y)

在此代码片段中,我们将 sklearn.svm.LinearSVC 和 sklearn.feature_selection.SelectFromModel 结合来评估特征的重要性,并选择最相关的特征。之后 sklearn.ensemble.RandomForestClassifier 模型使用转换后的输出训练,即只使用被选出的相关特征。你可以选择其它特征选择方法,或是其它提供特征重要性评估的分类器。更多详情见 sklearn.pipeline.Pipeline相关示例。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: jts-1.13.jar 是一个Java语言编写的JTS(Java拓扑套件)库的版本,这个库主要用于在地理信息系统(GIS)开发中进行空间数据处理和拓扑分析。下面是对于 jts-1.13.jar 的一些说明: 1. 功能:jts-1.13.jar 提供了许多常见的空间数据操作功能,如点、线、面的创建、编辑和删除,缓冲区分析、空间关系判断等。通过这些功能,开发人员可以方便地处理和分析地理空间数据。 2. 特点:jts-1.13.jar 是一个开源的库,在开发GIS应用程序时可以被方便地引入。它提供了一组丰富而强大的类和方法,以支持地理空间数据的处理,并且在性能和可靠性方面有较好的表现。 3. 应用领域:jts-1.13.jar 可以被广泛用于各种GIS应用开发中。它可以用于创建和编辑地理空间数据集,进行空间查询和分析,支持路径规划、地图匹配、空间索引等功能。这个库在不同领域的GIS应用中都得到了广泛的应用和验证。 4. 兼容性:jts-1.13.jar 兼容性较好,可以与其他GIS开发工具和框架结合使用。它支持常见的空间数据格式和协议,如Shapefile、GeoJSON等,可以方便地与其他地理信息系统进行数据交换和共享。 总结来说,jts-1.13.jar 是一个功能强大、易于使用和兼容性较好的GIS库,可以广泛应用于各种地理信息系统开发中。通过该库,开发人员可以方便地处理和分析地理空间数据,实现各种空间查询和分析功能,提高GIS应用的开发效率和性能。 ### 回答2: jts-1.13.jar 是一个开源的 Java Topology Suite 库的版本,它提供了在地理信息系统(GIS)中处理和分析地理空间数据的功能。这个库是由意大利的JTS项目开发的,旨在为开发人员提供一种在他们的Java应用程序中实现GIS功能的方式。 这个版本的库具有许多功能,包括几何对象的创建、操作和查询等。它支持点、线和面等常见的几何类型,并提供一系列的操作方法,例如计算距离、判断包含关系、计算缓冲区等。开发人员可以使用这些方法来处理地理空间数据,进行空间分析和查询。 此外,jts-1.13.jar 还提供了一些算法的实现,如凸包算法、最小外包矩形算法、R树索引等。这些算法可以帮助开发人员解决一些与地理空间数据相关的问题,例如查找最近的邻居、查找覆盖一个区域的最小矩形等。 总之,jts-1.13.jar 是一个功能强大的库,可以帮助开发人员处理和分析地理空间数据。通过使用这个库,开发人员可以更轻松地实现GIS功能,为他们的应用程序增加地理空间数据处理的能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值