04-数据降维之特征选择

"""
降维:特征的数量
    注意:之前说的维度是数组的维度,和这里的维度不一样

    为什么要降维:去掉无用的特征,减少特征数量

    特征选择的原因:
        冗余:部分特征的相关度高,容易消耗计算性能
        噪声:部分特征对预测结果有影响

    降维的方式:
        特征选择:中特征中选出部分特征当作最后的特征作为机器学习的输入数据
            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()

你可能感兴趣的:(04-数据降维之特征选择)