降维PCA技术

降维技术使得数据变得更易使用,并且它们往往能够去除数据中的噪声,使得机器学习任务往往更加精确。

降维往往作为预处理步骤,在数据应用到其它算法之前清洗数据。有很多技术可以用于数据降维,在这些技术中,独立成分分析(Independent Component Analysis, ICA)、因子分析(Factor Analysis)、主成分分析(Principal Component Analysis, PCA)比较流行,其中又以主成分分析应用最广泛。

PCA可以从数据中识别其主要特征,它是通过沿着数据最大方差方向旋转坐标轴来实现的。选择方差最大的方向作为第一条坐标轴,后续坐标轴与前面的坐标轴正交。

协方差矩阵上的特征值分析可以用一系列的正交坐标轴来获取。

降维的优点

1 使得数据集更易使用

2 降低很多算法的计算开销

3 去除噪声

4 使得结果易懂

缺点

1 不一定需要,且有可能损失有用信息

注意:PCA技术适用于数值型数据,不适用与名义数据

假设有如下数据需要进行预处理,数据集合约1000行。

PCA算法的伪代码大致如下:

1 去除平均值

2 计算协方差矩阵

3 计算协方差矩阵的特征值和特征向量

4 将特征值从大到小排序

5 保留最上面的N个特征向量

6 将数据装换到上述N个特征向量构建新的特征空间中

本文通过PCA算法对数据降维处理,主要代码如下

 1 from numpy import *
 2
 3 def loadDataSet(filename, delim = ‘\t‘):
 4     fr = open(filename)
 5     stringArr = [line.strip().split(delim) for line in fr.readlines()]
 6     datArr = [map(float, line) for line in stringArr]
 7     return mat(datArr)
 8
 9 def pca(dataMat, topNfeat=9999999):
10
11     meanVals = mean(dataMat, axis=0)
12     meanRemoved = dataMat-meanVals
13     covMat = cov(meanRemoved, rowvar = 0)
14     eigVals, eigVects = linalg.eig(mat(covMat))
15     eigValInd = argsort(eigVals)
16     eigValInd = eigValInd[:-(topNfeat+1):-1]
17     redEigVects = eigVects[:, eigValInd]
18     lowDDataMat = meanRemoved * redEigVects
19     reconMat = (lowDDataMat * redEigVects.T) + meanVals
20
21     return lowDDataMat, reconMat

pca

以列为对象,画出原始数据的散点图

主成分分析后的叠加图像

画图Python代码

import pca
reload(pca)
dataMat = pca.loadDataSet(‘testSet.txt‘)

lowDmat, reconMat = pca.pca(dataMat, 1)
import matplotlib
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(dataMat[:, 0].flatten().A[0], dataMat[:, 1].flatten().A[0],
           marker = ‘^‘, s = 90)

ax.scatter(reconMat[:, 0].flatten().A[0], reconMat[:, 1].flatten().A[0],
           marker = ‘o‘, s = 50, c = ‘red‘)

展示的图片

时间: 2024-11-08 21:26:43

降维PCA技术的相关文章

[降维] PCA 主成分分析

其实早该整理一下PCA了,怎奈一直没有时间,可能是自己对时间没有把握好吧,下面进入正题. 降维的概念 所谓降维,就是降低数据的维数.在机器学习中尤其常见,之前做过对一幅图片提取小波特征,对于一幅大小为800*600的图片,如果每个点提取五个尺度.八个方向的特征,那么每一个像素点提取40个特征,那么一副图片的话就是40*800*600=19200000个特征.也就是我们用一个19200000的向量描述一幅图片.如果有m幅图片,那么特征为m*19200000的大小.显然这个维数太大了,所以需要降维.

特征降维-PCA的数学原理

PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维.网上关于PCA的文章有很多,但是大多数只描述了PCA的分析过程,而没有讲述其中的原理.这篇文章的目的是介绍PCA的基本数学原理,帮助读者了解PCA的工作机制是什么. 数据的向量表示及降维问题 一般情况下,在数据挖掘和机器学习中,数据被表示为向量.例如某个淘宝店2012年全年的流量及交易情况可以看

2019-07-31【机器学习】无监督学习之降维PCA算法实例 (鸢尾花)

样本 代码: import matplotlib.pyplot as plt from sklearn.decomposition import PCA from sklearn.datasets import load_iris #加载鸢尾花数据集导入函数 data = load_iris()#加载数据,array([[5.1 3.5 1.4 0.2].....]) #print(data) y = data.target #各50个 0,1,2 暂不明作用, #print(y) X = da

数据降维PCA

简介 @维基百科 在多元统计分析中,主成分分析(英语:Principal components analysis,PCA)是一种统计分析.简化数据集的方法.它利用正交变换来对一系列可能相关的变量的观测值进行线性变换,从而投影为一系列线性不相关变量的值,这些不相关变量称为主成分(Principal Components).具体地,主成分可以看做一个线性方程,其包含一系列线性系数来指示投影方向.PCA对原始数据的正则化或预处理敏感(相对缩放). 本文内容皆源自Andrew Ng 目的 1.实现数据压

机器学习算法-PCA降维技术

机器学习算法-PCA降维 一.引言 在实际的数据分析问题中我们遇到的问题通常有较高维数的特征,在进行实际的数据分析的时候,我们并不会将所有的特征都用于算法的训练,而是挑选出我们认为可能对目标有影响的特征.比如在泰坦尼克号乘员生存预测的问题中我们会将姓名作为无用信息进行处理,这是我们可以从直观上比较好理解的.但是有些特征之间可能存在强相关关系,比如研究一个地区的发展状况,我们可能会选择该地区的GDP和人均消费水平这两个特征作为一个衡量指标.显然这两者之间是存在较强的相关关系,他们描述的都是该地区的

机器学习笔记----四大降维方法之PCA(内带python及matlab实现)

大家看了之后,可以点一波关注或者推荐一下,以后我也会尽心尽力地写出好的文章和大家分享. 本文先导:在我们平时看NBA的时候,可能我们只关心球员是否能把球打进,而不太关心这个球的颜色,品牌,只要有3D效果,看到球员扣篮的动作就可以了,比如下图: 如果我们直接对篮球照片进行几百万像素的处理,会有几千维甚至几万维的数据要计算,计算量很大.而往往我们只需要大概勾勒出篮球的大概形状就可以描述问题,所以必须对此类数据降维,这样会使处理数据更加轻松.这个在人脸识别中必须要降维,因为我们在做特征提取的时候几万维

【机器学习】主成分分析PCA(Principal components analysis)

1. 问题 真实的训练数据总是存在各种各样的问题: 1. 比如拿到一个汽车的样本,里面既有以“千米/每小时”度量的最大速度特征,也有“英里/小时”的最大速度特征,显然这两个特征有一个多余. 2. 拿到一个数学系的本科生期末考试成绩单,里面有三列,一列是对数学的兴趣程度,一列是复习时间,还有一列是考试成绩.我们知道要学好数学,需要有浓厚的兴趣,所以第二项与第一项强相关,第三项和第二项也是强相关.那是不是可以合并第一项和第二项呢? 3. 拿到一个样本,特征非常多,而样例特别少,这样用回归去直接拟合非

用opencv实现的PCA算法,非API调用

理论參考文献:但此文没有代码实现.这里自己实现一下,让理解更为深刻 问题:如果在IR中我们建立的文档-词项矩阵中,有两个词项为"learn"和"study",在传统的向量空间模型中,觉得两者独立. 然而从语义的角度来讲.两者是相似的.并且两者出现频率也类似,是不是能够合成为一个特征呢? <模型选择和规则化>谈到的特征选择的问题.就是要剔除的特征主要是和类标签无关的特征.比方"学生的名字"就和他的"成绩"无关,使用的

K-L变换和 主成分分析PCA

一.K-L变换 说PCA的话,必须先介绍一下K-L变换了. K-L变换是Karhunen-Loeve变换的简称,是一种特殊的正交变换.它是建立在统计特性基础上的一种变换,有的文献也称其为霍特林(Hotelling)变换,因为他在1933年最先给出将离散信号变换成一串不相关系数的方法.K-L变换的突出优点是它能去相关性,而且是均方误差(Mean Square Error,MSE)意义下的最佳变换. 下面就简单的介绍一下K-L变换了. 设,随机向量X ∈Rn(n阶列向量),它的均值向量为mX,则其协