主成分分析PCA(Principal Component Analysis)













PCA-简单例子

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 - meanValreturn newData, meanVal
newData,meanVal=zeroMean(data)
# np.cov用于求协方差矩阵,参数rowvar=0说明数据一行代表一个样本
covMat = np.cov(newData, rowvar=0)
# 协方差矩阵
covMat

# np.linalg.eig求矩阵的特征值和特征向量
eigVals, eigVects = np.linalg.eig(np.mat(covMat))
# 特征值
eigVals

# 特征向量
eigVects

# 对特征值从小到大排序
eigValIndice = np.argsort(eigVals)
eigValIndice

top = 1
# 最大的top个特征值的下标
n_eigValIndice = eigValIndice[-1:-(top+1):-1]
n_eigValIndice

# 最大的n个特征值对应的特征向量
n_eigVect = eigVects[:,n_eigValIndice]
n_eigVect

# 低维特征空间的数据
lowDDataMat = newData*n_eigVect
lowDDataMat

# 利用低纬度数据来重构数据
reconMat = (lowDDataMat*n_eigVect.T) + meanVal
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()

手写数字识别降维可视化

from sklearn.neural_network import MLPClassifier
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report,confusion_matrix
import numpy as np
import matplotlib.pyplot as plt
digits = load_digits()#载入数据
x_data = digits.data #数据
y_data = digits.target #标签x_train,x_test,y_train,y_test = train_test_split(x_data,y_data) #分割数据1/4为测试数据,3/4为训练数据
x_data.shape

mlp = MLPClassifier(hidden_layer_sizes=(100,50) ,max_iter=500)
mlp.fit(x_train,y_train)

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

predictions = mlp.predict(x_data)
# 重构的数据
x = np.array(lowDDataMat)[:,0]
y = np.array(lowDDataMat)[:,1]
plt.scatter(x,y,c=y_data)
plt.show()

lowDDataMat,reconMat = pca(x_data,3)
from mpl_toolkits.mplot3d import Axes3D
x = np.array(lowDDataMat)[:,0]
y = np.array(lowDDataMat)[:,1]
z = np.array(lowDDataMat)[:,2]
ax = plt.figure().add_subplot(111, projection = '3d')
ax.scatter(x, y, z, c = y_data, s = 10) #点为红色三角形 plt.show()

sklearn-手写数字降维预测

from sklearn.neural_network import MLPClassifier
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report,confusion_matrix
from sklearn import decomposition
import matplotlib.pyplot as plt
digits = load_digits()#载入数据
x_data = digits.data #数据
y_data = digits.target #标签x_train,x_test,y_train,y_test = train_test_split(x_data,y_data) #分割数据1/4为测试数据,3/4为训练数据
mlp = MLPClassifier(hidden_layer_sizes=(100,50) ,max_iter=500)
mlp.fit(x_train,y_train )

predictions = mlp.predict(x_test)
print(classification_report(predictions, y_test))
print(confusion_matrix(predictions, y_test))

pca = decomposition.PCA()
pca.fit(x_data)

# 方差
pca.explained_variance_

# 方差占比
pca.explained_variance_ratio_

variance = []
for i in range(len(pca.explained_variance_ratio_)):variance.append(sum(pca.explained_variance_ratio_[:i+1]))
plt.plot(range(1,len(pca.explained_variance_ratio_)+1), variance)
plt.show()

pca = decomposition.PCA(whiten=True,n_components=0.8)
pca.fit(x_data)

pca.explained_variance_ratio_

x_train_pca = pca.transform(x_train)
mlp = MLPClassifier(hidden_layer_sizes=(100,50) ,max_iter=500)
mlp.fit(x_train_pca,y_train )

x_test_pca = pca.transform(x_test)
predictions = mlp.predict(x_test_pca)
print(classification_report(predictions, y_test))
print(confusion_matrix(predictions, y_test))

机器学习基础-主成分分析PCA-16相关推荐

  1. [转载] 机器学习之主成分分析PCA(Python实现)

    参考链接: 使用Python进行主成分分析PCA 理解PCA:what? why? how? 当我们拿到一个数据集的时候,往往数据集中每一个样本的描述是多维的,多维的特征空间不便于我们或者计算机对其进 ...

  2. lda 吗 样本中心化 需要_机器学习 —— 基础整理(四):特征提取之线性方法——主成分分析PCA、独立成分分析ICA、线性判别分析LDA...

    本文简单整理了以下内容: (一)维数灾难 (二)特征提取--线性方法 1. 主成分分析PCA 2. 独立成分分析ICA 3. 线性判别分析LDA (一)维数灾难(Curse of dimensiona ...

  3. 机器学习--主成分分析PCA算法:为什么去均值以后的高维矩阵乘以其协方差矩阵的特征向量矩阵就是“投影”?

    原文链接:主成分分析PCA算法:为什么去均值以后的高维矩阵乘以其协方差矩阵的特征向量矩阵就是"投影"?_天下对手教会少林武僧-CSDN博客_pca投影矩阵 这是从网上看到的PCA算 ...

  4. 【机器学习sklearn】主成分分析PCA(Principal Component Analysis)

    主成分分析方法PCA 前言 一.PCA是什么? 二.代码实践 使用MNIST数据集实现sklearn库里的主成分分析方法 不同主成分个数对应的可解释方差分析(Explained Variance) 总 ...

  5. 主成分分析(PCA)及其可视化的基础指南

    主成分分析(PCA)及其可视化的基础指南 后台很多同学私信想学习一下主成分分析(PCA),今天就简单写一下.之后有看到文章再实战复现. 主成分分析(PCA)是一种将数据降维技巧,它将大量相关变量转化成 ...

  6. 机器学习系列笔记六:主成分分析PCA[下]

    机器学习系列笔记六:主成分分析PCA[下] 文章目录 机器学习系列笔记六:主成分分析PCA[下] scikit-learn中的PCA 基本使用 进阶操作 对比实验 设置合理的n_components ...

  7. 机器学习-Sklearn(第三版)Day4 主成分分析PCA与奇异值分解SVD

    目录 一.简介 什么是维度 sklearn中的降维算法 二.PCA与SVD 0.如何实现降维算法 思考:PCA和特征选择技术都是特征工程的一部分,它们有什么不同? 1.重要参数n_components ...

  8. 机器学习基础篇(十一)——主成分分析法

    机器学习基础篇(十一)--主成分分析法 一.简介 当我们对含有多个变量的数据进行观测时,我们会收集大量的数据然后分析他们.大样本的数据集固然提供了丰富的信息,但是在一定程度上增加了问题的复杂性. 如果 ...

  9. 机器学习-降维之主成分分析PCA算法原理及实战

    主成分分析 前言 近年来,随着互联网和信息行业的发展,数据已经渗透到各行各业,成为重要的生产因素如数据记录和属性规模的急剧增长.社会已经进入大数据时代,数据越多越好似乎已经成为公理.然而,数据量并不是 ...

最新文章

  1. 用 C 语言开发一门编程语言 — 交互式解释器
  2. 寿光农商行计算机机房,寿光农商银行 举办2021年新员工入职仪式
  3. Docker部署配置相关使用总结
  4. 20135202闫佳歆-第二章家庭作业-2.69
  5. mediastream2使用指南(转载)
  6. 非网管交换机和网管交换机的区别
  7. 不要打我,不要打我,不要打我啊啊
  8. java setenabled不好用,哪个更好,setEnabled或setUserInteractionEnabled?
  9. axure html尺寸,Axure 原型 | 教你使用自适应视图构建界面
  10. MATLAB的cat()函数
  11. 系泊系统悬链线matlab,孙传耀, 汤鸣晓. 基于MATLAB的系泊系统的设计及其动力分析[J]. 电子技术与软件工程, 2017(6): 62-63....
  12. 计算机网络工程专业大学排名,2021网络工程专业大学排名 最好大学排行榜
  13. 充电器pps功能是什么_科普:PPS充电器是什么?为何不兼容笔电?
  14. CentOS开机简要流程
  15. 洛谷P2342 叠积木
  16. 什么是B2B,B2C,O2O?
  17. 合肥php怎么这么多的,合肥为什么那么多“郢”?答案就在这!
  18. MySQL阶段二_模块6
  19. 学生信息管理系统之 查询学籍信息流程
  20. 开源资产管理系统_OCR在资产管理系统的应用

热门文章

  1. php中get_featured_posts()是什么意思,php – 在WP_Query中获取WooCommerce特色产品
  2. dxf转nc代码软件_FastCAM激光版套料软件
  3. snoopy(强大的PHP采集类) 详细介绍
  4. java 存储过程 数组_Java调用存储过程返回数组
  5. javascript 中文帮助文档_实战式方法学习JavaScript(1)
  6. android aar项目_介绍如何调试Xamarin.Android的binding项目
  7. python array按行归一化_机器学习 第40集:特征不归一化有什么危害?特征归一化公式是什么?( 含有笔记、代码、注释 )...
  8. html css图标怎么跟文字并排,CSS高级技巧:精灵图、字体图标、CSS三角做法、CSS用户界面样式、vertical-align属性应用、溢出文字省略号、常见布局技巧...
  9. Ubuntu登录后黑屏,或者桌面图标消失不见
  10. hibernate createsqlquery delete多个表_go语言教程哪里有?xorm表基本操作及高级操作...