数据压缩是机器学习领域中重要的内容,通过数据压缩技术可以将原始数据集变换到一个维度更低的新的特征子空间,帮助对数据存储和分析。
降维压缩数据,分为无监督和有监督两类,先来介绍无监督数据压缩——主成分分析(Principal Component Analysis,PCA)
PCA是在高维数据中找到最大方差的方向,并将数据映射到一个维度不大于原始数据的新的子空间上,可以基于特征之间的关系识别出数据内在的模式。
PCA算法的流程:

  • 对原始d维数据集做标准化出来
  • 构造样本的协方差矩阵
  • 计算协方差矩阵的特征值和相应的特征向量
  • 选择与前k个最大特征值对应的特征向量,其中k为新特征空间的维度
  • 通过前k个特征向量构建映射矩阵W
  • 通过映射矩阵W将d维的输入数据集X转换到新的k维特征子空间
#获取葡萄酒数据集
import pandas as pd
df_wine = pd.read_csv('D:\Python\data\wine.data', header=None)#将数据集划分为训练集(70%)和测试集(30%),并使用单位方差进行标准化
from sklearn.cross_validation import train_test_split
from sklearn.preprocessing import StandardScaler
X, y = df_wine.iloc[:, 1:].values, df_wine.iloc[:, 0].values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
sc = StandardScaler()
X_train_std = sc.fit_transform(X_train)
X_test_std = sc.fit_transform(X_test)  #构造协方差矩阵
import numpy as np
cov_mat = np.cov(X_train_std.T) #协方差矩阵
eigen_vals, eigen_vecs = np.linalg.eig(cov_mat) #使用Numpy的linalg.eig函数计算数据集协方差矩阵的特征值对
print ('\nEigenvalues \n%s' % eigen_vals)  #特征值的方差贡献率
tot = sum(eigen_vals)
var_exp = [(i / tot) for i in sorted(eigen_vals, reverse=True)]
cum_var_exp = np.cumsum(var_exp) #Numpy cumsum计算累计方差import matplotlib.pyplot as plt
plt.bar(range(1, 14), var_exp, alpha=0.5, align='center', label='individual explained variance') #单个方差贡献
plt.step(range(1, 14), cum_var_exp, where='mid', label='cumulative explained variance') #累计方差贡献
plt.ylabel('Explained variance ratio')
plt.xlabel('Principal components')
plt.legend(loc='best')
plt.show()              

eigen_pairs = [(np.abs(eigen_vals[i]), eigen_vecs[:, i]) for i in range(len(eigen_vals))]
eigen_pairs.sort(key = lambda k : k[0], reverse=True) #按特征值的降序排列特征
w = np.hstack((eigen_pairs[0][1] [:, np.newaxis], eigen_pairs[1][1][:, np.newaxis])) #选取两个最大特征值对应的特征向量 得到一个13*2的映射矩阵W
print ('Matrix W:\n', w)
X_train_std[0].dot(w)
print (X_train_std[0].dot(w))
X_train_pca = X_train_std.dot(w) #矩阵点积 将124*13的训练集转换为包含两个主成分的子空间上 124*2
print(X_train_pca)
#二维散点图可视化colors = ['r', 'b', 'g']
markers = ['s', 'x', 'o']for l, c, m in zip(np.unique(y_train), colors, markers):plt.scatter(X_train_pca[y_train == l, 0], X_train_pca[y_train == l, 1], c=c, label=l, marker=m)plt.xlabel('PC 1')
plt.ylabel('PC 2')
plt.legend(loc='lower left')
plt.show()

scikit-learn中提供的PCA类 对数据集预处理再使用逻辑斯蒂回归对转换后的数据进行分类

from matplotlib.colors import ListedColormap
import matplotlib.pyplot as plt
#对二维数据集决策边界可视化
def plot_decision_regions(X, y, classifier, resolution=0.02):markers = ('s', 'x', 'o', '^', 'v')colors = ('red', 'blue', 'lightgreen', 'gray', 'cyan')cmap = ListedColormap(colors[:len(np.unique(y))]) #ListedColormap定义颜色 标记符号,通过颜色列表生成颜色示例图x1_min, x1_max = X[:, 0].min() - 1, X[:, 0].max() + 1x2_min, x2_max = X[:, 1].min() - 1, X[:, 1].max() + 1xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, resolution),np.arange(x2_min, x2_max, resolution))Z = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T)Z = Z.reshape(xx1.shape)plt.contourf(xx1, xx2, Z, alpha=0.4, cmap=cmap)plt.xlim(xx1.min(), xx1.max())plt.ylim(xx2.min(), xx2.max()) for idx, cl in enumerate(np.unique(y)):plt.scatter(x=X[y == cl, 0], y=X[y == cl, 1],alpha=0.8, c=cmap(idx),marker=markers[idx], label=cl)from sklearn.linear_model import LogisticRegression
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
lr = LogisticRegression()
X_train_pca = pca.fit_transform(X_train_std)
X_test_pca = pca.transform(X_test_std)
lr.fit(X_train_pca, y_train)
plot_decision_regions(X_train_pca, y_train, classifier=lr)
plt.xlabel('PC1')
plt.ylabel('PC2')
plt.legend(loc='lower left')
plt.show()

转载于:https://www.cnblogs.com/eugene0/p/11023413.html

Python机器学习(Sebastian著 ) 学习笔记——第五章通过降维压缩数据(Windows Spyder Python 3.6)...相关推荐

  1. python降维将多列数据压缩为一列_Python机器学习(Sebastian著 ) 学习笔记——第五章通过降维压缩数据(Windows Spyder Python 3.6)...

    数据压缩是机器学习领域中重要的内容,通过数据压缩技术可以将原始数据集变换到一个维度更低的新的特征子空间,帮助对数据存储和分析. 降维压缩数据,分为无监督和有监督两类,先来介绍无监督数据压缩--主成分分 ...

  2. Python快速编程入门#学习笔记01# |第一章 :Python基础知识 (Python发展历程、常见的开发工具、import模块导入)

    全文目录 ==先导知识== 1 认识Python 1.1.1 Python的发展历程 1.1.2 Python语言的特点 2. Python解释器的安装与Python程序运行 1.2.1 安装Pyth ...

  3. Python快速编程入门#学习笔记03# |第二章 :Python基础(代码格式、标识符关键字、变量和数据类型、数字类型以及运算符)

    全文目录 ==先导知识== 学习目标: 2.1 代码格式 2.1.1 注释 2.1.2 缩进 2.1.3 语句换行 2.2 标识符和关键字 2.2.1 标识符 2.2.2 关键字 2.3 变量和数据类 ...

  4. Programming Entity Framework-dbContext 学习笔记第五章

    ### Programming Entity Framework-dbContext 学习笔记 第五章 将图表添加到Context中的方式及容易出现的错误 方法 结果 警告 Add Root 图标中的 ...

  5. 《Go语言圣经》学习笔记 第五章函数

    <Go语言圣经>学习笔记 第五章 函数 目录 函数声明 递归 多返回值 匿名函数 可变参数 Deferred函数 Panic异常 Recover捕获异常 注:学习<Go语言圣经> ...

  6. Python3《机器学习实战》学习笔记(五):朴素贝叶斯实战篇之新浪新闻分类

    转载请注明作者和出处:http://blog.csdn.net/c406495762 Github代码获取:https://github.com/Jack-Cherish/Machine-Learni ...

  7. python机器学习基础教程-学习笔记(一)

    了解 scikit-learn 及其用法是很重要的,但还有其他一些库也可以改善你的编程体验. scikit-learn 是基于 NumPy 和 SciPy 科学计算库的.此外,我们还会用到 panda ...

  8. Python数据可视化学习笔记:第一章 关联图 第四节 使用Python绘制一般气泡图

    前言 声明:这个系列的博文都是我自己学习所得的东西,秉承着每天进步一点点的理念进行学习,我参考的课程是<菊安酱与菜菜的Python机器学习可视化50图>,使用的Python版本为3.6.4 ...

  9. 2022 最新 Android 基础教程,从开发入门到项目实战【b站动脑学院】学习笔记——第五章:中级控件

    第 5 章 中级控件 本章介绍App开发常见的几类中级控件的用法,主要包括:如何定制几种简单的图形.如何使用几种选择按钮.如何高效地输入文本.如何利用对话框获取交互信息等,然后结合本章所学的知识,演示 ...

最新文章

  1. Atitit Java OpenCV 捕获视频
  2. php多表数据排除,thinkphp中多表查询中防止数据重复的sql语句(必看)
  3. Spring boot修改员工
  4. header中Content-Disposition的作用与使用方法
  5. 1.11.Flink DataSetAPI、DataSet API之Data Sources、DataSet API之Transformations、DataSet Sink部分详解
  6. excel 某个单元格不是等于空值_这些稀奇古怪的符号,却是Excel高手们常玩的!...
  7. php上传预览源码,php批量上传五[带预览]-PHP源码
  8. 玩转微服务日志框架Logback
  9. 被除数、除数、商、余数的正负号规律二
  10. An impassioned circulation of affection(尺取+预处理)
  11. 金融matlab创建3x3数组,Matlatb金融时间序列工具箱——建立金融时间序列
  12. 解决编译.spec:rpm build with: fg: no job control报错
  13. mongo-java-driver 的简单使用(1)
  14. OFFICE技术讲座:边框底纹对布局的影响
  15. ensp三层交换机配置实验
  16. Action Segmentation with Joint Self-Supervised Temporal Domain Adaptation
  17. P68-70 王者荣耀
  18. Android开发中的一些问题
  19. 豆瓣api不能访问了的解决办法
  20. 报错ValueError: row index was 65536, not allowed by .xls format

热门文章

  1. php 获取css值,如何通过JS获取CSS属性值
  2. linux过滤重复字符串,linux – 从制表符分隔文件中删除重复的单词/字符串
  3. python打印不同颜色的字_Python 根据日志级别打印不同颜色的日志的方法示例
  4. python数据字典排序_Python自动处理数据字典(Python是3.6版本)
  5. java工具keytool生成p12数字证书文件
  6. Java 计算数学表达式(字符串解析求值工具)
  7. 用c语言赋值表示的例子,一起talk C栗子吧(第五回:C语言实例--数组巧妙赋值)...
  8. html+css面试题 行内元素padding和margin
  9. 2018微博词云项目深度解析
  10. marathon新建应用映射端口限制