数据降维
这里需要注意,我们当前说的降维是特征的数量,比如说四个特征我们可以说是四维特征,不是数组的降维。
数据降维就是把特征数量进行减少。
数据降维方式:
1.特征选择
2.主成分分析
1.特征选择:
特征选择:选择部分特征当做机器学习的相关数据。
特征选择原因:
冗余:部分特征的相关度高,容易消耗计算性能
噪声:部分特征对预测结果有负影响
特征选择的主要方法:
主要方法(三大武器):Filter(过滤式):VarianceThreshold
Embedded(嵌入式):正则化、决策树
Wrapper(包裹式)
过滤式:对方差进行筛选,从发差的大小考虑这个特征的数据情况
过滤式:API: sklearn-learn.feature.VarianceThreshold
VarianceThreshold语法:
-VarianceThreshold(threshold = 0.0)
删除所有低方差特征
-Variance.fit_transform(X,y)
X:numpy array格式的数据[n_samples,n_features]
返回值:训练集差异低于threshold的特征将被删除。
默认值是保留所有非零方差特征,即删除所有样本
中具有相同值的特征。
from sklearn.feature_selection import VarianceThreshold
def var():
"""特征选择-删除低方差特征"""
#默认threshold=0.0 删除相同数据特征
var=VarianceThreshold(threshold=0.0)
data=var.fit_transform([[0, 2, 0, 3],
[0, 1, 4, 3],
[0, 1, 1, 3]]
)
print(data)
return None
if __name__ == '__main__':
var()
默认删除了第一列和最后一列。
2.主成分分析(PCA)
本质:PCA是一种分析,简化数据集的技术。
目的:是数据维数压缩,尽可能尽可能降低原数据的维数(复杂度),损失少量信息。
作用:可以消减回归分析或聚类分析中特征的数量。
PCA:特征数量达到上百的时候,考虑数据简化。这就会导致数据的改变,那么特征数量也会减少。
PCA理解
比如说看到第一张照片我们可能不能分辨出是不是洒水壶。第二第三张可能看出来一点但是不能确定,最后一张我么就可以知道是洒水壶。我们再用一个更低维度的东西去表示一个高维度的东西的时候,可能产生信息的差异,所以就是应为信息的差异,所以进行降维,降低了维数但是数据代表的信息没有什么损耗。
高纬度容易出现的问题:
特征之间通常是相关的。有的数据进行缩放过后可能相似。所以必须使用PCA。
PCA理解:
数据:
(-1,-2)(-1, 0)( 0, 0)( 2, 1)( 0, 1)
这里需要自己动手画一个坐标轴,然后看到坐标轴上面有五个点,这是一个二维的数据,如果我们把它降维到跟x轴平行,就发现五个数据变成了3个,数据发生了损耗。y轴同理。但是如果我们把数据降维到x=y这条直线上发现数据没有损耗或者相比之前损耗减少了。这就是PCA的原理,可以减少损耗。
这里可以大概看一下公式(不是重点):
比如说人脸识别:
通过数据降维转换
PCA语法:
-PCA(n_components=None)
n_components:可以是小数0~1,如果说取0.6 就是保留60%的信息,人为可控指标。经验指定范围:90%-95%
n_components:可以使整数,1,2,3,…减少到多少特征数量(一般不用)
将数据分解为较低维数空间
-PCA.fit_transform(X)
X:numpy array格式的数据[n_samples,n_features]
返回值:转换后指定维度的array
from sklearn.decomposition import PCA
def pca():
"""主成分分析进行特征降维"""
pca=PCA(n_components=0.9)
data=pca.fit_transform([[2,8,4,5],
[6,3,0,8],
[5,4,9,1]]
)
print(data)
return None
if __name__ == '__main__':
pca()