【机器学习】之 主成分分析PCA
利用 wine.data葡萄酒数据集进行PCA分析
wine.data数据集共14列数据,第一列是类标签'class label',分别是1/2/3,代表葡萄酒的三个分类。剩余的13列分别是酒精、苹果酸、灰、灰分的碱度、镁、总酚、黄酮类化合物、非黄烷类酚类、原花色素、颜色强度、色调等。即'alcohol','malic acid','ash','alcalinity of ash','magnesium','totalphenols','flavanoids','nonflavanoid','proanthocynins', 'color intensity','wue','diluted','proline'
有两种方法:1.根据PCA算法写步骤
2.调用sklearn 里的API
初学者建议先按第一种实现,走一遍算法流程,加深PCA算法理解。
第一种实现:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split#自己实现PCA
df_wine = pd.read_csv('wine.data',header=None)
df_wine.columns = ['class label', 'alcohol', 'malic acid', 'ash', 'alcalinity of ash','magnesium', 'total phenols', 'flavanoids', 'nonflavanoid', 'proanthocynins','color intensity', 'wue', 'diluted', 'proline']
# print(df_wine.shape)
# print(df_wine['class label'].value_counts())
# print(df_wine.head())#数据集设置:x为样本特征数据,y为目标数据,即标注结果
x, y = df_wine.iloc[:, 1:].values, df_wine.iloc[:, 0].values#iloc index location 对数据进行位置索引
#数据集划分:将数据划分为训练集和测试集(70%,30%)
X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.3, stratify=y, random_state=0)#实例化
sc = StandardScaler() #对数据进行归一化和标准化
#对数据进行标准化X_train_std = sc.fit_transform(X_train) #找出均值和标准值并应用
X_test_std = sc.transform(X_test) #训练数据用了fit_transform,测试数据就得用transform,否则就不是在一个标准下#计算协方差矩阵 shape得到了数组的形状,size统计了数组总共的大小
cov_mat = np.cov(X_train_std.T)
#对协方差矩阵进行特征值分解
eigen_vals, eigen_vecs = np.linalg.eig(cov_mat)#linalg包含线性代数常用方法 Linear Algebra线性代数
#numpy.linalg模块包含线性代数的函数。使用这个模块,可以计算逆矩阵、求特征值、解线性方程组以及求解行列式等。#特征值之和
tot = sum(eigen_vals)
#对特征值进行排序,并计算所占的比例
var_exp = [(i/tot) for i in sorted(eigen_vals,reverse=True)]
#累计求和
cum_var_exp = np.cumsum(var_exp)#cumcum累加; 累加和;#绘制图像 注释的代码选中然后利用“Ctrl+/”进行注释
plt.figure()
plt.bar(range(1, 14), var_exp, alpha=0.5, align='center', label='特征值分布') #bar绘制柱状图
plt.step(range(1, 14), cum_var_exp, where='mid', label="累计特征值")
plt.ylabel('特征值比例')
plt.xlabel('特征index')
plt.legend(loc='best') #创建图例#特征降维
#创建列表,由(eigenvalue,elgenvector)元组组成eigen_pairs = [(np.abs(eigen_vals[i]), eigen_vecs[:, i])for i in range(len(eigen_vals))]
#按特征值从大到小对列表(eigenvalue,eigenvector)排序
eigen_pairs.sort(key=lambda k: k[0], reverse=True)
#特征值与特征向量
# 特征值与特征向量print(eigen_pairs)
#取前两个特征值对应的特征向量作为主要成分
w = np.hstack((eigen_pairs[0][1][:, np.newaxis],# 用于将两个数组成矩阵合并,水平方向合并,合并后行数不变eigen_pairs[1][1][:, np.newaxis]))print(w)# #原始特征,以第一个为例
# print(X_train_std[0])
# #特征压缩后结果
# print(X_train_std[0].dot(w))
#全部特征压缩
X_train_pca = X_train_std.dot(w)#特征压缩后结果展示
colors = ('r', 'g', 'b')
markers = ('s', 'x', 'o')plt.figure()
# l=np.unique(y_train)=1/2/3
for l, c, m in zip(np.unique(y_train), colors, markers):#按照样本真实值进行展示 scatter散点图#X_train_pca[y_train == l, 0]是一个推导式,返回 X_train 中第0列满足 y_train ==l 条件的记录print('--------------------')print(X_train_pca[y_train == l, 0])plt.scatter(X_train_pca[y_train == l, 0], #X_train_pca 里只剩两列特征,下标为0和1X_train_pca[y_train == l, 1],c=c, label=l, marker=m)
plt.xlabel('pc1')
plt.ylabel('pc2')
plt.legend(loc='lower left')
plt.tight_layout()
plt.show()
第二种算法
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCAdf_wine = pd.read_csv('wine.data',header=None)
df_wine.columns = ['class label', 'alcohol', 'malic acid', 'ash', 'alcalinity of ash','magnesium', 'total phenols', 'flavanoids', 'nonflavanoid', 'proanthocynins','color intensity', 'wue', 'diluted', 'proline']x, y = df_wine.iloc[:, 1:].values, df_wine.iloc[:, 0].values #iloc index location 对数据进行位置索引
X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.3, stratify=y, random_state=0)sc = StandardScaler() #对数据进行归一化和标准化
X_train_std = sc.fit_transform(X_train) #找出均值和标准值并应用
X_test_std = sc.transform(X_test) #训练数据用了fit_transform,测试数据就得用transform,否则就不是在一个标准下pca = PCA()
X_train_pca = pca.fit_transform(X_train_std)
X_test_pca = pca.transform(X_test_std)#explained_variance_ratio_计算了每个特征方差贡献率,所有总和为1,
# explained_variance_为方差值,通过合理使用这两个参数可以画出方差贡献率图或者方差值图,便于观察PCA降维最佳值。
print(pca.explained_variance_ratio_)plt.figure()
plt.bar(range(1, 14), pca.explained_variance_ratio_, alpha=0.5, align='center',label='特征值分布')
plt.step(range(1, 14), np.cumsum(pca.explained_variance_ratio_), where='mid',label='累计特征值')
plt.ylabel('特征值比例')
plt.xlabel('特征index')
plt.legend(loc='best')pca = PCA(n_components=2) #压缩到二维特征colors = ['r', 'g', 'b']
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('PC 1')
plt.ylabel('PC 2')
plt.legend(loc='lower left')
plt.tight_layout()
plt.show()
wine.data数据集 官网下载UCI Machine Learning Repository: Wine Quality Data Set
我在百度网盘也放了一份 ,有需要自取
链接:https://pan.baidu.com/s/1bBlesqk9fxpSKVKfy7bNiw
提取码:89ts
【机器学习】之 主成分分析PCA相关推荐
- [转载] 机器学习之主成分分析PCA(Python实现)
参考链接: 使用Python进行主成分分析PCA 理解PCA:what? why? how? 当我们拿到一个数据集的时候,往往数据集中每一个样本的描述是多维的,多维的特征空间不便于我们或者计算机对其进 ...
- 机器学习-降维之主成分分析PCA算法原理及实战
主成分分析 前言 近年来,随着互联网和信息行业的发展,数据已经渗透到各行各业,成为重要的生产因素如数据记录和属性规模的急剧增长.社会已经进入大数据时代,数据越多越好似乎已经成为公理.然而,数据量并不是 ...
- 西瓜书+实战+吴恩达机器学习(十八)降维(主成分分析 PCA)
文章目录 0. 前言 1. 主成分分析PCA 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔,我会非常开心的~ 0. 前言 维数灾难:在高维情形下出现的数据样本稀疏.距离计算困难等问题. 缓解 ...
- 【机器学习sklearn】主成分分析PCA(Principal Component Analysis)
主成分分析方法PCA 前言 一.PCA是什么? 二.代码实践 使用MNIST数据集实现sklearn库里的主成分分析方法 不同主成分个数对应的可解释方差分析(Explained Variance) 总 ...
- 机器学习--主成分分析PCA算法:为什么去均值以后的高维矩阵乘以其协方差矩阵的特征向量矩阵就是“投影”?
原文链接:主成分分析PCA算法:为什么去均值以后的高维矩阵乘以其协方差矩阵的特征向量矩阵就是"投影"?_天下对手教会少林武僧-CSDN博客_pca投影矩阵 这是从网上看到的PCA算 ...
- 机器学习系列笔记六:主成分分析PCA[下]
机器学习系列笔记六:主成分分析PCA[下] 文章目录 机器学习系列笔记六:主成分分析PCA[下] scikit-learn中的PCA 基本使用 进阶操作 对比实验 设置合理的n_components ...
- 机器学习-Sklearn(第三版)Day4 主成分分析PCA与奇异值分解SVD
目录 一.简介 什么是维度 sklearn中的降维算法 二.PCA与SVD 0.如何实现降维算法 思考:PCA和特征选择技术都是特征工程的一部分,它们有什么不同? 1.重要参数n_components ...
- lda 吗 样本中心化 需要_机器学习 —— 基础整理(四):特征提取之线性方法——主成分分析PCA、独立成分分析ICA、线性判别分析LDA...
本文简单整理了以下内容: (一)维数灾难 (二)特征提取--线性方法 1. 主成分分析PCA 2. 独立成分分析ICA 3. 线性判别分析LDA (一)维数灾难(Curse of dimensiona ...
- 机器学习笔记之——降维(二)主成分分析(PCA)
目录 主成分分析(PCA) 1. 坐标投影 2. 最近重构性 3. 最大可分性 4. 求解 主成分分析(PCA) 1. 坐标投影 主成分分析(PCA, Principal Component Anal ...
- [转载]简单易学的机器学习算法-主成分分析(PCA)
一.数据降维 对于现在维数比较多的数据,我们首先需要做的就是对其进行降维操作.降维,简单来说就是说在尽量保证数据本质的前提下将数据中的维数降低.降维的操作可以理解为一种映射关系,例如函数 ,即由原来的 ...
最新文章
- 【高并发】在高并发环境下该如何构建应用级缓存?
- python常用命令大全-Python常用命令之集合
- 英语 interactive tutorial unary
- 1365. 有多少小于当前数字的数字(哈希表)
- 【直播预告】计算机视觉中数据增强原理和实践
- 【Makefile由浅入深完全学习记录2】初识 makefile 的结构
- 截取AVI格式的视频C语言代码
- 【LeetCode笔记】剑指 Offer 62. 圆圈中最后剩下的数字(Java、约瑟夫环、链表)
- 软件测试的学习之路-----计算机基础 (详情展示)
- python 抽奖器_兄弟连学python (02) ----简易抽奖器
- SQL Server高级查询之常见数据库对象(数据库事务)第五章节
- switch分解试验部分-LAB8:SVI实验
- UI_DEV_Environment 之 StoryBook
- 土方回填施工方案范本_土方回填施工方案范本
- 最小采样频率计算公式_SPC子组样本量大小和抽样频率
- Python语言程序设计基础_期末作品设计——收银软件(2020-2 B)_答案_通识教育必修课程_上海师范大学
- 【莫安迪原创摄影作品】深圳最美夕阳-烟云成画
- 一位二本毕业4年的java程序员
- winrar40天试用完了
- U盘数据恢复软件使用教程