https://www.bilibili.com/video/BV184411Q7Ng?p=12
注解:
- 这里了的降维不是指数组的维度,不是1维、2维、3维那个维。
注解:
- 这个是3维的特征转换为2维的特征。
- 降维就是把样本的特征的数量减少,比如在分辨男女的时候,把每个样本里面的特征肤色去掉。
注解:
- 特征2和特征3是可与去掉的,不然突然增加训练成本。
注解:
- 过滤式就是把低方差的特征通过设定方差阈值过滤掉。
注解:
- 如果方差为0或者接近于0,则考虑把这个特征拿掉,因为它没有波动,反映不出样本之间的差别,区分不开不同的样本。
注解:
- 调用函数,把第1列特征和第3列特征去掉。
from sklearn.feature_selection import VarianceThreshold def var(): """ 删除低方差的特征 :return: """ 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()
运行结果:
注解:
- 把相同的特征都删掉了,删掉了特征向量[0,0,0]和特征向量[3,3,3].
from sklearn.feature_selection import VarianceThreshold def var(): """ 删除低方差的特征 :return: """ var=VarianceThreshold(threshold=1.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()
运行结果:
注解:
- 如果是方差阈值设为1,则特征向量[2,1,1]也被去掉了。
- 一般方差的阈值可以是[0,10]之间。
注解:
- 一张图片的特征向量是可能达到上万的。
注解:
- 用2维表示3维的东西。
- 图片1和2看不出来是洒水壶,图片3勉强能看出来,图片4(二维)最能表示洒水壶。
注解:
- 如果特征向量本来就很少,比如10个左右,是没有必要使用PCA进行特征压缩的。
注解:
- 特征向量1和特征向量50存在一个大约2倍的关系,这就是特征向量之间的相关性。
注解:
- 如果要压缩成一维的话,可以向x轴或者y轴投影,这样数据点就会由于5个变成3个,这个不是PCA。
- PCA是找到一个直线,让样本点投影到这条直线上,切尽可能的减少样本量的损失。如,可以找到一条斜线,投影后,5个样本点还是5个样本点,只不过数据发生了变化,数据量没有发生变化。
注解:
- 参数n_components一般填90%~95%之间的一个数字,表示用PCA(主成分分析)进行特征压缩的时候,保留95%的特征量,一般没有一个最优值,需要不断的调试才能得出最优值。
- 参数n_components也可以填一个整数,表示减少到的特征数量,但是一般并不知道需要减少到多少个特征数。
代码演示:
from sklearn.decomposition import PCA def pca(): """ 主成分分析 :return: 4个样本,每个样本3个特征 """ 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()
运行结果:
注解:
- 4个样本3个特征,变成了3个样本2个特征。
- 当然这两个特征没有实际意义,只是举的数字例子。
- 特征数量还剩大约90%,因为调用主成分分析函数的时候,参数选择的就是保留90%的特征数。