跟我学算法-pca(降维)
pca是一种黑箱子式的降维方式,通过映射,希望投影后的数据尽可能的分散, 因此要保证映射后的方差尽可能大,下一个映射的方向与当前映射方向正交
pca的步骤:
第一步: 首先要对当前数据(去均值)求协方差矩阵,协方差矩阵= 数据*数据的转置/(m-1) m表示的列数,对角线上表示的是方差,其他位置表示的是协方差
第二步:需要通过矩阵对角化,使得协方差为0,只存在对角线方向的数据,这个时候就能得到我们的特征值和特征向量
第三步: 将当前数据*特征向量就完成了降维工作,特征值/特征值之和, 可以表示特征值对应特征向量的表达重要性
下面是程序的说明
第一步:数据导入, 去均值, 求协方差
import pandas as pd import numpy as np import matplotlib.pyplot as pltdf = pd.read_csv('iris.data') print(df.head())df.columns=['sepal_len', 'sepal_wid', 'petal_len', 'petal_wid', 'class'] print(df.head())# 用来储存变量 X = df.ix[:, 0:4].values #用来储存标签 y = df.ix[:, 4].values msg ={'Iris-setosa':0, 'Iris-versicolor':1, 'Iris-virginica':2} df['class'] = df['class'].map(msg) #把字母换成数字#进行标准化 from sklearn.preprocessing import StandardScaler Scaler = StandardScaler() X_Scaler = Scaler.fit_transform(X)# 求每一行的均值 mean_vec = np.mean(X_Scaler, axis=0) #去均值后求协方差矩阵 cov_mat = (X_Scaler-mean_vec).T.dot(X_Scaler-mean_vec)/(X_Scaler.shape[0]-1) print(cov_mat) #使用np求协方差矩阵,结果是一样的 cov_mat = np.cov(X_Scaler.T) print(cov_mat)
第二步:求矩阵对角化的过程,就是一个求特征值和特征向量的过程
# 求特征值和特征向量 eig_vals, eig_vecs = np.linalg.eig(cov_mat) print(eig_vals, eig_vecs)#将特征值与特征向量合并 eig_pairs = [(np.abs(eig_vals[i]), eig_vecs[:, i]) for i in range(len(eig_vals))] #组合对应 eig_pairs.sort(key=lambda x:x[0], reverse=True)tot = sum(eig_vals)var_exp = [(i/tot)*100 for i in sorted(eig_vals, reverse=True)] #cumsum表示每前两个数相加 cum_var_exp = np.cumsum(var_exp) #画图 plt.figure(figsize=(6, 4)) #画柱状图 plt.bar(range(4), var_exp, alpha=0.5, align='center',label='individual explained variance') #画步阶图 plt.step(range(4), cum_var_exp, where='mid',label='cumulative explained variance') plt.ylabel('Explained variance ratio') plt.xlabel('Principal components') plt.legend(loc='best') plt.tight_layout()
第三步:将数据(去均值)
#把4维矩阵降低到两维,取前两个特征向量组合转置点乘即可#np.hstack合并两个向量,reshape让一行变成一列,相当于转置 matrix_w = np.hstack((eig_pairs[0][1].reshape(4,1),eig_pairs[1][1].reshape(4,1)))#变换以后的矩阵149*4 .dot 4*2 = 149*2 become_X_Scaler = X_Scaler.dot(matrix_w) print(become_X_Scaler) plt.figure(figsize=(6, 4))color = np.array(['red', 'green', 'blue']) #构成行列式 plt.scatter(become_X_Scaler[:,0], become_X_Scaler[:,1], c=color[df['class']]) #画出种类对应颜色的散点图 plt.show()
转载于:https://www.cnblogs.com/my-love-is-python/p/9532249.html
跟我学算法-pca(降维)相关推荐
- 机器学习算法-PCA降维技术
机器学习算法-PCA降维 一.引言 在实际的数据分析问题中我们遇到的问题通常有较高维数的特征,在进行实际的数据分析的时候,我们并不会将所有的特征都用于算法的训练,而是挑选出我们认为可能对目标有影响的特 ...
- 12- 降维算法 (PCA降维/LDA分类/NMF) (数据处理)
数据降维就是一种对高维度特征数据预处理方法.降维是将高维度的数据保留下最重要的一些特征,去除噪声和不重要的特征,从而实现提升数据处理速度的目的. PCA算法有两种实现方法: 基于特征值分解协方差矩阵实 ...
- 10 降维算法(PCA降维/LDA分类/NMF非负矩阵)
数据降维简介 降维就是一种对高维度特征数据预处理方法.降维是将高维度的数据保留下最重要的一些特征,去除噪声和不重要的特征,从而实现提升数据处理速度的目的. 降维具有如下一些优点: 减少所需的存储空间. ...
- 数学推导+纯Python实现机器学习算法26:PCA降维
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 作为一种常见的多元统计分析方法,主成分分析法(Principal ...
- 【白话机器学习】算法理论+实战之PCA降维
1. 写在前面 如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,在这简单的先捋一捋, 常见的机器学习算法: 监督学习算法:逻辑回归,线性回归,决策树,朴素贝叶斯,K近邻,支 ...
- 机器学习-Sklearn-04(降维算法PCA和SVD)
机器学习-Sklearn-04(降维算法PCA和SVD) 学习04 1 概述 1.1 从什么叫"维度"说开来 对于数组和Series来说,维度就是功能shape返回的结果,shap ...
- 白话机器学习算法理论+实战之PCA降维
1. 写在前面 如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,比如我之前写过的一篇十大机器学习算法的小总结,在这简单的先捋一捋, 常见的机器学习算法: 监督学习算法:逻辑 ...
- sklearn实战之降维算法PCA与SVD
sklearn实战系列: (1) sklearn实战之决策树 (2) sklearn实战之随机森林 (3) sklearn实战之数据预处理与特征工程 (4) sklearn实战之降维算法PCA与SVD ...
- 降维算法PCA和SVD
文章目录 前言 PCA和SVD 1. 降维算法的实现 1.1 降维的步骤表格 2. PCA,SVD简单概述 3. 重要参数 n_components 3.1 迷你案例:高维数据的可视化 3.1.1 调 ...
- ML之SVM:利用SVM算法对手写数字图片识别数据集(PCA降维处理)进行预测并评估模型(两种算法)性能
ML之SVM:利用SVM算法对手写数字图片识别数据集(PCA降维处理)进行预测并评估模型(两种算法)性能 目录 输出结果 设计思路 核心代码 输出结果 设计思路 核心代码 estimator = PC ...
最新文章
- 机器学习算法与技术简介
- tar打包及打包并压缩
- 利用systemd 实现 tomcat 多实例
- java+循环的时候用标签_java中循环标签的使用
- 页面中嵌入了Flash时滚动条问题
- groovy import java_在Java中调用Groovy方法的又一种方法:使用接口
- E. Turn Off The TV Educational Codeforces Round 29
- 小型elf Hello,World程序
- 设置 cell点击 背景色
- idea maven丢失
- include问题及错误解决
- 长沙好吃的地方?这个好吃的地方你可能真的没来过
- ro服务器物品掉率修改,给冒险者们的一封致歉信 社交服务器持续优化 仙境传说手游常见BUG解答...
- java视频转换flv_java使用ffmpeg转换视频为flv文件
- Mysql语句优化的原则——让你写sql更加顺手
- 士兵队列训练问题 (队列 c++)
- OSChina 周三乱弹 ——身为同事就要互相伤害么?
- 第九章计算机网络安全(完结撒花)
- Android开发知识体系,技术实现
- 计算1+2+3+...+99+100的总和
热门文章
- 数据结构(三)树、二叉树、最优二叉树
- php中对文件的读取和写入
- 第十三次CCFCSP认证(2018年3月)真题碰撞的小球
- Python工具——tqdm:进度条
- 【ArcGIS|空间分析】志愿者分配管理区域内共享单车(全国大学生GIS技能大赛试题)
- fopen php 读取_PHP fopen读取url内容
- 罗盘时钟制作代码_抖音超火的姓氏罗盘壁纸,安卓和苹果都能做
- PHP邮件扩展,PHP邮件扩展:mailpp
- 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
- php mysql源码包,linux下Apache+PHP+mysql+phpMyAdmin源码包安装配置