当前位置: 首页 > news >正文

【视频讲解】主成分分析原理与水果成熟数据实例:Python中PCA-LDA 与卷积神经网络CNN...

全文链接:https://tecdat.cn/?p=37450 

分析师:Shixian Ding

主成分分析(PCA)作为数据科学中用于可视化和降维的重要工具,在处理具有大量特征的数据集时非常有用。就像我们难以找到时间阅读一本 1000 页的书,而更倾向于 2 到 3 页的总结以抓住整体概貌一样,当数据集中特征过多时,PCA 可以帮助我们减少维度,提高模型训练效率,同时尽可能保留更多信息点击文末“阅读原文”获取完整代码数据)。

例如在图像处理和基因组研究等常见应用中,往往需要处理成千上万甚至数万个列的数据,此时维度灾难可能成为问题,而 PCA 则能发挥重要作用。

视频

降维中的主成分分析法(PCA)

在众多的数据集中,部分变量的研究价值相对有限。为了实现连贯性分析,降维便成为一种必要手段。而在降维过程中,关键在于尽可能地保留原始数据中的有用信息。接下来,以二维数据降为一维为例,对主成分分析法进行介绍。

3a795bf578460316232c90387efcbf7a.png

由于我们所研究的主要问题在于参数之间的相关关系,而这种相关关系主要体现在各个数据点的相对位置方面。需注意的是,数据点的具体位置并不会对其相关关系产生影响。

6b78c0a3f447bb48473000d6ccf1bc1a.png

接下来,我们需要找出对数据影响最大的方向。为此,不妨设定一个单位向量来表示这个方向。然后,将表示各个数据点的向量向该方向进行投影,并求出方差的表达式。

342b4f91250d073ad91acb2c11352cfe.png

在对数据影响最大的方向上,数据点的分散程度最高,也就是方差最大。在此处,我们运用拉格朗日乘数法来求取最值。从化简后的结果可以看出,我们所寻求的方向正是数据协方差矩阵的特征向量方向。对协方差矩阵进行特征值分解,特征值中较大的那个所对应的特征向量具有重要意义。

一、实现过程

  • 数据标准化:首先对数据进行处理,使其每个特征的均值为零,方差为一。

  • 这样可以确保数据在后续分析中的稳定性和可比性。

  • 协方差矩阵计算:计算标准化后数据的协方差矩阵,该矩阵能够描述特征之间的相关性。

  • 协方差矩阵反映了不同特征之间的关联程度。

  • 特征值分解:对协方差矩阵进行特征值分解,从而得到特征值和对应的特征向量。

  • 特征值和特征向量在主成分分析中起着关键作用。

  • 主成分选择:依据特征值的大小,选取前 k 个特征值对应的特征向量,以此构建新的坐标系。

  • 选择重要的特征向量可以更好地表示数据的主要信息。

  • 数据投影:将原始数据投影到新的坐标系中,进而得到降维后的数据集。

  • 通过投影实现数据的降维处理。

二、应用场景

  • 图像处理:PCA 可用于图像压缩,在减小图像维度的同时保留主要信息。

  • 有助于节省存储空间和提高图像处理效率。

  • 金融分析:在金融领域,PCA 可用于降维和风险管理,能够帮助识别资产之间的相关性。

  • 为金融决策提供有力支持。

三、优点

  • 降维:PCA 能够减小数据的维度,降低存储和计算成本。

  • 提高数据处理的效率。

  • 去冗余:有助于去除冗余信息,提取出最重要的特征。

  • 使数据更加简洁有效。

  • 可视化:可将数据可视化,以便更好地理解数据结构和关系。

  • 增强对数据的直观认识。

四、缺点

  • 信息损失:降维可能会导致信息损失,特别是当较少的主成分用于表示数据时。

  • 需要在降维和信息保留之间进行权衡。

  • 线性假设:PCA 基于线性假设,可能不适用于非线性数据。

  • 对于非线性数据的处理效果有限。

  • 选择主成分数量:需要选择保留的主成分数量,这可能是一个主观过程。

  • 增加了分析的不确定性。

Python主成分分析PCA、线性判别分析LDA、卷积神经网络分类分析水果成熟状态数据|附代码数据

本文对给定数据集进行多类别分类任务时所采用的各种统计和机器学习技术进行了总结。给定数据集包含 20 个类别,对应 10 种不同的水果及其成熟或未成熟状态。为实现分类任务,首先进行数据可视化,接着进行数据预处理,包括异常值检测技术(如局部异常因子和隔离森林)以及数据缩放技术(如标准缩放器和分位数转换器)。

随后运用降维算法如主成分分析(PCA)和线性判别分析(LDA)以及聚类技术,将聚类 ID 作为额外特征添加到数据集中。最后尝试通过深度学习技术(如卷积神经网络)来提高模型准确性。通过交叉验证评估模型性能,并比较其准确性和计算效率。总体而言,本项目展示了统计机器学习技术在多类别分类任务中的有效性,并强调了异常值检测和降维在提高机器学习模型准确性方面的重要性。

数据加载与重构

  1. 导入数据:

df = pd.read_csv('../../codin.csv')df.head()
``````
df = pd.read\_csv('../../co/train.csv')df.head()将字符串标签转换为代码:categories\_list = df\[ 'category' \].astype( 'category' ).cat.categoriesdf\[ 'category' \] = df\[ 'category' \].astype('category').cat.codes
  1. 拆分数据为特征矩阵和目标向量:

X = data\[:,:-1\]y = data\[:,-1\]print(X.shape)print(y)

abb7965b8c44d86cb5e5c5f68d940e24.png

去除异常值

使用隔离森林去除异常值:

from sklearn.ensemble import IsolationForestclf = IsolationForest(max\_samples = 100, random\_state = 1

多层感知机神经网络

  1. 数据标准化:

from  sklearn.preprocessing  import  StandardScalerscaler = StandardScaler()
  1. 进行主成分分析:

from sklearn.decomposition import PCApca = PCA(n\_components=363)pca.fit(nn\_X_train)
  1. 进行线性判别分析:

from  sklearn.discriminant\_analysis  import  LinearDiscriminantAnalysislda = LinearDiscriminantAnalysis(n\_components=19)lda.fit(nn\_X\_train, nn\_y\_train)nn\_X\_train\_lda = lda.transform(nn\_X\_train)nn\_X\_test\_lda = lda.transform(nn\_X\_test)
  1. 构建并训练多层感知机模型:

val\_acc = \[\]pca\_acc = \[\]lda\_acc = \[\]pca\_lda\_acc = \[\]for i in range(40, 44):# clf = MLPClassifier(solver='adam' , alpha=1e-5, random\_state=i, max\_iter=10000, hidden\_layer\_sizes=(300, 60))# clf = MLPClassifier(solver='lbfgs' , alpha=1e-5, random\_state=i, max\_iter=10000, hidden\_layer\_sizes=(300, 59))# best one till nowclf = MLPClassifier(solver='adam' , alpha=1e-5, random\_state=i, max\_iter=10000, hidden\_layer\_sizes=(448, 119, 170, 116))#     clf = MLPClassifier(solver='adam' , alpha=1e-5, random\_state=i, max\_iter=10000, hidden\_layer\_sizes=(300, 60))clf.fit(nn\_X\_train, nn\_y_train)

04c178c788fc6757844411b26213605c.png

  1. 输出不同处理方式下的平均准确率:

print(sum(val\_acc)/len(val\_acc))print(sum(pca\_acc)/len(pca\_acc))print(sum(lda\_acc)/len(lda\_acc))print(sum(pca\_lda\_acc)/len(pca\_lda\_acc))
``````

837c7a28d3c94f65e691e71ea2ef7430.png

卷积神经网络

  1. 特征值归一化:

print(X_train.max())

b7d90dd8ceb49426815e0bfe777edfb4.png

主成分分析PCA

from sklearn.decomposition import PCApca = PCA(n\_components=900)X\_train = pca.fit\_transform(X\_train)X\_test = pca.transform(X\_test)X\_train = X\_train.reshape(X\_train.shape\[0\], 30, 30, 1)X\_test = X\_test.reshape(X\_test.shape\[0\], 30, 30, 1)

LDA

  1. 进行线性判别分析:

# lda = LDA(n\_components=18)# X\_train = lda.fit\_transform(X\_train, y\_train)# X\_test = lda.transform(X_test)

可视化样本

plt.figure(figsize=(10,10))for i in range(25):plt.subplot(5,5,i+1)

863cd657d1bf4ab594da3a3f8e48d2bb.png


点击标题查阅往期内容

b986d913a5f5b2c1bca092a5ef0bc5d3.png

R语言主成分PCA、因子分析、聚类对地区经济研究分析重庆市经济指标

outside_default.png

左右滑动查看更多

outside_default.png

01

c762737c1e852f825d6aadc7dce3386d.png

02

c44ff4f3f7048f8c841a04b920392290.png

03

9c4d11f42e34e0ef51bf16e7610feb4e.png

04

fb547d6e3b35084ac48d3c334c6b5c2f.png

定义卷积神经网络架构

from tensorflow.keras import regularizersmodel = models.Sequential()model.add(layers.Conv2D(128, (3, 3), activation

75bc0eb436c2a6eb1bbde6e2aa77c6c7.png

00ea2ec9d1efdced5b18331f34b94099.png

编译卷积神经网络

model.compile(optimizer='adam',

e2d56f312dc98750bd2dbf548f783d47.png

绘制准确率与 epoch 的关系图

test\_loss, test\_acc = model.evaluate(X\_test.reshape(X\_test.shape\[0\], 64, 64, 1),  y_test, verbose=2)
``````
10/10 - 0s - loss: 0.9434 - accuracy: 0.7888 - 211ms/epoch - 21ms/step

583f0c37bec25da84085150919bdf115.png

评估模型并输出结果

df\_test = pd.read\_csv('../../codes/sml/project/test.csv')df_test.head()

b89f22d82200ab9a14f80cdf420163a8.png

结论

通过对多种机器学习和深度学习技术的应用与比较,本文展示了不同方法在多类别分类任务中的性能表现。同时,数据预处理中的异常值检测和降维技术对提高模型准确性起到了重要作用。未来,可以进一步探索更先进的模型架构和优化方法,以提高多类别分类任务的性能。

关于分析师

d9560264e97c37bc60f4415afa1b48c8.png

在此对Shixian Ding对本文所作的贡献表示诚挚感谢,他在中国科学技术大学完成了计算机科学与技术(主修)和金融学(辅修)的学位,专注机器学习、数理金融、数据采集、数据挖掘领域。擅长 R 语言、Python、MySQL、Matlab。

27b8e5dfe0fcb91e24fef099419732b5.jpeg

本文中分析的数据、代码分享到会员群,扫描下面二维码即可加群!

c5b54b1ac5351f73f818dfa63a50d9f1.png


资料获取

在公众号后台回复“领资料”,可免费获取数据分析、机器学习、深度学习等学习资料。

810984ffaae9fde748b05a312e4335a2.jpeg

点击文末“阅读原文”

获取全文完整代码数据资料。

本文选自《PCA主成分分析原理与水果成熟数据实例:Python中PCA-LDA 与卷积神经网络CNN》。

点击标题查阅往期内容

数据分享|R语言用主成分PCA、 逻辑回归、决策树、随机森林分析心脏病数据并高维可视化

R语言逻辑回归logistic模型分析泰坦尼克titanic数据集预测生还情况

R语言是否对二分连续变量执行逻辑回归

R语言用lme4多层次(混合效应)广义线性模型(GLM),逻辑回归分析教育留级调查数据

R语言随机森林RandomForest、逻辑回归Logisitc预测心脏病数据和可视化分析

R语言基于Bagging分类的逻辑回归(Logistic Regression)、决策树、森林分析心脏病患者

R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险

R语言用局部加权回归(Lowess)对logistic逻辑回归诊断和残差分析

R语言用主成分PCA、 逻辑回归、决策树、随机森林分析心脏病数据并高维可视化

R语言用线性模型进行臭氧预测:加权泊松回归,普通最小二乘,加权负二项式模型,多重插补缺失值

R语言Bootstrap的岭回归和自适应LASSO回归可视化

R语言中回归和分类模型选择的性能指标

R语言多元时间序列滚动预测:ARIMA、回归、ARIMAX模型分析

R语言用lme4多层次(混合效应)广义线性模型(GLM),逻辑回归分析教育留级调查数据

R语言计量经济学:虚拟变量(哑变量)在线性回归模型中的应用

R语言 线性混合效应模型实战案例

R语言混合效应逻辑回归(mixed effects logistic)模型分析肺癌数据

R语言如何用潜类别混合效应模型(LCMM)分析抑郁症状

R语言基于copula的贝叶斯分层混合模型的诊断准确性研究

R语言建立和可视化混合效应模型mixed effect model

R语言LME4混合效应模型研究教师的受欢迎程度

R语言 线性混合效应模型实战案例

R语言用Rshiny探索lme4广义线性混合模型(GLMM)和线性混合模型(LMM)

R语言基于copula的贝叶斯分层混合模型的诊断准确性研究

R语言如何解决线性混合模型中畸形拟合(Singular fit)的问题

基于R语言的lmer混合线性回归模型

R语言用WinBUGS 软件对学术能力测验建立层次(分层)贝叶斯模型

R语言分层线性模型案例

R语言用WinBUGS 软件对学术能力测验(SAT)建立分层模型

使用SAS,Stata,HLM,R,SPSS和Mplus的分层线性模型HLM

R语言用WinBUGS 软件对学术能力测验建立层次(分层)贝叶斯模型

SPSS中的多层(等级)线性模型Multilevel linear models研究整容手术数据

用SPSS估计HLM多层(层次)线性模型模型

R语言高维数据的主成分pca、 t-SNE算法降维与可视化分析案例报告

R语言惩罚logistic逻辑回归(LASSO,岭回归)高维变量选择的分类模型案例

R语言有RStan的多维验证性因子分析(CFA)

主成分分析(PCA)原理及R语言实现及分析实例

R语言无监督学习:PCA主成分分析可视化

R语言使用Metropolis- Hasting抽样算法进行逻辑回归

R语言多元Logistic逻辑回归 应用案例

R语言自适应LASSO 多项式回归、二元逻辑回归和岭回归应用分析

R语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测

R语言基于树的方法:决策树,随机森林,Bagging,增强树

spss modeler用决策树神经网络预测ST的股票

R语言中自编基尼系数的CART回归决策树的实现

python在Scikit-learn中用决策树和随机森林预测NBA获胜者

matlab使用分位数随机森林(QRF)回归树检测异常值

基于随机森林、svm、CNN机器学习的风控欺诈识别模型

R语言惩罚logistic逻辑回归(LASSO,岭回归)高维变量选择的分类模型案例

R语言用标准最小二乘OLS,广义相加模型GAM ,样条函数进行逻辑回归LOGISTIC分

e5460031b67cc80dcf70d01b4564b556.jpeg

6a34b372555b4c4a763e8a503b599d1e.png

abdefe22f2b555275154f869cfd4475c.png

17c62d69f3af13b773b0caabf9058851.jpeg

d77a38e78c7eb4577f4e7763a9634784.png

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • OpenAI 将向企业开放 GPT-4o 模型定制版
  • SQL进阶技巧:如何按任意时段分析时间区间问题? | 分区间讨论【左、中、右】
  • 汽车小程序怎么做 汽车服务小程序系统开发制作方法
  • python自动化脚本:让工作自动化起来
  • 视频活码的快捷制作方法,轻松将多种格式视频生码
  • CPU、MPU、MCU、SOC分别是什么?
  • vue2.0纯前端预览附件方法汇总
  • Linux | 探究C语言文件接口与Linux系统文件接口的区别与联系 | fopen和open的区别与联系
  • vue预览全景图片
  • 【设计模式之原型模式——矩形原型】
  • javacv-ffmpeg ProcessBuilder实现对图片的旋转
  • 【MySQL数据库管理问答题】第1章 MySQL 简介
  • 一文讲清协同过滤,矩阵分解,spark als,显示反馈与隐式反馈
  • 蓝牙耳机百元内怎么选?四款上榜百元品牌机型合集
  • HTB-Explosion(rdp连接)和preignition(目录遍历)
  • “大数据应用场景”之隔壁老王(连载四)
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • create-react-app项目添加less配置
  • Go 语言编译器的 //go: 详解
  • java 多线程基础, 我觉得还是有必要看看的
  • js ES6 求数组的交集,并集,还有差集
  • Lucene解析 - 基本概念
  • mysql_config not found
  • Swoft 源码剖析 - 代码自动更新机制
  • 不上全站https的网站你们就等着被恶心死吧
  • 给Prometheus造假数据的方法
  • 如何利用MongoDB打造TOP榜小程序
  • 首页查询功能的一次实现过程
  • 数据可视化之下发图实践
  • 昨天1024程序员节,我故意写了个死循环~
  • ​iOS安全加固方法及实现
  • ​ssh免密码登录设置及问题总结
  • # 服务治理中间件详解:Spring Cloud与Dubbo
  • # 利刃出鞘_Tomcat 核心原理解析(二)
  • #pragma once与条件编译
  • (6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (bean配置类的注解开发)学习Spring的第十三天
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (十)T检验-第一部分
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (算法)求1到1亿间的质数或素数
  • (五)关系数据库标准语言SQL
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .Net IE10 _doPostBack 未定义
  • .NET MVC 验证码
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .net分布式压力测试工具(Beetle.DT)
  • .vimrc 配置项
  • 。。。。。
  • @component注解的分类
  • @GlobalLock注解作用与原理解析