文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python机器学习之PCA降维算法的示例分析

2023-06-15 03:35

关注

小编给大家分享一下Python机器学习之PCA降维算法的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

一、算法概述

二、算法步骤

Python机器学习之PCA降维算法的示例分析

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

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

求出协方差矩阵

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

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

计算降维到k维的数据

三、相关概念

Python机器学习之PCA降维算法的示例分析

Python机器学习之PCA降维算法的示例分析

Python机器学习之PCA降维算法的示例分析

四、算法优缺点

优点

缺点

五、算法实现

自定义实现

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 numif __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 pltfrom sklearn.decomposition import PCAfrom sklearn.datasets import load_iris# 加载数据data = load_iris()x = data.datay = 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的数据类型有哪些?

python的数据类型:1. 数字类型,包括int(整型)、long(长整型)和float(浮点型)。2.字符串,分别是str类型和unicode类型。3.布尔型,Python布尔类型也是用于逻辑运算,有两个值:True(真)和False(假)。4.列表,列表是Python中使用最频繁的数据类型,集合中可以放任何数据类型。5. 元组,元组用”()”标识,内部元素用逗号隔开。6. 字典,字典是一种键值对的集合。7. 集合,集合是一个无序的、不重复的数据组合。

以上是“Python机器学习之PCA降维算法的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯