18-1降维与特征选择——主成分分析方法(附matlab程序)

news2024/11/26 12:00:06

1.简述

      随着数据量的不断增加和数据维度的不断扩展,如何进行高效的数据降维处理成为了一个热门话题。在数据分析领域,PCA算法作为一种常用的数据降维方法,可以对多个特征进行降维,提高计算效率和降低存储空间需求。本文以波士顿房价数据集为例,探讨如何利用PCA算法对房屋价格进行降维。

什么是主成分分析?

​ PCA(Principal Component Analysis) 是一种常见的数据分析方式,常用于高维数据的降维,可用于提取数据的主要特征分量。PCA通常用于降低大型数据集的维数,方法是数据集中的指标数量变少,并且保留原数据集中指标的大部分信息。总而言之:减少数据指标数量,保留尽可能多的信息。

PCA适用范围

  • 在已标注与未标注的数据上都有降维技术
  • 主要关注未标注数据上的降维技术,将技术同样也可以应用于已标注的数据。

优缺点

​ PCA优点在于数据降维,便于提取数据的主要特征,使得数据更容易使用,减少计算开销,去除噪音等等。缺点在于不一定需要,有可能损失有用信息,只针对训练集保留主要信息,可能造成过拟合。适用于结构化数据.PCA不仅能将数据压缩,也使得降维之后的数据特征相互独立。

PCA的方法步骤

​ PCA作为一个传统的机器学习算法,可以通过基础的线代知识推导(协方差矩阵计算,计算特征向量,特征值,正交...)。主要涉及的数学方法不在本节过多描述,有兴趣的读者可以参考花书中的线性代数部分,做推导。PCA的步骤主要分为五步;

 标准化连续初始变量的范围(非结构化转成结构化)

​ 此步骤的目的是标准化结构化指标的范围,因为PCA对于初始变量的方差非常敏感,如果初始变量的范围之间存在较大差异,则会造成很大变差,使用标准化可以将数据转换为可比较的尺度。

2.代码

%% I. 清空环境变量   主成分分析
clear all
clc

%% II. 导入数据
load spectra;

%% III. 随机划分训练集与测试集
temp = randperm(size(NIR, 1));
% temp = 1:60;
%%
% 1. 训练集——50个样本
P_train = NIR(temp(1:50),:);
T_train = octane(temp(1:50),:);
%%
% 2. 测试集——10个样本
P_test = NIR(temp(51:end),:);
T_test = octane(temp(51:end),:);

%% IV. 主成分分析
%%
% 1. 主成分贡献率分析     PCAVar   特征值
[PCALoadings,PCAScores,PCAVar] = princomp(NIR);
figure
percent_explained = 100 * PCAVar / sum(PCAVar);
pareto(percent_explained)
xlabel('主成分')
ylabel('贡献率(%)')
title('主成分贡献率')

%%
% 2. 第一主成分vs.第二主成分   可以用于训练样本是否好的判断依据
[PCALoadings,PCAScores,PCAVar] = princomp(P_train);
figure
plot(PCAScores(:,1),PCAScores(:,2),'r+')
hold on
[PCALoadings_test,PCAScores_test,PCAVar_test] = princomp(P_test);
plot(PCAScores_test(:,1),PCAScores_test(:,2),'o')
xlabel('1st Principal Component')
ylabel('2nd Principal Component')
legend('Training Set','Testing Set','location','best')

%% V. 主成分回归模型
%%
% 1. 创建模型
k = 4;    %主成分设置为4个
betaPCR = regress(T_train-mean(T_train),PCAScores(:,1:k));    %前四列提取出来建立回归模型
betaPCR = PCALoadings(:,1:k) * betaPCR;
betaPCR = [mean(T_train)-mean(P_train) * betaPCR;betaPCR];
%%
% 2. 预测拟合
N = size(P_test,1);       %大家根据自己情况调整N值和P_test
T_sim = [ones(N,1) P_test] * betaPCR;         

%% VI. 结果分析与绘图
%%
% 1. 相对误差error
error = abs(T_sim - T_test) ./ T_test;
%%
% 2. 决定系数R^2
R2 = (N * sum(T_sim .* T_test) - sum(T_sim) * sum(T_test))^2 / ((N * sum((T_sim).^2) - (sum(T_sim))^2) * (N * sum((T_test).^2) - (sum(T_test))^2)); 
%%
% 3. 结果对比
result = [T_test T_sim error]

%% 
% 4. 绘图
figure
plot(1:N,T_test,'b:*',1:N,T_sim,'r-o')
legend('真实值','预测值','location','best')
xlabel('预测样本')
ylabel('辛烷值')
string = {'测试集辛烷值含量预测结果对比';['R^2=' num2str(R2)]};
title(string)


 

3.运行结果

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/665629.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Elacticsearch】 集群发现机制 ,分片副本机制,负载机制,容错机制,扩容机制, 分片路由原理

集群发现机制 Elasticsearch采用了master-slave模式, ES会在集群中选取一个节点成为主节点,只有Master节点有资格维护全局的集群状态,在有节点加入或者退出集群的时候,它会重新分配分片,并将集群最新状态发送给集群中其…

构造函数和class类挂载属性和方法的相互转化

class是es6新出的关键词,方便我们快速建立类和继承的关系,es6以前我们都是使用function构造函数模拟类 本文讲述了function构造函数和类中定义属性方法的对应关系,主要有以下四点 1.实例属性 2.实例方法 3.原型方法 4.静态方法 类中定义 cl…

学生管理系统(SpringBoot+MybatisPlus+Vue+ElementUI)

做了一个很简单的学生管理系统,就两张表login,student。主要是用它熟悉一下Vue和ElementUI。下面看下一些页面 登录页面 主页 添加、修改页面 删除 注销 我这里分享Jar包和dist:包含.sql文件 链接:https://pan.baidu.com/s/1ZDxv…

比较全面的DHCP配置

DHCP基本原理和配置 1.基本原理 2.配置 2.1.基于接口的DHCP配置 2.2.基于全局的DHCP配置 2.3.DHCP中继配置 1、基本原理 DHCP (dynamic host configration protocol) 动态主机配置协议,用来给主机自动分配 IP 地址,基于UDP封装&…

重新了解的git以及git的工作场景

git的四大状态 untrack,modified,committed和staged untrack 没有记录的文件,就是新创建的文件 modified 修改过的文件,和版本库里的文件不一致 staged 暂存,把改动记录下来。执行完git add之后,得到的状态…

CSS面经

1、CSS的BFC 一、何为BFC BFC(Block Formatting Context)格式化上下文,是Web页面中盒模型布局的CSS渲染模式,指一个独立的渲染区域或者说是一个隔离的独立容器。 二、形成BFC的条件 1、浮动元素,float 除 none 以外的值…

SpringMVC 源码分析之 DispatcherServlet

SpringMVC 源码分析之 DispatcherServlet FrameworkServletserviceprocessRequestLocaleContext 和 RequestAttributesLocaleContextRequestAttributes 事件发布 DispatcherServletdoService代码分析 doDispatch参数含义具体的处理逻辑: processDispatchResult 引用…

CH2023、Adobe Character Animator 2023(动画角色制作软件)下载教程、安装教程

最后附下载地址 Adobe CH简介: Adobe Character Animator是一款基于动画制作的软件,它可以将手绘的角色通过摄像头或麦克风捕捉到的实时动作转化为动画效果。该软件结合了人工智能和动画技术,可以快速创建高质量的角色动画,并且…

构建基于前后端分离的医学影像学学习平台:Java技术实现与深度解析

在医学领域,影像学学习平台是一种重要的工具,用于帮助医学学生和专业人士学习和研究医学影像。本文将介绍如何使用Java构建一个基于前后端分离的医学影像学学习平台,通过结合前沿的Web开发技术和医学影像处理算法,为用户提供强大且高效的学习工具。 技术架构设计: 在构…

华为OD机试之阿里巴巴找黄金宝箱(II)(Java源码)

阿里巴巴找黄金宝箱(II) 题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0~n 的箱子,每个箱子上面贴有箱子中藏有金币的数量。 从金币数量中选出一个数字集合,并销毁贴有这些数字的…

Visual ChatGPT原理解读——大模型论文阅读笔记四

论文:https://arxiv.org/abs/2303.04671 代码:https://github.com/microsoft/TaskMatrix 一. 整体框架 如图所示,用户上传一张黄花的图像并输入一个复杂的语言指令“请根据该图像的预测深度生成一朵红花,然后逐步使其像卡通一样”…

go-zero学习 第一章 基础

go-zero学习 第一章 基础 重要提示1 相关命令2 参考文档3 架构图4 go-zero环境搭建4.1 注意事项4.2 go-zero 需要安装的组件4.3 自动安装4.4 手动安装 5 单体服务5.1 简单入门5.2 api语法5.3 api 文件格式化 6 微服务6.1 简单入门6.2 proto 语法 7 目录结构介绍 重要提示 因官…

spring boot绮梦餐饮系统-计算机毕设 附源码88672

spring boot绮梦餐饮系统 目录 毕业设计 摘 要 Abstract 第1章 前 言 1.1 研究背景 1.2 研究现状 1.3 系统开发目标 第2章 系统开发环境 2.1 J2EE技术 2.2 Spring boot框架 2.3 MySQL数据库 2.4 B/S结构 2.5 JavaScript 运行模式 1.1是一种解释性脚本语言&…

Segment Anything Model(SAM)如何促进医学图像分割

文章目录 How Segment Anything Model (SAM) Boost Medical Image Segmentation?摘要segment anything modelHow SAM performs on Medical Image Segmentation?Pathology Image SegmentationLiver Tumor Segmentation from CECTPolyps Segmentation from Colonoscopy ImagesB…

Win10 hyper-v与vmware不兼容解决方案

Win10 hyper-v与vmware不兼容怎么办 一、异常1.1 异常描述 - V M w a r e W o r k s t a t i o n 与 H y p e r − V 不兼容 \color{red}{VMware Workstation 与 Hyper-V 不兼容} VMwareWorkstation与Hyper−V不兼容1.2 异常原因 二、解决办法2.1 关闭Hyper-V启动2.2 关闭内核…

【面试题】6月 vue核心面试题汇总

大厂面试题分享 面试题库 前后端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 web前端面试题库 VS java后端面试题库大全 一、MVVM原理 在Vue2官方文档中没有找到Vue是MVVM的直接证据,但文档有提到&am…

判断数组中的每个元素是否为NaN numpy.isnan()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 判断数组中的每个元素是否为NaN numpy.isnan() [太阳]选择题 请问关于以下代码的最后输出正确的是? import numpy as np a np.array([1, np.nan, np.inf, float(nan)]) print(&…

PSD矢量处理:Graphics Mill 11.1.18 Crack

光栅和矢量处理 .NET SDK 图形铣床 11 图PSD矢量处理:Graphics Mill 11.1.18可供 .NET 和 ASP.NET 开发人员使用的最可靠的映像工具集。它允许用户轻松地向 .NET 应用添加复杂的光栅和矢量图像处理功能。 光栅图形 加载并保存 JPEG、PNG 和另外 8 种图像格式 调整大小&#xff…

SignalR服务主动发送消息给客户端

文章目录 背景尝试方案使用IHubContext上下文进行处理第一步 创建一个类用于处理上下文(WarningBroadcast)第二步:如何实例化这个对象呢下面是我实现的方式 第三步:使用扩展类 调用通知关于MessageBus的使用demo发布消息订阅消息 …

java 心理教育网站系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

一、源码特点 java 心理教育网站系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0&…