4858|5

187

帖子

1

TA的资源

纯净的硅(初级)

楼主
 

《人工智能实践教程——从Python入门到机器学习》阅读分享三:主成分分析 [复制链接]

本帖最后由 cc1989summer 于 2024-8-22 23:08 编辑

《人工智能实践教程——从Python入门到机器学习》的第二部分机器学习(第4章、第5章、第6章),主要介绍机器学习的基本概念,以及常见的机器学习的算法,这部分逐渐进入到 本书的核心内容。

 

 

 

 

 

第四章主要对机器学习进行总体概述,比如机器学习的分类。常见的机器学习算法:

 

 

 

看了这么多算法介绍,是不是犹如看天书一般,不知所云?

 

那我们赶快来到第5章,也就是4个经典算法的介绍:

1.    主成分分析(PCA)

2.    K均值(K-Means)

3.    K近邻(KNN)

4.    梯度下降法

 

针对主成分分析(PCA),书本是这么介绍的:

 

主成分分析(PCA) 是一种统计过程,它使用正交变换将一组可能相关变量的观测值转换为称为主成分的线性不相关变量的值。该技术因其能够降低数据维数同时保留数据集中的大部分变化而得到广泛认可。 PCA的本质在于它能够从数据表中提取本质信息,压缩数据集的大小,简化数据集的描述,同时保留所有变量中最有价值的部分。

PCA 的核心原则涉及识别方向或轴,沿着这些方向或轴,数据的可变性最大化。第一个主成分是使数据方差最大化的方向。第二主成分与第一主成分正交。它确定了后续最高方差的方向,依此类推。此过程允许 PCA 将复杂的数据集减少到较低的维度,从而更容易分析和可视化数据,而不会造成大量信息丢失。

PCA 在简化复杂数据集同时保留基本信息方面的美妙之处是无与伦比的。它使数据科学家和统计学家能够发现数据中隐藏的模式,从而促进更明智的决策。通过关注最重要的组成部分,PCA 有助于突出数据的底层结构,从而更清晰地洞察所分析数据的真实性质。该方法提高了数据分析的效率。它有助于更​​真实、更深刻地理解数据的内在属性。

 

 

 

 

看完是不是还是不之所云?这就是本书的特点之一:理论性强于实践性,各部分理论都有涉及,对应的Python算法实例也有,但是对于人工智能、机器学习领域的小白来说,单靠本书的内容是很难以理解并入门的,也就是常说的:字都懂,但连在一起就不懂了。

 

 

为了理解主成分分析法,你可能要大量的搜索,阅读实例,一步步加深认识。

 

下面是我搜集的一些概念及实例,有助于加深读者的理解:

 

 

主成分分析(PCA)是一种数据降维技巧,它能将大量相关变量转化为一组很少的不相关变量,这些无关变量称为主成分。例如,使用PCA可将30个相关(很可能冗余)的环境变量转化为5个无关的成分变量,并且尽可能地保留原始数据集的信息。

 

 

基因组学领域,PCA 简化了遗传数据,通常涉及数千个变量。通过降维,PCA 使研究人员能够更有效地识别与疾病相关的遗传标记和模式,从而促进个性化医学和进化研究的突破。

 

在图像压缩领域,PCA减少了像素数据中的冗余,实现了图像的高效存储和传输,而不会造成质量的显着损失。该应用在卫星图像和远程医疗等带宽有限的领域至关重要,并且必须在压缩与保留图像完整性之间取得平衡。

 

 

 

 

主成分分析模型,变量(X1到X5)映射为主成分(PC1,PC2),也就是实现了降维。

 

 

 

 

 

 

说这么多,不如举个例子吧!

 

例子1:评选三好学生,每个学生都有很多特征,比如学习成绩、社会实践、思想道德、体育成绩等。在评比中,有一些特征属于“ 无用特征 ”,比如身高、体重、头发长短等,这些特征在评比中是不会考虑的;而有一些特征属于“ 冗余特征 ”,比如各科成绩、总成绩、GPA,实际上这些有一个即可。

 

例子2:见下图。原本黑色坐标系中需要记录每个点的横纵坐标(xi, yi),也就是 2 个纬度的数据。

但如果转换坐标系,如绿色坐标系所示,让每个点都位于同一条轴上,这样每个点坐标为(xi’, 0),此时仅用x’坐标表示即可,即 1 个维度。

 


在这个过程中,原先需要保存的 2 维数据变成了 1 维数据,叫做数据降维 / 数据提炼。而PCA的任务形象理解也就是坐标系的转换。

 

 

例子3:首先看一个表格,下表是某些学生的语文,数学,物理,化学成绩统计:

 

 

 

首先,假设这些科目成绩不相关,也就是说某一科目考多少分与其他科目没有关系,那么如何判断三个学生的优秀程度呢?首先我们一眼就能看出来,数学,物理,化学这三门课的成绩构成了这组数据的主成分(很显然,数学作为第一主成分,因为数据成绩拉的最开)。

那么为什么我们能一眼看出来呢?当然是我们的坐标轴选对了!!

 

 

 

下面,我们继续看一个表格,下标是一组学生的数学,物理,化学,语文,历史,英语成绩统计:

 

 

 

那么这个表我们能一眼看出来吗?数据太多了,以至于看起来有些凌乱,无法直接看出这组数据的主成分,因为在坐标系下这组数据分布的很散乱。究其原因,是因为无法拨开遮住肉眼的迷雾,如果把这些数据在相应的空间中表示出来,也许你就能换一个观察角度找出主成分.

 

 

 

PCA其实目的就是寻找这个转换后的坐标系,使数据能尽可能分布在一个或几个坐标轴上,同时尽可能保留原先数据分布的主要信息,使原先高维度的信息,在转换后能用低维度的信息来保存。而新坐标系的坐标轴,称为主成分(Principal components, PC),这也就是PCA的名称来源。

 

PCA分析的一般步骤如下:

  1. 数据预处理。PCA根据变量间的相关性来推导结果。用户可以输入原始数据矩阵或者相关系数矩阵
    • principal()
    • fa()
    函数中进行计算,在计算前请确保数据中没有缺失值
  2. 判断要选择的主成分数目(这里不涉及因子分析)。
  3. 选择主成分(这里不涉及旋转)。
  4. 解释结果
  5. 计算主成分得分

 

 

我们跑一段书本上的例程看下:

 

源数据data.csv,也就是我们降维前的:

  • 32.50234527 31.70700585
  • 53.42680403 68.77759598
  • 61.53035803 62.5623823
  • 47.47563963 71.54663223
  • 59.81320787 87.23092513
  • 55.14218841 78.21151827
  • 52.21179669 79.64197305
  • 39.29956669 59.17148932
  • 48.10504169 75.3312423
  • 52.55001444 71.30087989
  • 45.41973014 55.16567715
  • 54.35163488 82.47884676
  • 44.1640495 62.00892325
  • 58.16847072 75.39287043
  • 56.72720806 81.43619216
  • 48.95588857 60.72360244
  • 44.68719623 82.89250373
  • 60.29732685 97.37989686
  • 45.61864377 48.84715332
  • 38.81681754 56.87721319
  • 66.18981661 83.87856466
  • 65.41605175 118.5912173
  • 47.48120861 57.25181946
  • 41.57564262 51.39174408
  • 51.84518691 75.38065167
  • 59.37082201 74.76556403
  • 57.31000344 95.45505292
  • 63.61556125 95.22936602
  • 46.73761941 79.05240617
  • 50.55676015 83.43207142
  • 52.22399609 63.35879032
  • 35.56783005 41.4128853
  • 42.43647694 76.61734128
  • 58.16454011 96.76956643
  • 57.50444762 74.08413012
  • 45.44053073 66.58814441
  • 61.89622268 77.76848242
  • 33.09383174 50.71958891
  • 36.43600951 62.12457082
  • 37.67565486 60.81024665
  • 44.55560838 52.68298337
  • 43.31828263 58.56982472
  • 50.07314563 82.90598149
  • 43.87061265 61.4247098
  • 62.99748075 115.2441528
  • 32.66904376 45.57058882
  • 40.16689901 54.0840548
  • 53.57507753 87.99445276
  • 33.86421497 52.72549438
  • 64.70713867 93.57611869
  • 38.11982403 80.16627545
  • 44.50253806 65.10171157
  • 40.59953838 65.56230126
  • 41.72067636 65.28088692
  • 51.08863468 73.43464155
  • 55.0780959 71.13972786
  • 41.37772653 79.10282968
  • 62.49469743 86.52053844
  • 49.20388754 84.74269781
  • 41.10268519 59.35885025
  • 41.18201611 61.68403752
  • 50.18638949 69.84760416
  • 52.37844622 86.09829121
  • 50.13548549 59.10883927
  • 33.64470601 69.89968164
  • 39.55790122 44.86249071
  • 56.13038882 85.49806778
  • 57.36205213 95.53668685
  • 60.26921439 70.25193442
  • 35.67809389 52.72173496
  • 31.588117 50.39267014
  • 53.66093226 63.64239878
  • 46.68222865 72.24725107
  • 43.10782022 57.81251298
  • 70.34607562 104.2571016
  • 44.49285588 86.64202032
  • 57.5045333 91.486778
  • 36.93007661 55.23166089
  • 55.80573336 79.55043668
  • 38.95476907 44.84712424
  • 56.9012147 80.20752314
  • 56.86890066 83.14274979
  • 34.3331247 55.72348926
  • 59.04974121 77.63418251
  • 57.78822399 99.05141484
  • 54.28232871 79.12064627
  • 51.0887199 69.58889785
  • 50.28283635 69.51050331
  • 44.21174175 73.68756432
  • 38.00548801 61.36690454
  • 32.94047994 67.17065577
  • 53.69163957 85.66820315
  • 68.76573427 114.8538712
  • 46.2309665 90.12357207
  • 68.31936082 97.91982104
  • 50.03017434 81.53699078
  • 49.23976534 72.11183247
  • 50.03957594 85.23200734
  • 48.14985889 66.22495789
  • 25.12848465 53.45439421

 

 

源代码:

PCA-简单例子.py

 

  • import numpy as np
  • import matplotlib.pyplot as plt
  • # 载入数据
  • data = np.genfromtxt("data.csv", delimiter=",")
  • x_data = data[:,0]
  • y_data = data[:,1]
  • plt.scatter(x_data,y_data)
  • plt.show()
  • print(x_data.shape)
  • # 数据中心化
  • def zeroMean(dataMat):
  • # 按列求平均,即各个特征的平均
  • meanVal = np.mean(dataMat, axis=0)
  • newData = dataMat - meanVal
  • return newData, meanVal
  • newData,meanVal=zeroMean(data)
  • # np.cov用于求协方差矩阵,参数rowvar=0说明数据一行代表一个样本
  • covMat = np.cov(newData, rowvar=0)
  • # 协方差矩阵
  • print(covMat)
  • # np.linalg.eig求矩阵的特征值和特征向量
  • eigVals, eigVects = np.linalg.eig(np.mat(covMat))
  • # 特征值
  • print(eigVals)
  • # 特征向量
  • print(eigVects)
  • # 对特征值从小到大排序
  • eigValIndice = np.argsort(eigVals)
  • print(eigValIndice)
  • top = 1
  • # 最大的top个特征值的下标
  • n_eigValIndice = eigValIndice[-1:-(top+1):-1]
  • print(n_eigValIndice)
  • # 最大的n个特征值对应的特征向量
  • n_eigVect = eigVects[:,n_eigValIndice]
  • print(n_eigVect)
  • # 低维特征空间的数据
  • lowDDataMat = newData*n_eigVect
  • print(lowDDataMat)
  • # 利用低纬度数据来重构数据
  • reconMat = (lowDDataMat*n_eigVect.T) + meanVal
  • print(reconMat)
  • # 载入数据
  • data = np.genfromtxt("data.csv", delimiter=",")
  • x_data = data[:,0]
  • y_data = data[:,1]
  • plt.scatter(x_data,y_data)
  • # 重构的数据
  • x_data = np.array(reconMat)[:,0]
  • y_data = np.array(reconMat)[:,1]
  • plt.scatter(x_data,y_data,c='r')
  • plt.show()

 

直接运行代码会提示错误:ModuleNotFoundError: No module named 'numpy'

 

也就是没有安装numpy组件

 

 

 

什么是 NumPy?
NumPy 是 Python 中科学计算的基本包。它是一个 Python 库,它提供了多维数组对象、各种派生对象(如掩蔽数组和矩阵)以及用于数组快速操作的各种例程,包括数学、逻辑、形状操作、排序、选择、I/O、离散 Fourier 变换、基本线性代数、基本统计操作、随机模拟等。

NumPy 包的核心是 ndarray 对象。这将封装同质数据类型的 n 维数组,在编译的代码中执行许多操作以进行性能操作。NumPy 阵列和标准 Python 序列之间存在几个重要区别:

NumPy 数组在创建时具有固定大小,与 Python 列表不同(可以动态增长)。更改 ndarray 的大小将创建一个新数组并删除原始数组。

NumPy 数组中的元素都需要具有相同的数据类型,因此内存大小相同。例外情况:可以具有 (Python,包括 NumPy) 对象的数组,从而允许不同大小的元素数组。

NumPy 阵列便于对大量数据进行高级数学运算和其他类型的操作。通常,与使用 Python 的内置序列时,此类操作的执行效率更高,代码更少。

越来越多的科学和数学 Python 包正在使用 NumPy 数组;虽然这些通常支持 Python 序列输入,但它们在处理之前将此类输入转换为 NumPy 数组,并且它们经常输出 NumPy 数组。换句话说,为了有效地使用当今许多(甚至可能大多数)基于科学 / 数学 Python 的软件,仅仅知道如何使用 Python 的内置序列类型是不够的 —— 人们还需要知道如何使用 NumPy 数组。

 

 

 

按网上搜索到的教程安装NumPy组件

 

 

选择与自己python版本对应的。例如我的是Python3.12,Windows64位,所以下载如下的。

 

 

 

 

 

 

确认安装成功:

 

 

然后又提示错误:ModuleNotFoundError: No module named 'matplotlib'

原来还要安装matplotlib模块

 

Matplotlib 是Python的一个综合性的库,可创建静态的、动画的和可交互的可视化图形图像。

 

 

按网上的方法安装matplotlib模块

 

 

终于安装完成,用pip list查询已安装模块:

 

 

终于运行成功,完成坐标系转换。

 

本次的学习分享就到这里。

 

 

查看本帖全部内容,请登录或者注册

最新回复

边玩边学,一起加油,虽然艰难,定能成功,加油!!!   详情 回复 发表于 2024-9-3 11:53
点赞 关注

回复
举报

1491

帖子

1

TA的资源

五彩晶圆(初级)

沙发
 

纯粹就是玩一玩吧?????????????????????

点评

可不是嘛,就是边学边玩   详情 回复 发表于 2024-8-26 19:44
 
 

回复

187

帖子

1

TA的资源

纯净的硅(初级)

板凳
 
hellokitty_bean 发表于 2024-8-23 15:41 纯粹就是玩一玩吧?????????????????????

可不是嘛,就是边学边玩 

点评

,这种学习心态好呀。。。。。。。。。。。。。。。。。自由研究  详情 回复 发表于 2024-8-27 09:09
 
 
 

回复

1491

帖子

1

TA的资源

五彩晶圆(初级)

4
 
cc1989summer 发表于 2024-8-26 19:44 可不是嘛,就是边学边玩 

,这种学习心态好呀。。。。。。。。。。。。。。。。。自由研究

 
 
 

回复

417

帖子

0

TA的资源

纯净的硅(中级)

5
 

边玩边学,一起加油,虽然艰难,定能成功,加油!!!

点评

是的,在学习中收获。  详情 回复 发表于 2024-9-3 20:07
 
 
 

回复

187

帖子

1

TA的资源

纯净的硅(初级)

6
 
通途科技 发表于 2024-9-3 11:53 边玩边学,一起加油,虽然艰难,定能成功,加油!!!

是的,在学习中收获。

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
何立民教授:从Cygnal C8051F看8位单片机发展之路

从Cygnal C8051F看8位单片机发展之路 作 者: 北京航空航天大学  何立民 摘 要: 80C51是一个独特的8位单片机系 ...

2007年全国大学生电子设计竞赛 讨论专用帖(附加了几道与公布器件相关的题目、附加

本帖最后由 paulhyde 于 2014-9-15 08:57 编辑 2007年全国大学生电子设计竞赛马上拉开帷幕根据清单可以猜测很多题目。有需要的 ...

基于LM3S8962以太网的简单TFTP的服务器学习系列一

基于LM3S8962以太网的简单TFTP的服务器学习系列一 Stellaris 以太网控制器由一个完全集成的媒体访问控制器(MAC)和网络物 ...

谈谈嵌入式系统的可靠性(一)

许多的操作系统,在宣传自己的优异性时,不外乎上下文切换时间多么短、占用系统资源多么少、功能模块多么多、线程间通信手段 ...

枚举变量与宏的应用

本帖最后由 zhaojun_xf 于 2015-4-17 11:43 编辑 想必会C的网友对枚举和宏的定义与使用并不陌生,对于枚举和宏的区别大家应该 ...

FPGA特点

1) 采用FPGA设计ASIC电路(专用集成电路),用户不需要投片生产,就能得到合用的芯片。   2) FPGA可做 ...

【雅特力开发板 AT32F421 测评】6、再研究下EC11编码器

上次是中断调成功的,但这次我用读电平也成功了。上次我觉得中断最好,但这次我觉得还是电平比较好点。因为毕竟不用中断。 这 ...

EEWorld邀你来拆解(第7期)——拆拆减肥利器----日常测试

本帖最后由 吾妻思萌 于 2022-11-22 23:05 编辑 拆箱一个礼拜了,发现减肥利器确实不错,体重成功下了0.5公斤,但是一顿好吃 ...

【Luckfox幸狐 RV1106 Linux 开发板使用】 SC3336拍摄

本帖最后由 0x4C 于 2024-2-20 11:39 编辑 Luckfox的这块RV1106开发板是对SC3336进行了支持的,同时RV1106有着强大硬编码能力 ...

安装e2 studio时出错

在win7 64位操作系统上,安装e2studio_installer-2024-10_windows_host时出现,计算机中丢失api-ms-win-dore-path-l1-1-0.dll提 ...

关闭
站长推荐上一条 1/10 下一条
有奖直播 | AI之眼——安森美图像传感器 报名中
直播时间:2025年4月25日(周五)上午10:00-11:30
直播主题:AI之眼——安森美图像传感器
报名观看直播、直播间提问、填写问卷均有机会获得精美礼品!

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 7

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表