# 特征选择与特征提取最全总结

## 嵌入法

`SelectFromModel`是一个元变换器，可以与任何在拟合后具有`coef_，feature_importances_` 属性或参数中可选惩罚项的评估器一起使用(比如随机森林和树模型就具有属性`feature_importances_`，逻辑回归就带有l1和l2惩罚项，线性支持向量机也支持l2惩罚项)。

### 基于树的特征选择

```from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier()

# X_embedded = SelectFromModel(clf,threshold=0.005).fit_transform(X,Y)

clf.fit(X,Y)
RFC = pd.DataFrame(clf.feature_importances_, columns = ["RFC"], index=features.columns)
RFC = RFC.reset_index()
RFC.sort_values(['RFC'],ascending=0)
```

### 极端随机树分类器

1. 随机森林应用的是Bagging模型，而ET是使用所有的训练样本得到每棵决策树，也就是每棵决策树应用的是相同的全部训练样本；
2. 随机森林是在一个随机子集内得到最佳分叉属性，而ET是完全随机的得到分叉值，从而实现对决策树进行分叉的。
```from sklearn.ensemble import ExtraTreesClassifier
# 特征提取
model = ExtraTreesClassifier()

# X_embedded = SelectFromModel(model,threshold=0.005).fit_transform(X,Y)
model.fit(X, Y)
print(model.feature_importances_)
```
```[0.214 0.216 0.307 0.188 0.027 0.029 0.019]
```
```ET = pd.DataFrame(model.feature_importances_, columns = ["Extra Trees"], index=features.columns)
ET = ET.reset_index()
ET.sort_values(['Extra Trees'],ascending=0)
```

### L1正则化

linear_model.Lasso（回归） linear_model.LogisticRegression svm.LinearSVC（分类）

```from sklearn.svm import LinearSVC
from sklearn.feature_selection import SelectFromModel

lsvc = LinearSVC(C=0.01, penalty="l1", dual=False).fit(X, Y)
model = SelectFromModel(lsvc,prefit=True)
l1 = pd.DataFrame(model.get_support(), columns = ["L1"], index=features.columns)
l1 = l1.reset_index()

```

### 岭回归

```from sklearn.linear_model import Ridge
ridge = Ridge(alpha=1.0)
ridge.fit(X,Y)
def pretty_print_coefs(coefs, names = None, sort = False):
if names == None:
names = ["X%s" % x for x in range(len(coefs))]
lst = zip(coefs, names)
if sort:
lst = sorted(lst,  key = lambda x:-np.abs(x[0]))
return " + ".join("%s * %s" % (round(coef, 3), name)
for coef, name in lst)

print ("Ridge model:", pretty_print_coefs(ridge.coef_))
```
```Ridge model:
-0.093 * X0 + 0.475 * X1 +
0.622 * X2 + 0.0 * X3 + -0.013 * X4 +
0.203 * X5 + -0.123 * X6
```
```Ridge = pd.DataFrame(ridge.coef_, columns = ["Ridge"], index=features.columns)
Ridge = Ridge.reset_index()
Ridge.sort_values('Ridge',ascending=0)
```

## 包装法

### 递归特性消除

```from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
# 特征提取
model = LogisticRegression()
rfe = RFE(model, 3)
rfe.fit(X, Y)
print("Num Features: %s" % (rfe.n_features_))
print("Selected Features: %s" % (rfe.support_))
print("Feature Ranking: %s" % (rfe.ranking_))
```
```Num Features: 3
Selected Features: [True True False True
False False False]
Feature Ranking: [1 1 2 1 3 4 5]
```
```features.columns
```
```Index(['Open', 'High', 'Low', 'Volume',
'Increase_Decrease',
dtype='object')
```
```RFE = pd.DataFrame(rfe.ranking_, columns = ["RFE"], index=features.columns)
RFE = RFE.reset_index()
RFE.sort_values('RFE',ascending=0)
```

### 多种方法整合

```from functools import reduce
dfs = [Ridge,var_thd ,pearsonr, RFE, ET, RFC, chi_sq, l1, vif]
final_results = reduce(lambda left, right: pd.merge(left,
right,
on='index',
how='outer'),
dfs)
final_results
```

## 特征提取

#### 数据准备

```dataset = df.copy()
dataset['Increase_Decrease'] = np.where(dataset['Volume'].shift(-1) > dataset['Volume'],'Increase','Decrease')
dataset['Month'] = dataset.index.month
dataset['Day'] = dataset.index.day
dataset['Year'] = dataset.index.year
dataset['Norm_Price'] = (dataset['Adj Close'] - dataset['Average']) / dataset['Std']
dataset['Date_Stamp'] = pd.to_datetime(dataset.index)
dataset = dataset.dropna()
```

### tsfresh特征提取

TsFresh能自动地计算出大量的时间序列特征，即所谓的特征，这些特征描述了时间序列的基本特征，如峰数、平均值或最大值或更复杂的特征，如时间反转对称统计。

#### 指定少量特征提取

```from tsfresh import extract_features
import tsfresh
df2 = dataset.reset_index()
df2 = df2.dropna(how='all')
new_features = extract_features(df2[['Norm_Price', 'Day', 'Date_Stamp']],
column_id="Day", column_sort="Date_Stamp",
column_value="Norm_Price", n_jobs=0).dropna(axis=1)
```
```Feature Extraction: 100%|██████████|
31/31 [00:02<00:00, 15.23it/s]
```

#### 对整个数据表提取特征

```X = extract_features(df2, column_id='Month',
column_sort='Date',
```
```Feature Extraction: 100%|██████████|
6/6 [00:00<00:00,  7.88it/s]
```
```>>> tsfresh.feature_extraction.feature_calculators.abs_energy(dataset['Adj Close'])
2549098.5821893318
858.289228439331
```

0 条评论

• ### 特征选择与提取最全总结之过滤法

特征抽取是数据挖掘任务最为重要的一个环节，一般而言，它对最终结果的影响要高过数据挖掘算法本身。

• ### 特征选择与特征提取（降维）

特征选择和降维有着些许的相似点，这两者达到的效果是一样的，就是试图去减少特征数据集中的属性(或者称为特征)的数目；但是两者所采用的方式方法却不同：降维的方法主要...

• ### 特征选择与特征抽取

特征抽取和特征选择是DimensionalityReduction（降维）两种方法，但是这两个有相同点，也有不同点之处：

• ### SFS与SBS特征选择算法

(1)序列前向选择( SFS , Sequential Forward Selection )

• ### C++ OpenCV特征提取之Brisk特征检测与匹配

BRISK是BRIEF描述子的一种改进，相比于BRIEF特征，它具有旋转不变性、尺度不变性和对噪声的鲁棒性。几个特征检测的速度比较：SIFT>SURF>BRIS...

• ### 特征工程完全总结

目录 1 特征工程是什么？ 2 数据预处理　　 2.1 无量纲化　　　　 2.1.1 标准化　　　　 2.1.2 区间缩放法　　　　 2.1.3 标准化与归一化...

• ### 浅析互信息与特征选择

那么什么是互信息呢？变量x与变量y之间的互信息，可以用来衡量已知变量x时变量y的不确定性减少的程度，同样的，也可以衡量已知变量y时变量x的不确定性减少的程度。

• ### ConvLSTM：时空特征提取结构 [github代码]

这篇文章[1]想要解决的问题是预测一个区域短时间内的降水变化，在它之前的工作（2015年之前）还很少有采用机器学习的方法来做相关预测。由于预测的输入是时序雷达图...

• ### NLP界最强特征提取器--Transformer

前面介绍NLP领域词向量技术的时候提到了目前最炙手可热的语言模型BERT，而BERT之所以能取得这样的瞩目成就，离不开其采用的超强特征提取器Transforme...

• ### 基于遗传算法的特征选择:通过自然选择过程确定最优特征集

遗传算法是一种基于自然选择的优化问题的技术。在这篇文章中，我将展示如何使用遗传算法进行特征选择。

• ### OpenCV中ORB特征提取与匹配

OpenCV中ORB特征提取与匹配 FAST特征点定位 ORB - (Oriented Fast and Rotated BRIEF)算法是基于FAST特征检测...

• ### PCL点云特征描述与提取（1）

3D点云特征描述与提取是点云信息处理中最基础也是最关键的一部分，点云的识别。分割，重采样，配准曲面重建等处理大部分算法，都严重依赖特征描述与提取的结果。从尺度上...

• ### PCL点云特征描述与提取（3）

已知点云P中有n个点，那么它的点特征直方图（PFH）的理论计算复杂度是，其中k是点云P中每个点p计算特征向量时考虑的邻域数量。对于实时应用或接近实时应用中，密集...

• ### PCL点云特征描述与提取（4）

这将自动生成一个呈矩形的点云，检测的特征点处在角落处，参数-m是必要的，因为矩形周围的区域观测不到，但是属于边界部分，因此系统无法检测到这部分区域的特征点，选项...

• ### PCL点云特征描述与提取（2）

正如点特征表示法所示，表面法线和曲率估计是某个点周围的几何特征基本表示法。虽然计算非常快速容易，但是无法获得太多信息，因为它们只使用很少的几个参数值来近...

• ### 特征离散化与选择EPSO算法详解

EPSO的主要思想是使用BBPSO直接演化出一个可以在相应的特征值范围[MinF···MaxF]内任何值的切点。每个粒子的位置表示一个候选解，它是一个与问题的维...

• ### 全面综述：图像特征提取与匹配技术

链接 | https://zhuanlan.zhihu.com/p/133301967

• ### 使用通用的单变量选择特征选择提高Kaggle分数

Kaggle 是全球首屈一指的数据科学网，Kaggle 现在每月提供表格竞赛，为像我这样的新手提供提高该领域技能的机会。因为 Kaggle 提供了一个很好的机会...

• ### 特征提取和泛化中深度ReLU网络的深度选择(CS.LG)

深度学习被认为能够发现深层特征以进行表示学习和模式识别，而无需借助人类的独创性和先验知识就可以使用优雅的特征工程技术。因此，它引发了机器学习和模式识别方面的大量...