【机器学习实战05】PCA降维算法
来源:互联网 发布:了解算法看哪本书 编辑:程序博客网 时间:2024/06/08 11:21
1、数据简化
- 使得数据更易使用
- 降低很多算法的计算开销
- 去除噪声
- 使得结果易懂
2、降维方法
1:主成分分析法( PrincipalComponentAnalysis, P C A )
在 PCA中,数据从原来的坐标系转换到了新的坐标系,新坐标系的选择是由数据本身决定的。第一个新坐标轴选择的是原始数据中方差最大的方向,第二个新坐标轴的选择和第一个坐标轴正交且具有最大方差的方向。该过程一直重复,重复次数为原始数据中特征的数目。我们会发现,大部分方差都包含在最前面的几个新坐标轴中。因此,我们可以忽略余下的坐标轴,即对数据进行了降维处理。2:因子分析(Factor Analysis)
在因子分析中,我们假设在观察数据的生成 中 有一 些观察 不 到的隐 变量 ( latentvariable )。假设观察数据是这些隐变量和某些噪声的线性组合 。那么隐变量的数据可能比观察数据的数目少,也就是说通过找到隐变量就可以实现数据的降维。3:独立成分分析(Independent Component Analysis, ICA)
ICA假设数据是从 N 个数据源生成的,这一点和因子分析有些类似。 假设数据为多个数据源的混合观察结果,这些数据源之间在统计上是相互独立的,而在 ? 0
人中只假设数据是不相关的。同因子分析一样,如果数据源的数目少于观察数据的数目,则可以实现降维过程。
3、PCA降维算法:
#encoding:utf-8from numpy import *#导入数据集def loadDataSet(fileName, delim='\t'): fr = open(fileName) stringArr = [line.strip().split(delim) for line in fr.readlines()] datArr = [map(float,line) for line in stringArr] return mat(datArr)#PCA算法:第一个参数为数据集,第二个参数topNfeat为可选参数,即应用的N个特征,# 如果不指定topNfeat的值,那么函数就会返回前9999999个特征,或者原始数据中的全部特征def pca(dataMat, topNfeat=9999999): meanVals = mean(dataMat, axis=0) #求平均值 meanRemoved = dataMat - meanVals #减去平均值 covMat = cov(meanRemoved, rowvar=0)#计算协方差矩阵及其特征值 eigVals,eigVects = linalg.eig(mat(covMat)) #argsort()函数对特征值进行从小到大的排序 eigValInd = argsort(eigVals) eigValInd = eigValInd[:-(topNfeat+1):-1] redEigVects = eigVects[:,eigValInd] #将数据转换到新空间 lowDDataMat = meanRemoved * redEigVects#transform data into new dimensions reconMat = (lowDDataMat * redEigVects.T) + meanVals return lowDDataMat, reconMat#测试:dataMat = loadDataSet('testSet.txt')print dataMatprint "\n"lowDDataMat, reconMat = pca(dataMat, 1)shape = shape(lowDDataMat)#降维之后的矩阵print shape#print lowDDataMat, reconMat
Output:
[[ 8.308822 7.097007] [ 6.529876 5.439456] [ 9.844608 9.044897] ..., [ 9.021999 10.705525] [ 8.756769 8.246693] [ 8.36421 8.723832]](1000, 1)
绘制原始数据点:
#encoding:utf-8from numpy import *import matplotlibimport matplotlib.pyplot as plt#创建1000个随机数据点n = 1000 xcord0 = []ycord0 = []xcord1 = []ycord1 = []markers =[]colors =[]fw = open('testSet.txt','w')#将数据点的坐标写入testSet.txt文件中for i in range(n): [r0,r1] = random.standard_normal(2) fFlyer = r0 + 9.0 tats = 1.0*r1 + fFlyer + 0 xcord0.append(fFlyer) ycord0.append(tats) fw.write("%f\t%f\n" % (fFlyer, tats))fw.close()fig = plt.figure()ax = fig.add_subplot(111)ax.scatter(xcord0,ycord0, marker='^', s=90)plt.xlabel('hours of direct sunlight')plt.ylabel('liters of water')plt.show()
绘制PCA降维后的数据点:
from numpy import *import matplotlibimport matplotlib.pyplot as pltimport pcadataMat = pca.loadDataSet('testSet.txt')lowDMat, reconMat = pca.pca(dataMat, 1)fig = plt.figure()ax = fig.add_subplot(111)ax.scatter(dataMat[:,0], dataMat[:,1], marker='^', s=90)ax.scatter(reconMat[:,0], reconMat[:,1], marker='o', s=50, c='red')plt.show()
注意:数据点的产生是随机的,所以对于数据点的绘制图形也是随机的。
0 0
- 【机器学习实战05】PCA降维算法
- 机器学习算法-PCA
- 机器学习实战ByMatlab(二)PCA算法
- 机器学习实战ByMatlab(二)PCA算法
- 机器学习实战之PCA
- 机器学习实战之PCA
- 机器学习降维算法一:PCA (Principal Component Analysis)
- 机器学习降维算法一:PCA (Principal Component Analysis)
- PYTHON机器学习实战——PCA主成分分析 数据降维
- 【机器学习】Sklearn库主成分分析PCA降维的运用实战
- 机器学习实战:PCA降维 样本协方差
- 《机器学习实战》第十三章 PCA
- 转载-机器学习实战之PCA
- 机器学习降维算法一:PCA(主成分分析算法)
- 机器学习降维算法一:PCA(主成分分析算法)
- 机器学习降维算法一:PCA(主成分分析算法)
- 机器学习算法 -- PCA 学习笔记
- 数据降维之PCA算法的理解(机器学习公开课)
- 快速排序
- HDU 5861
- QWidget、QMainWindow、QDialog区别
- vs常用快捷键
- 三家人
- 【机器学习实战05】PCA降维算法
- 屏蔽输入法
- REDIS安装配置
- poj 2115 C Looooops(扩展欧几里德)
- js addEventListener详解
- C#预编译符
- HDU-5783 Divide the Sequence(贪心水题)
- HDU 1050(贪心)
- Category能否给已有类添加新的属性