• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Python机器学习之PCA降维算法详解

    一、算法概述

    二、算法步骤

    1.将原始数据按行组成m行n列的矩阵X

    2.将X的每一列(代表一个属性字段)进行零均值化,即减去这一列的均值

    3.求出协方差矩阵

    4.求出协方差矩阵的特征值及对应的特征向量r

    5.将特征向量按对应特征值大小从左到右按列排列成矩阵,取前k列组成矩阵P

    6.计算降维到k维的数据

    三、相关概念

    四、算法优缺点

    优点

    缺点

    五、算法实现

    自定义实现

    import numpy as np
    
    
    # 对初始数据进行零均值化处理
    def zeroMean(dataMat):
        # 求列均值
        meanVal = np.mean(dataMat, axis=0)
        # 求列差值
        newData = dataMat - meanVal
        return newData, meanVal
    
    
    # 对初始数据进行降维处理
    def pca(dataMat, percent=0.19):
        newData, meanVal = zeroMean(dataMat)
    
        # 求协方差矩阵
        covMat = np.cov(newData, rowvar=0)
    
        # 求特征值和特征向量
        eigVals, eigVects = np.linalg.eig(np.mat(covMat))
    
        # 抽取前n个特征向量
        n = percentage2n(eigVals, percent)
        print("数据降低到:" + str(n) + '维')
    
        # 将特征值按从小到大排序
        eigValIndice = np.argsort(eigVals)
        # 取最大的n个特征值的下标
        n_eigValIndice = eigValIndice[-1:-(n + 1):-1]
        # 取最大的n个特征值的特征向量
        n_eigVect = eigVects[:, n_eigValIndice]
    
        # 取得降低到n维的数据
        lowDataMat = newData * n_eigVect
        reconMat = (lowDataMat * n_eigVect.T) + meanVal
    
        return reconMat, lowDataMat, n
    
    
    # 通过方差百分比确定抽取的特征向量的个数
    def percentage2n(eigVals, percentage):
        # 按降序排序
        sortArray = np.sort(eigVals)[-1::-1]
        # 求和
        arraySum = sum(sortArray)
    
        tempSum = 0
        num = 0
        for i in sortArray:
            tempSum += i
            num += 1
            if tempSum >= arraySum * percentage:
                return num
    
    
    if __name__ == '__main__':
        # 初始化原始数据(行代表样本,列代表维度)
        data = np.random.randint(1, 20, size=(6, 8))
        print(data)
    
        # 对数据降维处理
        fin = pca(data, 0.9)
        mat = fin[1]
        print(mat)
    

    利用Sklearn库实现

    import matplotlib.pyplot as plt
    from sklearn.decomposition import PCA
    from sklearn.datasets import load_iris
    
    # 加载数据
    data = load_iris()
    x = data.data
    y = data.target
    
    # 设置数据集要降低的维度
    pca = PCA(n_components=2)
    # 进行数据降维
    reduced_x = pca.fit_transform(x)
    
    red_x, red_y = [], []
    green_x, green_y = [], []
    blue_x, blue_y = [], []
    
    # 对数据集进行分类
    for i in range(len(reduced_x)):
        if y[i] == 0:
            red_x.append(reduced_x[i][0])
            red_y.append(reduced_x[i][1])
        elif y[i] == 1:
            green_x.append(reduced_x[i][0])
            green_y.append(reduced_x[i][1])
        else:
            blue_x.append(reduced_x[i][0])
            blue_y.append(reduced_x[i][1])
    
    plt.scatter(red_x, red_y, c='r', marker='x')
    plt.scatter(green_x, green_y, c='g', marker='D')
    plt.scatter(blue_x, blue_y, c='b', marker='.')
    plt.show()
    

    六、算法优化

    PCA是一种线性特征提取算法,通过计算将一组特征按重要性从小到大重新排列得到一组互不相关的新特征,但该算法在构造子集的过程中采用等权重的方式,忽略了不同属性对分类的贡献是不同的。

    KPCA是一种改进的PCA非线性降维算法,它利用核函数的思想,把样本数据进行非线性变换,然后在变换空间进行PCA,这样就实现了非线性PCA。

    局部PCA是一种改进的PCA局部降维算法,它在寻找主成分时加入一项具有局部光滑性的正则项,从而使主成分保留更多的局部性信息。

    到此这篇关于Python机器学习之PCA降维算法详解的文章就介绍到这了,更多相关Python PCA降维算法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • 在Python中使用K-Means聚类和PCA主成分分析进行图像压缩
    • python实现PCA降维的示例详解
    • Python sklearn库实现PCA教程(以鸢尾花分类为例)
    • 利用python-pypcap抓取带VLAN标签的数据包方法
    • (手写)PCA原理及其Python实现图文详解
    上一篇:Python 批量下载阴阳师网站壁纸
    下一篇:Python机器学习之基础概述
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Python机器学习之PCA降维算法详解 Python,机器,学,习之,PCA,降维,