机器学习作业--PCA

目录

特征约减:

为什么进行特征约减?

怎么获得更具有代表性的数据?

怎么找到主成分,满足上述条件?

代码:


学习资料:PCA算法 - 知乎 (zhihu.com)

特征约减:

将高维的特征向量X转化成Y:X^{p}\rightarrow Y^{d}(d<<p)

其中:G^{d\times p}\epsilon RX^{p}\epsilon R

通过G与X做矩阵乘法进行维度转换:G\times X=Y^{d}

为什么进行特征约减?

1.有价值的特征信息少;

2.维度太大,查询检索的工作量大。

特征约减将p维的数据集转换为d维的数据集,但是降维时我们会损失部分数据,我们希望损失降低较小,保留更具有代表性的数据。

介绍常见的一种维度约减方法--PCA

怎么获得更具有代表性的数据?

下图中:蓝色点表示数据点集,每个数据表示为(x1,x2)。现在我们需要将二维数据集降成一维即,把二维散点转化为下图中红线上的点。(二维数据集为X,红线上点为Y,)那么红线1的代表性好还是红线2好?

思考:

如果将下面的点都映射到y轴上,下图中经过y=-2的点将会重合,损失了x坐标的信息;因此我们希望不同的点映射之后的位置不同,尽量不出现信息损失。

红线1的效果好:样本点在这个直线上的投影的离散程度更高。(通常把这个向量称为主成分)

希望数据投影的方差最大,方差越大,样本点在这个直线上的投影离散程度越高,效果越好。

怎么找到主成分,满足上述条件?

公式推导:

首先:给定n个样本,每个样本的维度为p维

{X_{1,},X_{2},...,Xn}\epsilon R^{p}

定义Z_{1j}为样本X_{j}在主成分a_{1}上的投影:

Z_{1j}=a_{1}^{\Gamma }X_{j}  

我们的目的是找到a_{1},使Z_{1j}的方差最大

和前面的特征约减对应:

G\leftarrow [a_{1},a_{2},...,a_{d}]

X_{j}\epsilon R^{p} \rightarrow G^{\Gamma }X_{j}\epsilon R^{d}

Z_{1j}的方差:

var[Z_{1j}]=\frac{1}{n}\sum_{i=1}^{n}(a_{1}^{\Gamma }x_{j}-a_{1}^{\Gamma }\overline{x})^{2}

=\frac{1}{n}\sum_{i=1}^{n}a_{1}^{\Gamma }(x_{i}-\overline{x})(x_{i}-\overline{x})^{\Gamma }a_{1}

令:S=\frac{1}{n}\sum_{i=1}^{n}(x_{i}-\overline{x})(x_{i}-\overline{x})^{\Gamma }

var[Z_{1j}]=a_{1}^{\Gamma }Sa_{1}

目标;找到主方向a_{1},使得var[Z_{1j}]=a_{1}^{\Gamma }Sa_{1}最大,且a_{1}^{\Gamma }a_{1}=1(为什么满足这个条件,不太理解)

引入拉格朗日乘子:

L=a_{1}^{\Gamma }Sa_{1}-\lambda (a_{1}^{\Gamma }a_{1}-1)

\frac{\varphi L}{\varphi a_{1}}=2Sa_{1}-2\lambda a_{1}=0

\Rightarrow Sa_{1}=\lambda a_{1}

得出 a 1 是协方差矩阵 S 的特征向量。

数据集:人脸识别数据集

代码:

PCA算法流程:

1.计算数据集均值;

2.计算协方差

3.计算协方差的特征向量

4.选择d个特征向量。G\leftarrow [a_{1},a_{2},...,a_{d}]X_{j}\epsilon R^{p} \rightarrow G^{\Gamma }X_{j}\epsilon R^{d}

def pca(data,k):#计算均值mean = np.mean(data,axis=0)#xi-均值removed_mean = data-mean#协方差矩阵SS=np.cov(removed_mean)#计算特征值,特征向量feature_val,feature_vector = np.linalg.eig(np.mat(S)) #获取排列的索引val_idx = np.argsort(feature_val)#获取协方差最大的K个特征值和对应的特征向量val_idx = val_idx[:-(k + 1):-1]vects = feature_vector[:, val_idx]#GX->Ylow_dim = vects.T*removed_meanreturn low_dim,mean,vects

Sklearn:

import numpy as np
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.datasets import fetch_lfw_people# 加载LFW (Labeled Faces in the Wild) 人脸数据集
lfw_people = fetch_lfw_people(min_faces_per_person=70, resize=0.4)# 准备数据
X = lfw_people.data
y = lfw_people.target# 标准化数据
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.25, random_state=42)# 使用PCA进行特征降维
n_components = 150  # 选择要保留的主成分数量
pca = PCA(n_components=n_components, whiten=True, svd_solver='randomized')
pca.fit(X_train)# 将训练和测试数据转换到选定数量的主成分空间
X_train_pca = pca.transform(X_train)
X_test_pca = pca.transform(X_test)# 训练一个分类器(这里使用支持向量机作为示例)
clf = SVC(kernel='rbf', class_weight='balanced')
clf.fit(X_train_pca, y_train)# 在测试集上评估分类器
accuracy = clf.score(X_test_pca, y_test)
print("Accuracy: {:.2f}".format(accuracy))

总结:

特征约减的优点:

缺点:

仍然会损失(p-d)维度的信息;

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小白入门java基础-反射详解

一&#xff1a;介绍 Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的高级程序设计语言。 Java 可运行于多个平台&#xff0c;如 Windows, Mac OS 及其他多种 UNIX 版本的系统。Java语言编写的程序&#xff0c;在一次编译后&#xff0c;可以在多个系统平台上运行。 主…

ChatGPT 对SEO的影响

ChatGPT 的兴起是否预示着 SEO 的终结&#xff1f; 一点也不。事实上&#xff0c;如果使用得当&#xff0c;它可以让你的 SEO 工作变得更加容易。 强调“正确使用时”。 你可以使用ChatGPT来帮助进行关键字研究的头脑风暴部分、重新措辞你的内容、生成架构标记等等。 但你不…

【Redis-02】Redis数据结构与对象原理 -上篇

Redis本质上是一个数据结构服务器&#xff0c;使用C语言编写&#xff0c;是基于内存的一种数据结构存储系统&#xff0c;它可以用作数据库、缓存或者消息中间件。 我们经常使用的redis的数据结构有5种&#xff0c;分别是&#xff1a;string(字符串)、list(列表)、hash(哈希)、s…

AcWing算法提高课-2.3.1矩阵距离

算法提高课整理 CSDN个人主页&#xff1a;更好的阅读体验 本文同步发表于 CSDN | 洛谷 | AcWing | 个人博客 原题链接 题目描述 给定一个 01 矩阵&#xff0c;求矩阵中每个元素离 1 的最短曼哈顿距离。 输入格式 第一行两个整数 n , m n,m n,m。 接下来一个 n n n 行 …

axios的使用及说明

目录 1.说明 2.直接使用 3.封装使用 4.注意 1.说明 官网&#xff1a;Axios 实例 | Axios中文文档 | Axios中文网 Axios 是一个基于 promise 网络请求库&#xff0c;作用于node.js 和浏览器中。 它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使…

【期末复习】 计算机操作系统

第一章 操作系统引论 历史上最重要的阶段可能会考选择填空&#xff0c;牢记三大特点&#xff0c;四大特征&#xff0c;五大功能 1.1 OS的目标和作用 1.2 OS的发展过程 1.3 OS的基本特性&#xff08;必考&#xff09; 并发 共享 虚拟 异步 1.4 OS的主要功能 后续都是一个大章 五…

DrGraph原理示教 - OpenCV 4 功能 - 阈值

普通阈值 OpenCV中的阈值用于相对于提供的阈值分配像素值。在阈值处理中&#xff0c;将每个像素值与阈值进行比较&#xff0c;如果像素值小于阈值则设置为0&#xff0c;否则设置为最大值&#xff08;一般为255&#xff09;。 在OpenCV中&#xff0c;有多种阈值类型可供选择&am…

DevOps系列之 JNI实现Java调用C的实现案例

JNI&#xff08;Java Native Interface&#xff09;允许Java代码与其他语言编写的代码进行交互。以下是一个简单的JNI示例&#xff0c;演示如何使用JNI在Java中调用C/C函数。 最终的目录结构如下&#xff1a; JNI&#xff08;Java Native Interface&#xff09;允许Java代码与其…

docker应用部署(部署MySql,部署Tomcat,部署Nginx,部署Redis)

Docker 应用部署 一、部署MySQL 搜索mysql镜像 docker search mysql拉取mysql镜像 docker pull mysql:5.6创建容器&#xff0c;设置端口映射、目录映射 # 在/root目录下创建mysql目录用于存储mysql数据信息 mkdir ~/mysql cd ~/mysqldocker run -id \ -p 3307:3306 \ --na…

cocos creator + vscode debug

安装插件 安装插件&#xff1a;JavaScript Debugger 配置 7456 为本地cocos creator的启动端口 启动debug调试 选择对应的启动方式

【LLM】人工智能应用构建的十大预训练NLP语言模型

在人工智能领域&#xff0c;自然语言处理&#xff08;NLP&#xff09;被广泛认为是阅读、破译、理解和理解人类语言的最重要工具。有了NLP&#xff0c;机器可以令人印象深刻地模仿人类的智力和能力&#xff0c;从文本预测到情感分析再到语音识别。 什么是自然语言处理&#xf…

【华为机试】2023年真题B卷(python)-滑动窗口最大值

一、题目 题目描述&#xff1a; 有一个N个整数的数组&#xff0c;和一个长度为M的窗口&#xff0c;窗口从数组内的第一个数开始滑动直到窗口不能滑动为止&#xff0c; 每次窗口滑动产生一个窗口和&#xff08;窗口内所有数的和&#xff09;&#xff0c;求窗口滑动产生的所有窗口…