文章目录

  • 前言
  • 一、什么是PCA?
  • 二、PCA算法流程
  • 二、使用步骤
    • 1.引入库
    • 2.读入数据
    • 3.数据标准化(规范化)
    • 4.主成分分析PCA
    • 5.PCA可视化
  • 总结(拓展)

前言

学习数据挖掘,用于记录练习和回顾


一、什么是PCA?

经典主成分分析(Classical Principal Component Analysis)的核心思想:PCA的思想是将n维特征映射到k维上(k<n),这k维是全新的正交特征。这k维特征称为主成分,是重新构造出来的k维特征,而不是简单地从n维特征中去除其余n-k维特征。


二、PCA算法流程

1.按列计算数据集X的均值Xmean,然后令Xnew=X−Xmean
2. 求解矩阵Xnew的协方差矩阵,并将其记为Cov
3.计算协方差矩阵Cov的特征值和相应的特征向量
4.将特征值按照从大到小的排序,选择其中最大的k个,然后将其对应的k个特征向量分别作为列向量组成特征向量矩阵Wnxk
5. 计算XnewW,即将数据集Xnew投影到选取的特征向量上,这样就得到了我们需要的已经降维的数据集XnewW


二、使用步骤

1.引入库

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
import numpy as np
import matplotlib.pyplot as plt

2.读入数据

代码如下(示例):


df_wine = pd.read_csv('./UCI/wine/wine.data', header=None) # 加载葡萄酒数据集
X, y = df_wine.iloc[:, 1:].values, df_wine.iloc[:, 0].values # 把分类属性与常规属性分开
X_train, X_test, y_train, y_test = train_test_split(X, y,test_size=0.3, random_state=0) # 把整个数据集的70%分为训练集,30%为测试集

3.数据标准化(规范化)

如果数据特征在不同的范围上,要先对数据集标准化。下面3行代码把数据集标准化为均值0方差1,避免异常值对结果造成影响


sc = StandardScaler()
X_train_std = sc.fit_transform(X_train)
X_test_std = sc.fit_transform(X_test)

4.主成分分析PCA


#计算协方差矩阵
cov_mat = np.cov(X_train_std.T)#求协方差矩阵的特征值和特征向量
eigen_vals, eigen_vecs = np.linalg.eig(cov_mat)
# 下面的输出为eigen_vals
"""求出的特征值的意义就是特征向量的大小,因此只要找出最大特征值所对应的特征向量就可以知道哪个方向保留的方差最大。"""
# array([ 4.8923083 ,  2.46635032,  1.42809973,  1.01233462,  0.84906459,
#         0.60181514,  0.52251546,  0.08414846,  0.33051429,  0.29595018,
#         0.16831254,  0.21432212,  0.2399553 ])"""
下面的代码都是绘图的,涉及的参数建议去查看官方文档
计算统计主成分分析
"""tot = sum(eigen_vals) # 求出特征值的和
"""即每个主成分捕捉多少方差,描述样本的贡献值"""
var_exp = [(i / tot) for i in sorted(eigen_vals, reverse=True)] # 求出每个特征值占的比例(降序)plt.bar(range(len(eigen_vals)), var_exp, width=1.0, bottom=0.0, alpha=1, label='individual explained variance')
plt.ylabel('Explained variance ratio')
plt.xlabel('Principal components')
plt.legend(loc='best')
plt.show()

第一个主成分将近0.4,第二个主成分将近0.2,也就是说明前两个主成分可以捕捉该数据集60%的方差;第三个主成分0.1,前三个主成分可以捕捉70%

5.PCA可视化

选取前两个主成分和前三个主成分分别做二维和三维分布图


eigen_pairs =[(np.abs(eigen_vals[i]),eigen_vecs[:,i]) for i in range(len(eigen_vals))] # 把特征值和对应的特征向量组成对
eigen_pairs.sort(reverse=True) # 用特征值排序"""选出前2对来构建映射矩阵,但是在实际应用中,应该权衡计算效率和分类器之间的性能来选择恰当的主成分数量"""
first = eigen_pairs[0][1]
second = eigen_pairs[1][1]
third = eigen_pairs[2][1]
first = first[:,np.newaxis]
second = second[:,np.newaxis]
third = third[:,np.newaxis]w = np.hstack((first,second,third))plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
X_train_pca = X_train_std.dot(w) # 转换训练集
colors = ['r', 'b', 'g']
markers = ['s', 'x', 'o']
for l, c, m in zip(np.unique(y_train), colors, markers):plt.scatter(X_train_pca[y_train==l, 0], X_train_pca[y_train==l, 1], c=c, label=l, marker=m) # 散点图
plt.xlabel('PCA 1')
plt.ylabel('PCA 2')
plt.legend(loc='upper right')
# plt.show()"""3d展示主成分"""
fig =plt.figure()
ax = fig.add_subplot(111,projection='3d')
for l, c, m in zip(np.unique(y_train), colors, markers):ax.scatter(X_train_pca[y_train==l, 0], X_train_pca[y_train==l, 1],X_train_pca[y_train==l, 2], c=c, label=l, marker=m)
plt.show()


总结(拓展)


参考文章 :Blessy_Zhu https://blog.csdn.net/weixin_42555080

第一章 UCI数据集wine.data主成分分析PCA相关推荐

  1. NDN-lite 命名数据网络 -----第一章:关于Interest和Data

    声明:   博主这里参考的是NDN-lite 格式规范的0.3版本,不同版本中的数据包和兴趣包中所包含的参数会有细微的差异. 关于NDN网络   命名数据网络(Named-Data Networkin ...

  2. Datacamp 笔记代码 Machine Learning with the Experts: School Budgets 第一章 Exploring the raw data

    更多原始数据文档和JupyterNotebook Github: https://github.com/JinnyR/Datacamp_DataScienceTrack_Python Datacamp ...

  3. 数据挖掘:MATLAB决策树(采用UCI数据集的wine数据),并绘图,图在最后

    暑期没有事情干,寻思学学数据挖掘,本篇博客也是我初学MATLAB情况下写的(代码可直接放在一个文件里). 一方面我想加深自己的理解,另一方面希望可以给使用MATLAB并学习决策树而感到无法下手的读者一 ...

  4. Python数据集可视化:抽取数据集的两个特征进行二维可视化、主成分分析PCA对数据集降维进行三维可视化(更好地理解维度之间的相互作用)

    Python数据集可视化:抽取数据集的两个特征进行二维可视化.主成分分析PCA对数据集降维进行三维可视化(更好地理解维度之间的相互作用) 目录 Python数据集可视化:抽取数据集的两个特征进行二维可 ...

  5. 【sklearn-cookbook-zh】第一章 模型预处理

    第一章 模型预处理 作者:Trent Hauck 译者:muxuezi 协议:CC BY-NC-SA 4.0 本章包括以下主题: 目录 第一章 模型预处理 简介 1.1 从外部源获取样本数据 Gett ...

  6. python计算机视觉编程——第一章(基本的图像操作和处理)

    第1章 基本的图像操作和处理 1.1 PIL:Python图像处理类库 1.1.1 转换图像格式--save()函数 1.1.2 创建缩略图 1.1.3 复制并粘贴图像区域 1.1.4 调整尺寸和旋转 ...

  7. Python 主成分分析PCA

    Python 主成分分析PCA 主成分分析(PCA)是一种基于变量协方差矩阵对数据进行压缩降维.去噪的有效方法,PCA的思想是将n维特征映射到k维上(k<n),这k维特征称为主元,是旧特征的线性 ...

  8. Programming Computer Vision with Python【学习笔记】【第一章】

    第1章 基本的图像操作和处理 1.1 PIL:Python图像处理类库 1.1.1 转换图像格式--save()函数 1.1.2 创建缩略图 1.1.3 复制并粘贴图像区域 1.1.4 调整尺寸和旋转 ...

  9. 【机器学习】之 主成分分析PCA

    利用 wine.data葡萄酒数据集进行PCA分析 wine.data数据集共14列数据,第一列是类标签'class label',分别是1/2/3,代表葡萄酒的三个分类.剩余的13列分别是酒精.苹果 ...

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

    这是从网上看到的PCA算法的步骤: 第一步,分别求每列的平均值,然后对于所有的样例,都减去对应的均值. 第二步,求特征协方差矩阵. 第三步,求协方差的特征值-显示全部 关注者 1,218 被浏览 78 ...

最新文章

  1. early z optimization
  2. python date time
  3. window server 2012 IE10 增强的安全设置 如何关闭
  4. [Array]217.Contains Duplicate
  5. Java学习笔记之:Java String类
  6. android node
  7. Dirichlet Multinomial Mixture Model做短文本聚类
  8. 网络协议:TCP连接管理
  9. 【Elasticsearch】es 插入数据 性能优化 以及 影响插入的因素
  10. 基于windows server 2008 web服务器的性能,Windows Server 2008之应用程序服务器解析
  11. 用DOS的FOR命令高速ping指定的所有局域网机器
  12. 复制百度文库内容方法
  13. 刷脸支付打造了一个无卡交易的时代
  14. OFDM子载波频率 知乎_SDR (软件无线电)
  15. 黑色脸谱_上演三幕的脸谱剧
  16. linux生成4g文件,linux中创建超过4g文件的方法-o_largefile?
  17. 家政服务:保姆朋友圈鄙视链在上海
  18. Android7.0 分屏多窗口
  19. 情情の日安的个人介绍
  20. 练习题记录:求解距离矩阵,首先生成一百个二维坐标点,计算任意两个坐标点的距离

热门文章

  1. 结构变量输入不正确的顺序可能会导致不正确的操作结果
  2. Servlet3异步原理
  3. 通过yum安装Oracle instant client
  4. LED用DMX512协议整个系统怎么连接?
  5. PHP100的php教程批量打包下载
  6. CAM350 12.1免费下载
  7. InstallShield 教程
  8. 概率论于数理统计(陈希孺)笔记2.3
  9. C语言程序与程序设计语言
  10. 58同城溢价私有化,互联网“前浪”躲不过“七年之痒”?