白板推导系列Pytorch-PCA降维

前面在看花书的时候就遇到过PCA,但是花书上的推导和白板推导中的推导不太一样,花书上的推导我至今还没弄清楚,但是这个我懂了,接下来我将以mnist数据集为例实现PCA降维并利用sklearn朴素贝叶斯分类器分类

导入相关包

import torch
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB

定义PCA类

class PCA:def __init__(self,output_dim) -> None:self.output_dim = output_dimdef fit(self,X_data):N = len(X_data)H = torch.eye(n=N)-1/N*(torch.matmul(torch.ones(size=(N,1)),torch.ones(size=(1,N))))X_data = torch.matmul(H,X_data)_,_,v = torch.svd(X_data)self.base = v[:,:self.output_dim]def fit_transform(self,X_data):self.fit(X_data)return self.transform(X_data)def transform(self,X_data):return torch.matmul(X_data,self.base)def inverse_transform(self,X_data):return torch.matmul(X_data,self.base.T)

加载mnist数据集

digits = load_digits()
X_train, X_test, y_train, y_test = train_test_split(digits.data,digits.target, test_size=0.2, random_state=42)X_train = torch.tensor(X_train,dtype=torch.float)
X_test = torch.tensor(X_test,dtype=torch.float)
y_train = torch.tensor(y_train,dtype=torch.float)
y_test = torch.tensor(y_test,dtype=torch.float)

数据集二维可视化

pca = PCA(2)
X_train_pca = pca.fit_transform(X_train)
plt.scatter(X_train_pca[:,0],X_train_pca[:,1],c=y_train)

恢复原数据

我们可以看看降到不同的维度后还原成的数据损失了多少信息

plt.figure()
plt.subplot(331)for i,dim in enumerate([2,10,20,30,40,50,60]):pca = PCA(dim)X_train_pca = pca.fit_transform(X_train)X_data = pca.inverse_transform(X_data=X_train_pca)plt.subplot(2,4,i+1)plt.imshow(X_data[0].view(8,8))
plt.subplot(2,4,8)
plt.imshow(X_train[0].view(8,8))
plt.show()

朴素贝叶斯分类

# 将图片降到20维用于训练
pca = PCA(20)
X_train_pca = pca.fit_transform(X_train)
model = GaussianNB()
model.fit(X_train_pca,y_train)
X_test_pca = pca.transform(X_test)
model.score(X_test_pca,y_test)

得到的准确率为0.9361111111111111

白板推导系列Pytorch-PCA降维相关推荐

  1. 【白板推导系列笔记】降维-PCA-最大投影方差最小重构代价

    作者:shuhuai008 链接:[机器学习][白板推导系列][合集 1-33]_哔哩哔哩_bilibili PCA的核心就是对原始特征空间的重构(将一组可能线性相关的变量,通过正交变换变换成一组线性 ...

  2. 【白板推导系列笔记】降维-主成分分析-概率角度(Probabilistic PCA)

    教科书对PCA的推导一般是基于最小化重建误差或者最大化可分性的,或者说是通过提取数据集的结构信息来建模一个约束最优化问题来推导的.事实上,PCA还有一种概率形式的推导,那就是概率PCA,PRML里面有 ...

  3. 机器学习-白板推导-系列(五)笔记:降维(PCA/SVD/PCoA/PPCA)

    文章目录 0 笔记说明 1 背景 1.1 样本均值 1.2 样本协方差矩阵 2 主成分分析PCA 2.1 最大投影方差 2.2 最小重构距离 2.3 总结 3 SVD分解HX 4 主坐标分析PCoA ...

  4. 机器学习-白板推导系列(三十)-生成模型(Generative Model)

    机器学习-白板推导系列(三十)-生成模型(Generative Model) 30.1 生成模型的定义 前面所详细描述的模型以浅层的机器学习为主.本章将承上启下引出后面深度机器学习的部分.本小节,主要 ...

  5. 机器学习-白板推导系列笔记(二十八)-BM

    此文章主要是结合哔站shuhuai008大佬的白板推导视频:玻尔兹曼机_147min 全部笔记的汇总贴:机器学习-白板推导系列笔记 参考花书20.1 一.介绍 玻尔兹曼机连接的每个节点都是离散的二值分 ...

  6. 机器学习-白板推导-系列(九)笔记:概率图模型: 贝叶斯网络/马尔可夫随机场/推断/道德图/因子图

    文章目录 0 笔记说明 1 背景介绍 1.1 概率公式 1.2 概率图简介 1.2.1 表示 1.2.2 推断 1.2.3 学习 1.2.4 决策 1.3 图 2 贝叶斯网络 2.1 条件独立性 2. ...

  7. 机器学习-白板推导系列笔记(十三)-MCMC

    此文章主要是结合哔站shuhuai008大佬的白板推导视频:MCMC_218min 全部笔记的汇总贴:机器学习-白板推导系列笔记 一.蒙特卡洛方法 蒙特卡洛方法(Monte Carlo Method) ...

  8. 机器学习-白板推导系列笔记(二十一)-RBM

    此文章主要是结合哔站shuhuai008大佬的白板推导视频:受限玻尔兹曼机_155min 全部笔记的汇总贴:机器学习-白板推导系列笔记 玻尔兹曼机介绍:白板推导系列笔记(二十八)-玻尔兹曼机 一.背景 ...

  9. 机器学习-白板推导系列笔记(十二)-变分推断(VI)

    此文章主要是结合哔站shuhuai008大佬的白板推导视频: VI变分推断_126min 全部笔记的汇总贴:机器学习-白板推导系列笔记 一.背景 对于概率模型 从频率派角度来看就会是一个优化问题 从贝 ...

  10. 机器学习-白板推导-系列(十)笔记:EM算法

    文章目录 0 笔记说明 1 算法收敛性证明 2 公式导出 2.1 ELBO+KL Divergence 2.2 ELBO+Jensen Inequlity 2.3 最后的工作 3 从狭义EM到广义EM ...

最新文章

  1. 元组tuple类型内置方法
  2. git用ssh方式下载和提交代码
  3. Magicodes.WeiChat——媒体资源选择组件之media-choice(开源)
  4. android apk 编译命令,android – 如何从命令行编译APK?
  5. linux内核--设备驱动程序(学习笔记)
  6. CA与数字证书的自结
  7. 使用 Kotlin Script 自定义实现项目开发脚手架
  8. Webappbuilder自定义widget模板
  9. 将文件放到Android模拟器的SD卡
  10. python怎么用split字符串全部分开_python实现字符串完美拆分split()的方法
  11. Html5下载功能实现
  12. wirelessn1000 驱动_Intel无线网卡驱动程序下载
  13. html5 css3 JavaScript响应式中文静态网页模板js源代码
  14. linux搭建mysql集群
  15. 在Linux系统下制作U盘启动盘
  16. 刚晋升为部门经理,我要如何领导下属影响上级?
  17. Python 基础 之 词云(词的频率统计大小成图)的简单实现(包括图片词云,词云颜色,词的过滤)
  18. 群晖DS918+硬盘选择和阵列选择
  19. C++11中,获取随机数的新方法default_random_engine
  20. 【重温C++ Primer】第一章、初识C++

热门文章

  1. 调用天气接口获取天气预报
  2. Spring MVC 中的REST支持
  3. 创建全局SystemTray.ProgressIndicator
  4. ASP.NET AJAX中防止用户多次提交页面
  5. (自动重命名论文)PaperDownloader (Chrome插件) + EndNote (附下载链接) + Zotero
  6. Linux操作系统中GDB工具常见用法(一)
  7. orangepi获取cpu温度
  8. 在SqlMapConfig.xml 中typeAliases与properties的关系
  9. 小巧玲珑的开源调度框架Azkaban3.0下载、编译、安装及使用详细文档
  10. (转载)RESTORE DATABASE命令还原SQLServer 2005 数据库