代码实现分成好多种层级,有的代码只使用标准库实现,有的代码基于其它库实现,有的代码直接调用库中现有的实现。

在本文中,按照不同的层级分别实现PCA

对于分类问题基本任务可以描述如下

x11 x12 x13 x14 y1

x21 x22 x23 x24 y2

x31 x32 x33 x34 y3

......

PCA用于提取样本的主要特征,它只跟属性有关,而跟类别数据无关。也就是说,PCA只跟X有关而跟Y无关。

import numpy as np
from sklearn.decomposition import PCA # 10个样本,每个样本7个属性,现在要取其中的3个属性
train_x = np.random.rand(10, 7)
train_y = np.random.randint(0, 3, (100, 1)) #使用sklearn
p = PCA(n_components=3)
p.fit(train_x, train_y)
train_data = p.transform(train_x) # 使用numpy中的协方差计算、特征值求解来实现
mu = np.mean(train_x, axis=0) # 均值向量
# 协方差矩阵,cov默认是列向量,这里需要T表示将行向量转置称列向量
# 使用参数rowvar=False相当于矩阵转置
A = np.cov(np.asmatrix(train_x - mu).T)
root, vec = np.linalg.eig(A)
ind = np.argsort(root)
transform_matrix = np.asmatrix(vec[:, ind[-3:]])
train_data2 = np.asmatrix(train_x - mu) * transform_matrix # 自己实现协方差计算,只使用numpy中的特征值求解来实现
mu = np.mean(train_x, axis=0)
A = np.dot((train_x - mu).T, (train_x - mu)) / (len(train_x) - 1)
root, vec = np.linalg.eig(A)
# 返回的特征根是无序的,需要进行排序
ind = np.argsort(root)
# vec[:ind[-3:]]或者vec[:ind[-1:-4:-1]]都是可以的
transform_matrix = np.asmatrix(vec[:, ind[-3:]])
train_data3 = np.asmatrix(train_x - mu) * transform_matrix
print(np.sum(train_data - train_data2), np.sum(train_data - train_data3))

最新文章

  1. folder、source folder、package 区别与联系
  2. 原生javascript实现省市区三级联动
  3. VMware下利用ubuntu13.04建立嵌入式开发环境之一
  4. Jenkins进阶系列之——14配置Jenkins用户和权限
  5. JVM 性能调优实战之:一次系统性能瓶颈的寻找过程
  6. Nginx模块开发入门
  7. 【单调栈】Vijos P1926 紫色的手链
  8. 2013 长沙网络赛 B 题 Bizarre Routine
  9. 格而知之1:UIButton中imageView和titleLabel的位置调整
  10. 【JavaWeb】Session(转)
  11. CoreAnimation注意事项
  12. WebStrom中实现Vue项目的快速启动
  13. WebDriver Selenium eclipse环境搭建
  14. appium+python自动化脚本
  15. leveldb 学习记录(五)SSTable格式介绍
  16. css文本溢出隐藏显示省略号(单行+多行)
  17. ajax文件上传-FormData()
  18. 18. 4Sum(双指针)
  19. Loj10167 HDU2089 不要62
  20. 03-SSH综合案例:商城表关系分析

热门文章

  1. django 2中的app_name和namespace
  2. Codeforces 788C The Great Mixing
  3. Centos 6.5安装mysql
  4. 001 LRU-缓存淘汰算法
  5. AngularJS移动端页面input无法输入
  6. linux学习之使用fdisk命令进行磁盘分区(八)
  7. 仿win10环境变量助手
  8. python单元测试模块unittest
  9. AGC027 D - Modulo Matrix 构造
  10. loj#2012. 「SCOI2016」背单词