sklearn pca降维
PCA降维
一.原理
这篇文章总结的不错PCA的数学原理。
PCA主成分分析是将原始数据以线性形式映射到维度互不相关的子空间。主要就是寻找方差最大的不相关维度。数据的最大方差给出了数据的最重要信息。
二.优缺点
优:将高维数据映射到低维,降低数据的复杂性,识别最重要的多个特征
不足:不一定需要,且可能损失有用信息
适用数值型数据
三.步骤
1.原始数据X,对于每列属性,去平均值(也可以对数值进行标准分化)
2.计算样本点的协方差矩阵(列间两两计算相关性)
3.求出协方差矩阵的特征值和对应的特征向量
4.从大到小排序特征值,取得最前的k个特征向量P
5.将数据转换到k个特征向量构建的新空间中,Y=P^tX
四.python代码
#!/usr/bin/python
# -*- coding: utf-8 -*- import numpy as np
from sklearn.decomposition import PCA
from matplotlib import pyplot as plt class PCA_DimensionalityReduction: def __init__(self):
# 随机产生数据沿y=2x分布,
self.x = np.arange(1, 101, 1).astype(float)
self.y = 2 * np.arange(1, 101, 1).astype(float) def dataProduction(self):
#添加服从正太分布的噪音数据normal(均值,标准差,个数)
noise=np.random.normal(0,10,100)
self.y+=noise
#定义绘图
self.fig=plt.figure(figsize=(10,10))
#红色的小圆点在坐标平面上画一个点
plt.plot(self.x,self.y,'ro')
#坐标范围axis[xmin,xmax,ymin,ymax]
plt.axis([0,102,-20,220])
#箭头
plt.quiver(60, 100, 10 - 0, 20 - 0, scale_units='xy', scale=1)
plt.arrow(60, 100, 10 - 0, 20 - 0, head_width=2.5, head_length=2.5, fc='k', ec='k')
#图中的任意位置添加文字
plt.text(70,110,r'$v^1$',fontsize=20) #保存
# 添加子图,返回Axes实例,参数:子图总行数,子图总列数,子图位置
ax=self.fig.add_subplot(111)
ax.axis([0,102,-20,220])
ax.set_xlabel('x',fontsize=40)
ax.set_ylabel('y',fontsize=40)
self.fig.suptitle('2 dimensional',fontsize=40)
self.fig.savefig('pca_data.png') '''
PCA算法
总结一下PCA的算法步骤:
设有m条n维数据。
1)将原始数据按列组成n行m列矩阵X
2)将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值
3)求出协方差矩阵C=(1/m)X(X)^T
4)求出协方差矩阵的特征值及对应的特征向量
5)将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P
6)Y=PX
即为降维到k维后的数据
'''
#使用np.linalg.eig计算特征值和特征向量
def dr_pca(self):
#每列属性的均值
mean_x=np.mean(self.x)
mean_y=np.mean(self.y)
#这里对数据标准分化
mean_vector=np.array([[mean_x],[mean_y]])
self.u_x=(self.x-mean_x)/np.std(self.x)#除标准差
self.u_y=(self.y-mean_y)/np.std(self.y)
#协方差矩阵
sigma=np.cov([self.u_x,self.u_y])
#从协方差矩阵中求出特征值和特征向量,选择特征值最大的对应的特征向量
eig_vals,eig_vecs=np.linalg.eig(sigma)
eig_pairs=[(np.abs(eig_vals[i]),eig_vecs[:,i]) for i in range(len(eig_vals))]
eig_pairs.sort()
eig_pairs.reverse()
v1=eig_pairs[0][1]#取出一个最大特征值对应的特征向量
print('v1,shape:',(v1,v1.shape))
#映射到由k个特征向量组成的子空间特征向量(主成分)
X=np.array([self.u_x,self.u_y])
#X=X.T
print('X shape:',X.shape)
main_vector=v1.T.dot(X)
print('main_vector:',main_vector.T) #w=np.array(v1.reshape(2,1))
#main_vector=w.T.dot(X)
#print('w:',w.shape)
#print("main_vector2:",main_vector) #使用sklearn中的pca
def sklearn_pca(self):
X=np.array([self.u_x,self.u_y])
X=X.T
pca=PCA(n_components=1) #指定主成分数量 #pca.fig(X)#训练pca模型
#v1 = pca.components_[0] # 得到特征向量
#print('v1:', v1) main_vector=pca.fit_transform(X)#用X来训练PCA模型,同时返回降维后的结果数据。
print('sklearn:',main_vector) if __name__=='__main__':
pca=PCA_DimensionalityReduction()
pca.dataProduction()
pca.dr_pca()
pca.sklearn_pca()
参考:1.CRC.Machine.Learning.An.Algorithmic.Perspective.2nd.Edition.
2.machine learning for the web
3.machine learning in action
sklearn pca降维的更多相关文章
- Python机器学习笔记 使用scikit-learn工具进行PCA降维
之前总结过关于PCA的知识:深入学习主成分分析(PCA)算法原理.这里打算再写一篇笔记,总结一下如何使用scikit-learn工具来进行PCA降维. 在数据处理中,经常会遇到特征维度比样本数量多得多 ...
- 一步步教你轻松学主成分分析PCA降维算法
一步步教你轻松学主成分分析PCA降维算法 (白宁超 2018年10月22日10:14:18) 摘要:主成分分析(英语:Principal components analysis,PCA)是一种分析.简 ...
- 用PCA降维 (Principal Component Analysis,主成分分析)
参考资料:Mastering Machine Learning With scikit-learn 降维致力于解决三类问题.第一,降维可以缓解维度灾难问题.第二,降维可以在压缩数据的同时让信息损失最 ...
- PCA降维的原理、方法、以及python实现。
PCA(主成分分析法) 1. PCA(最大化方差定义或者最小化投影误差定义)是一种无监督算法,也就是我们不需要标签也能对数据做降维,这就使得其应用范围更加广泛了.那么PCA的核心思想是什么呢? 例如D ...
- 吴裕雄 python 机器学习——主成份分析PCA降维
# -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt from sklearn import datas ...
- opencv基于PCA降维算法的人脸识别
opencv基于PCA降维算法的人脸识别(att_faces) 一.数据提取与处理 # 导入所需模块 import matplotlib.pyplot as plt import numpy as n ...
- [机器学习 ]PCA降维--两种实现 : SVD或EVD. 强力总结. 在鸢尾花数据集(iris)实做
PCA降维--两种实现 : SVD或EVD. 强力总结. 在鸢尾花数据集(iris)实做 今天自己实现PCA,从网上看文章的时候,发现有的文章没有搞清楚把SVD(奇异值分解)实现和EVD(特征值分解) ...
- python机器学习使用PCA降维识别手写数字
PCA降维识别手写数字 关注公众号"轻松学编程"了解更多. PCA 用于数据降维,减少运算时间,避免过拟合. PCA(n_components=150,whiten=True) n ...
- PCA降维的原理及实现
PCA可以将数据从原来的向量空间映射到新的空间中.由于每次选择的都是方差最大的方向,所以往往经过前几个维度的划分后,之后的数据排列都非常紧密了, 我们可以舍弃这些维度从而实现降维 原理 内积 两个向量 ...
随机推荐
- 并发编程 深入分析Volatile的实现原理
在多线程并发编程中synchronized和Volatile都扮演着重要的角色,Volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”.可见性的意思是当一个线 ...
- JAVA基础:接口
接口声明: interface 接口名 实现接口: class 类名 implements 接口名 接口特点: 1. 接口中的成员变量默认都是public.static.final类型的,必须被显式初 ...
- tensorflow 使用tfrecords创建自己数据集
直接采用矩阵方式建立数据集见:https://www.cnblogs.com/WSX1994/p/10128338.html 制作自己的数据集(使用tfrecords) 为什么采用这个格式? TFRe ...
- Mac OS 下定制终端颜色
方法 有五种方法, 参考网站,我使用的是 Oh My Zsh 方案一:(通过 .bash_profile 文件自定制) 方案二:(也是修改 ~/.bash_profile) 方案三:(三方插件 Oh ...
- ARC 100 C - Linear Approximation题解---三分法
题目链接: https://arc100.contest.atcoder.jp/tasks/arc100_a 分析: 比赛时做这题想到一个瞎搞的方法就是在平均数上下波动一下取最小值,然后大佬yjw学长 ...
- Kong/Konga - Docker容器化安装
1.0 安装kong + postgresDB docker network create kong-net docker pull postgres:latest docker run -d --n ...
- ubuntu18.04系统安装及php7.2,apache2,mysql8,git,svn,composer,vs code 到安装 php 扩展配置php.ini 实现 laravel5.8 运行
简介:记录自己从系统安装到环境配置完毕运行laravel的记录 • 下载ubuntu18.04桌面版 ○ ubuntu18.04中国官网 https://cn.ubuntu.com ...
- CentOS7部署kettle
去官网下载kettle, 或者百度网盘下载(nnnk),解压到目录/opt/service/, 解压后的目录是data-integration kettle需要java环境才能运行,因此要安装Java ...
- css折叠表格
1.html <div class="custom-fold-table"> <table cellpadding="0" cellspaci ...
- render:h => h(App) ----render函数
转载其他博客1 new Vue({ 2 3 router, 4 store, 5 //components: { App } vue1.0的写法 6 render: h => h(App) vu ...