特征选择和降维
一、特征选择
(一)概述
1、什么是特征选择
特征选择就是单纯地从提取到的所有特征中选择部分特征作为训练集特征,特征在选择前和选择后可以改变值、也不改变值,但是选择后的特征维数肯定比选择前小,毕竟我们只选择了其中的一部分特征。
2、为什么进行特征选择
那么,我们为什么要进行数据进行特征选择呢?其一就是部分特征的相关性比较高,易消耗计算性能;其二是消除一些负影响的特征,可能有的特征是认为误操作造成的数据。比如:
feature1 |
feature2 |
feature3 |
feature4 |
feature5 |
1 |
2 |
2 |
300 |
8 |
6 |
7 |
12 |
6000 |
2 |
2 |
2 |
4 |
1900 |
2 |
9 |
5 |
18 |
280 |
3 |
可以看到feature4可能是误操作导致的数据,这样对结果可能造成负影响,我们需要特征feature4数据,选择其他特征列作为数据集的特征,这就需要进行特征选择。
3、特征选择的方法
- Filter(过滤式):VarianceThreshold
- Embedded(嵌入式):正则化、决策树
- Wrapper(包裹式)
- 神经网络
(二)VarianceThreshold(方差过滤)
1、API
sklearn.feature_selection.VarianceThreshold
2、方法及参数
- VarianceThreshold(threshold = 0.0)
删除所有低方差特征,其中threshold 指定需要删除的方差代表的数据,方差越小说明有太多一样的数据,可以进行舍弃。
- Variance.fit_transform(X,y)
X:numpy array格式的数据[n_samples,n_features]
返回值:训练集差异低于threshold的特征将被删除。
默认值:保留所有非零方差特征,即删除所有样本中具有相同值的特征(一列特征值相同的会被剔除)。
3、实现步骤
- 初始化VarianceThreshold,指定阀值方差
- 调用fit_transform方法
4、实例演示
from sklearn.feature_selection import VarianceThreshold def variance(): """ 特征选择:删除低方差的特征 :return: """ #准备数据 arr = [ [150,70], [200,70] ] #实例化VarianceThreshold vt = VarianceThreshold() data = vt.fit_transform(arr) print(data) """ [[150] [200]] """ if __name__ == '__main__': variance()
上面的特征选择适用于特征数量较少的场景下,那么如果特征数量非常多应该怎么办呢?
二、降维
(一)概述
如果特征有成百上千个,这时候我们可能需要降维,就是削减特征的数量,但是我们尽可能的在损失少量数据信息的前提下进行数据集的压缩,从而降低数据集的维度。使用的方法就是PCA(主成分分析)方法,它是一种分析、简化数据集的技术。
(二)PCA(主成分分析)
1、API
sklearn.decomposition.PCA
2、方法及参数
- PCA(n_components=None)
将数据分解为较低维数空间,n_components参数如果为int的整数时,表示降到的维度数;如果为小数或者百分数,表示自动选取特征个数,直到所要求的信息保留量达到这个百分比。
- PCA.fit_transform(X)
X:numpy array格式的数据[n_samples,n_features]
返回值:转换后指定维度的array
3、实现步骤
- 初始化PCA,指定减少后的维度
- 调用fit_transform
4、实例演示
from sklearn.decomposition import PCA def pca_(): """ 主成分分析进行特征降维 :return: """ #准备数据 arr = [ [150,70], [200,70] ] #实例化VarianceThreshold pca = PCA(n_components=0.9) data = pca.fit_transform(arr) print(data) """ [[ 25.] [-25.]] """ if __name__ == '__main__': pca_()
PCA降维进行特征选择适用于特征数量特别多的场景。