1.背景

        PCA(Principal Component Analysis),PAC的作用主要是减少数据集的维度,然后挑选出基本的特征。
        PCA的主要思想是移动坐标轴,找到方差最大的方向上的特征值。什么叫方差最大的方向的特征值呢。就像下图中的曲线B。一样。它的覆盖范围最广。
基本步骤:(1)首先计算数据集的协方差矩阵
                   (2)计算协方差矩阵的特征值和特征向量
                   (3)保留最重要的n个特征
what is 协方差矩阵:
定义是变量向量减去均值向量,然后乘以变量向量减去均值向量的word=%E8%BD%AC%E7%BD%AE&fr=qb_search_exp&ie=utf8" rel="nofollow" data-word="5" log="pos:innerLink">转置再求均值。

比如x是变量,μ是均值,协方差矩阵等于E[(x-μ)(x-μ)^t],物理意义是这种,比如x=(x1,x2,...,xi)那么协方差矩阵的第m行n列的数为xm与xn的协方差,若m=n。则是xn的方差。假设x的元素之间是独立的,那么word=%E5%8D%8F%E6%96%B9%E5%B7%AE%E7%9F%A9%E9%98%B5&fr=qb_search_exp&ie=utf8" rel="nofollow" data-word="0" log="pos:innerLink">协方差矩阵仅仅有对角线是有值,由于x独立的话对于m≠n的情况xm与xn的word=%E5%8D%8F%E6%96%B9%E5%B7%AE&fr=qb_search_exp&ie=utf8" rel="nofollow" data-word="4" log="pos:innerLink">协方差为0。另外协方差矩阵是对称的。
能够參考wiki:(http://zh.wikipedia.org/wiki/%E5%8D%8F%E6%96%B9%E5%B7%AE%E7%9F%A9%E9%98%B5)

2.代码实现

伪代码例如以下(摘自机器学习实战):
'''
@author: Garvin
'''
from numpy import *
import matplotlib.pyplot as plt 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) def pca(dataMat, topNfeat=9999999):
meanVals = mean(dataMat, axis=0)
meanRemoved = dataMat - meanVals #remove mean
covMat = cov(meanRemoved, rowvar=0)
eigVals,eigVects = linalg.eig(mat(covMat))
eigValInd = argsort(eigVals) #sort, sort goes smallest to largest
eigValInd = eigValInd[:-(topNfeat+1):-1] #cut off unwanted dimensions
redEigVects = eigVects[:,eigValInd] #reorganize eig vects largest to smallest
lowDDataMat = meanRemoved * redEigVects#transform data into new dimensions
reconMat = (lowDDataMat * redEigVects.T) + meanVals
return lowDDataMat, reconMat def plotBestFit(dataSet1,dataSet2):
dataArr1 = array(dataSet1)
dataArr2 = array(dataSet2)
n = shape(dataArr1)[0]
n1=shape(dataArr2)[0]
xcord1 = []; ycord1 = []
xcord2 = []; ycord2 = []
xcord3=[];ycord3=[]
j=0
for i in range(n): xcord1.append(dataArr1[i,0]); ycord1.append(dataArr1[i,1])
xcord2.append(dataArr2[i,0]); ycord2.append(dataArr2[i,1])
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(xcord1, ycord1, s=30, c='red', marker='s')
ax.scatter(xcord2, ycord2, s=30, c='green') plt.xlabel('X1'); plt.ylabel('X2');
plt.show() if __name__=='__main__':
mata=loadDataSet('/Users/hakuri/Desktop/testSet.txt')
a,b= pca(mata, 2)

loadDataSet函数是导入数据集。

PCA输入參数:參数一是输入的数据集。參数二是提取的维度。比方參数二设为1。那么就是返回了降到一维的矩阵。
PCA返回參数:參数一指的是返回的低维矩阵。相应于输入參数二。

參数二相应的是移动坐标轴后的矩阵。

上一张图。绿色为原始数据。红色是提取的2维特征。

3.代码下载

    下载地址:请点击我

/********************************

* 本文来自博客  “李博Garvin“

* 转载请标明出处:http://blog.csdn.net/buptgshengod

******************************************/

【机器学习算法-python实现】PCA 主成分分析、降维的更多相关文章

  1. 【机器学习算法-python实现】KNN-k近邻算法的实现(附源代码)

    ,400],[200,5],[100,77],[40,300]]) shape:显示(行,列)例:shape(group)=(4,2) zeros:列出一个同样格式的空矩阵,例:zeros(group ...

  2. 机器学习算法 Python&R 速查表

    sklearn实战-乳腺癌细胞数据挖掘( 博主亲自录制) https://study.163.com/course/introduction.htm?courseId=1005269003&u ...

  3. 【机器学习算法-python实现】决策树-Decision tree(1) 信息熵划分数据集

    (转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景 决策书算法是一种逼近离散数值的分类算法,思路比較简单,并且准确率较高.国际权威的学术组织,数据挖掘国际 ...

  4. # 机器学习算法总结-第五天(降维算法PCA/SVD)

  5. 【机器学习算法-python实现】採样算法的简单实现

    1.背景     採样算法是机器学习中比較经常使用,也比較easy实现的(出去分层採样).经常使用的採样算法有下面几种(来自百度知道):     一.单纯随机抽样(simple random samp ...

  6. 【机器学习算法-python实现】矩阵去噪以及归一化

    1.背景    项目须要,打算用python实现矩阵的去噪和归一化.用numpy这些数学库没有找到非常理想的函数.所以一怒之下自己用标准库写了一个去噪和归一化的算法,效率有点低,只是还能用,大家假设有 ...

  7. 【机器学习算法-python实现】svm支持向量机(1)—理论知识介绍

    (转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景      强烈推荐阅读(http://www.cnblogs.com/jerrylead/archiv ...

  8. 【机器学习算法-python实现】Adaboost的实现(1)-单层决策树(decision stump)

    (转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景      上一节学习支持向量机,感觉公式都太难理解了,弄得我有点头大.只是这一章的Adaboost线比 ...

  9. 最近邻规则分类(k-Nearest Neighbor )机器学习算法python实现

    综述 Cover和Hart在1968年提出了最初的近邻算法 是分类(classification)算法 输入基于实例的学习(instance-based learning),惰性学习(lazy lea ...

随机推荐

  1. getBoundingClientRect说明

    getBoundingClientRect用于获取某个元素相对于视窗的位置集合. 1.语法:这个方法没有参数. rectObject = object.getBoundingClientRect() ...

  2. bzoj1076【SCOI2008】奖励关

    题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1076 有n种物品等概率落下,求期望最优收益 sol:  一眼看上去就是状压dp吧QAQ数据范围 ...

  3. [USACO Section 2.1]城堡 The Castle (搜索)

    题目链接 Solution 比较恶心的搜索,思路很简单,直接广搜找联通块即可. 但是细节很多,要注意的地方很多.所以直接看代码吧... Code #include<bits/stdc++.h&g ...

  4. spring中MessageSource的配置使用方法3--ResourceBundleMessageSource

    ApplicationContext接口扩展了MessageSource接口,因而提供了消息处理的功能(i18n或者国际化).与HierarchicalMessageSource一起使用,它还能够处理 ...

  5. javascript进阶一

    一 window对象 http://www.w3school.com.cn/jsref/dom_obj_window.asp 二 setInterval的应用 模拟计时器 <!DOCTYPE h ...

  6. 在vue项目当中使用sass

    需要分别安装node-sass 和 sass-loader;可以不需要ruby; webpack当中配置 { test: /\.vue$/, loader: 'vue-loader', options ...

  7. css3 实现居中的9中方法

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  8. 一简单c++程序之反汇编

    #include<iostream> using namespace std; class point3d; class point2d; class point3d { private: ...

  9. Lua开发环境搭建(Mac OS X)

    1. 安装Rudix Rudix: http://rudix.org curl -O https://raw.githubusercontent.com/rudix-mac/rpm/2015.4/ru ...

  10. Day 18 函数之一

    函数参数: 1.形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元.因此,形参只在函数内部有效.函数调用结束返回主调用函数后则不能再使用该形参变量 2.实参可以是常量.变量. ...