"""
降维:特征的数量
注意:之前说的维度是数组的维度,和这里的维度不一样
为什么要降维:去掉无用的特征,减少特征数量
特征选择的原因:
冗余:部分特征的相关度高,容易消耗计算性能
噪声:部分特征对预测结果有影响
降维的方式:
特征选择:中特征中选出部分特征当作最后的特征作为机器学习的输入数据
API:sklearn.feature_selection.VarianceThreshold
主要方法:Filter(过滤式):VarianceThreshold(Variance:方差。过滤式,即对方差进行过滤,把方差在一定范围内的(比如0,因为如果方差为0,就说明数据是一样的,没有意义)方差删除)
从方差的大小考虑这个特征的所有样本
Embedded(嵌入式):正则化、决策树
Wrapperr(包裹式):基本用不到
其他特征选择方法:神经网络
主成分分析(PCA):PCA是一种分析、简化数据集的技术
目的:使数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息
作用:可以削减回归分析或者聚类分析中特征的数量(数量会减少,数据也会改变)
应用场景:如果特征数量达到上百的时候,则首先考虑需不需要使用PCA进行特征的简化
API:sklearn.decomposition
ps:个人理解:为什么叫主成分分析,因为其目的是需要让我们看到一张照片,就能够知道这张照片里面的是什么东西,即识别出照片中的主成分。
所以主成分分析做的工作主要是降低数据的维度(比如从三维降为二维),但是主要的特征不能减少,还是需要能识别出物体
高维度数据容易出现的问题:
特征之间通常是相关的
特征选择与主成分分析的比较:
当特征数量过多的时候,可以使用主成分分析
"""
from sklearn.feature_selection import VarianceThreshold
def var():
"""
特征选择-删除低方差的特征
:return: None
"""
var = VarianceThreshold(threshold=0.0) # 默认是0.0,即删除所有数据都相同的特征。其取值没有一个最佳值,是根据实际的效果取
data = var.fit_transform([[0, 2, 0, 3],
[0, 1, 4, 3],
[0, 1, 1, 3]]
)
print(data) # 第一、四列被删除了
return None
from sklearn.decomposition import PCA
def pca():
"""
主成分分析进行特征降维
:return: None
"""
pca = PCA(n_components=0.9) # 其参数如果是小数,就是保留特征的百分比,如果是整数,就是保留多少个特征。通常,我们使用小数,且范围为0.9-1.0
data = pca.fit_transform([[2, 8, 4, 5],
[6, 3, 0, 8],
[5, 4, 9, 1]]
)
print(data)
return None
"""案例:用户对物品类别的喜好细分降维"""
#见04-案例
if __name__ == "__main__":
# var()
pca()