PCA###

矩阵的主成分就是其协方差矩阵对应的特征向量,按照对应的特征值大小进行排序,最大的特征值为第一主成分,以此类推

主要过程####

  • 对所有样本进行中心化
  • 计算样本的协方差矩阵 XX.T
  • 对协方差矩阵做特征值分解
  • 取最大的几个特征向量

使用方法####

sklearn sklearn.decomposition.PCA

参数:

  • n_components
  • svd_solver auto默认 full arpack randomized 特征值分解的方法

对鸢尾花进行降维

  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Mon May 22 17:33:47 2017
  4. @author: sfzyk
  5. """
  6. import numpy as np
  7. import sklearn.decomposition as skld
  8. import matplotlib.pyplot as plt
  9. from sklearn.datasets import load_iris
  10. data=load_iris()
  11. #字典形式
  12. y=data.target
  13. x=data.data
  14. pca=skld.PCA(n_components=2)
  15. reduced_x=pca.fit_transform(x)
  16. red_x=[]
  17. red_y=[]
  18. blue_x=[]
  19. blue_y=[]
  20. green_x=[]
  21. green_y=[]
  22. for i in range(len(reduced_x)):
  23. if y[i]==0 :
  24. red_x.append(reduced_x[i][0])
  25. red_y.append(reduced_x[i][1])
  26. elif y[i]==1:
  27. blue_x.append(reduced_x[i][0])
  28. blue_y.append(reduced_x[i][1])
  29. elif y[i]==2:
  30. green_x.append(reduced_x[i][0])
  31. green_y.append(reduced_x[i][1])
  32. #plt.plot(red_x,red_y,'or',blue_x,blue_y,'bo',green_x,green_y,'go')
  33. plt.scatter(red_x,red_y)
  34. plt.scatter(green_x,green_y)
  35. plt.scatter(blue_x,blue_y)
  36. plt.show()

非负矩阵分解###

NMF

给定非负矩阵V

NMF 可以找到一个W 与H 值使得WH近似等于矩阵V中的值

W矩阵 基础图像矩阵,相当于抽取出来的特征

H矩阵 稀疏矩阵

最小函数

传统上 欧氏距离

\( argmin\frac{1}{2}||X-WH||2=\frac{1}{2}(X_{ij}-WH_{ij})2\)

KL散度的求解方法

\( graminJ(W,H)= \sum_{ij}(X_{ij}ln\frac{X_ij}{WH_ij}-X_{ij}+WH_{ij}) \)

具体求解是迭代算法

sklearn.decomposition.NMF 算

参数####

  • n_components 用于只等分解后矩阵的单个维度k
  • init W矩阵和H矩阵初始化方式,默认为nndsvdar
  • ...

NMF的使用方法

NMF 人脸数据特征提取

设置k=6

  1. H k*400

W 4096k V 4096400

  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Wed May 24 12:06:56 2017
  4. @author: sfzyk
  5. """
  6. import matplotlib.pyplot as plt
  7. import sklearn.decomposition as skld
  8. import sklearn.datasets as skldata
  9. import numpy as np
  10. n_row,n_col=2,3
  11. n_compeonents=6
  12. image_shape=(64,64)
  13. dataset=skldata.fetch_olivetti_faces(shuffle=True,random_state=np.random.RandomState(0))
  14. def plot_gallery(title,images,n_col=n_col,n_row=n_row):
  15. plt.figure(figsize=(2.*n_col,2.26*n_row))
  16. plt.suptitle(title,size=16)
  17. for i,comp in enumerate(images):
  18. plt.subplot(n_row,n_col,i+1)
  19. vmax=max(comp.max(),-comp.min())
  20. plt.imshow(comp.reshape(image_shape),cmap=plt.cm.gray,interpolation='nearest',vmin=-vmax,vmax=vmax)
  21. plt.subplots_adjust(0.01,0.05,0.99,0.93,0.04,0.)
  22. plot_gallery("RAW",dataset.images[0:6])
  23. estimators=[('PCA',skld.PCA(n_components=6,whiten=True)),('NMF',skld.NMF(n_components=6,init='nndsvda',tol=5e-3))]
  24. faces=dataset.data
  25. for name,estimator in estimators:
  26. estimator.fit(faces)
  27. components_=estimator.components_
  28. plot_gallery(name,components_[:])
  29. plt.show()

<第一周>降维的更多相关文章

  1. 第一周 总结笔记 / 斯坦福-Machine Learning-Andrew Ng

    课程主页:https://www.coursera.org/learn/machine-learning/home/welcome 收集再多的资料也没用,关键是要自己理解总结,做笔记就是一个归纳总结的 ...

  2. Surprise团队第一周项目总结

    Surprise团队第一周项目总结 团队项目 基本内容 五子棋(Gobang)的开发与应用 利用Android Studio设计一款五子棋游戏,并丰富其内涵 预期目标 实现人人模式:2个用户可以在同一 ...

  3. 20145213《Java程序设计》第一周学习总结

    20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...

  4. 20145206邹京儒《Java程序设计》第一周学习总结

    20145206 <Java程序设计>第1周学习总结 教材学习内容总结 1.三大平台:Java SE.Java EE与Java ME.Java SE是各应用平台的基础,分为四个主要的部分: ...

  5. 20145304 刘钦令 Java程序设计第一周学习总结

    20145304<Java程序设计>第1周学习总结 教材学习内容总结 1995年5月23日,是公认的Java的诞生日,Java正式由Oak改名为Java. Java的三大平台是:Java ...

  6. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

  7. 20145337《JAVA程序设计》第一周学习总结

    # 20145337 <Java程序设计>第1周学习总结 ## 教材学习内容总结 第一章 -Java最早是Sun公司撰写Star7应用程序的程序语言 -根据应用领域不同,有Java SE. ...

  8. Linux内核设计第一周 ——从汇编语言出发理解计算机工作原理

    Linux内核设计第一周 ——从汇编语言出发理解计算机工作原理 作者:宋宸宁(20135315) 一.实验过程 图1 编写songchenning5315.c文件 图2 将c文件汇编成32位机器语言 ...

  9. 20135328信息安全系统设计基础第一周学习总结(Linux应用)

    学习计时:共xxx小时 读书: 代码: 作业: 博客: 一.学习目标 1. 能够独立安装Linux操作系统   2. 能够熟练使用Linux系统的基本命令   3. 熟练使用Linux中用户管理命令/ ...

随机推荐

  1. HashMap 和 concurrentHashMap

    从JDK1.2起,就有了HashMap,正如前一篇文章所说,HashMap不是线程安全的,因此多线程操作时需要格外小心. 在JDK1.5中,伟大的Doug Lea给我们带来了concurrent包,从 ...

  2. 解决mysql因内存不足导致启动报错

    报错如下所示: 解决方案: nano /etc/my.cnf 添加如下设置: key_buffer=16K table_open_cache=4 query_cache_limit=256K quer ...

  3. 排列组合lucas模板

    //codeforces 559C|51nod1486 Gerald and Giant Chess(组合数学+逆元) #include <bits/stdc++.h> using nam ...

  4. 比特镇旅游(Tourist Attractions)【暴力+Bitset 附Bitset用法】

    Online Judge:NOIP2016十连测第一场 T2 Label:暴力,Bitset 题目描述 在美丽的比特镇一共有n个景区,编号依次为1到n,它们之间通过若干条双向道路连接. Byteasa ...

  5. Windows API 第16篇 GetLogicalDrivers 获取驱动器位掩码

    函数原型:DWORD GetLogicalDrives(VOID);The GetLogicalDrives function retrieves a bitmask representing the ...

  6. 如何使用log4j记录日志

    1.下载jar包 http://logging.apache.org/log4j 2.将jar包加入项目 放在lib(没有就创建)下 对已经复制过来的jar包鼠标点击右键,选中BuildPath  - ...

  7. 11.Hibernate一对多关系

    创建JavaBean 一方: Customer private long cust_id; private String cust_name; private long cust_user_id; p ...

  8. html2canvas JS截图插件

    github/download:https://github.com/niklasvh/html2canvas/releases 参考文章:基于html2canvas实现网页保存为图片及图片清晰度优化 ...

  9. html特殊字符 编码css3 content:"特殊符号"一览

    工作中经常会用到用纯css3美化复选框 <div class="cross"></div> css代码.cross{ width: 20px; height ...

  10. ACM常用的Java代码

    import java.util.*; import java.io.*; public class Main { public static void main(String[] args) thr ...