[python机器学习及实践(6)]Sklearn实现主成分分析(PCA)

1.PCA原理

主成分分析(Principal Component Analysis,PCA), 是一种统计方法。通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分。

PCA算法:

2.PCA的实现

数据集:

64维的手写数字图像

代码:

#coding=utf-8
import numpy as np
import pandas as pd
from sklearn.decomposition import PCA
from matplotlib import pyplot as plt
from sklearn.svm import LinearSVC
from sklearn.metrics import classification_report

#1.初始化一个线性矩阵并求秩
M = np.array([[1,2],[2,4]])   #初始化一个2*2的线性相关矩阵
np.linalg.matrix_rank(M,tol=None)  # 计算矩阵的秩

#2.读取训练数据与测试数据集。
digits_train = pd.read_csv(‘https://archive.ics.uci.edu/ml/machine-learning-databases/optdigits/optdigits.tra‘, header=None)
digits_test = pd.read_csv(‘https://archive.ics.uci.edu/ml/machine-learning-databases/optdigits/optdigits.tes‘, header=None)
print digits_train.shape   #(3823, 65)    3000+个样本,每个数据由64个特征,1个标签构成
print digits_test.shape    #(1797, 65)

#3将数据降维到2维并可视化

# 3.1 分割训练数据的特征向量和标记
X_digits = digits_train[np.arange(64)]         #得到64位特征值
y_digits = digits_train[64]                    #得到对应的标签

#3.2 PCA降维:降到2维
estimator = PCA(n_components=2)
X_pca=estimator.fit_transform(X_digits)

#3.3 显示这10类手写体数字图片经PCA压缩后的2维空间分布
def plot_pca_scatter():
    colors = [‘black‘, ‘blue‘, ‘purple‘, ‘yellow‘, ‘white‘, ‘red‘, ‘lime‘, ‘cyan‘, ‘orange‘, ‘gray‘]
    for i in xrange(len(colors)):
        px = X_pca[:, 0][y_digits.as_matrix() == i]
        py = X_pca[:, 1][y_digits.as_matrix() == i]
        plt.scatter(px, py, c=colors[i])
    plt.legend(np.arange(0, 10).astype(str))
    plt.xlabel(‘First Principal Component‘)
    plt.ylabel(‘Second Principal Component‘)
    plt.show()
plot_pca_scatter()

# 4.用SVM分别对原始空间的数据(64维)和降到20维的数据进行训练,预测

# 4.1 对训练数据/测试数据进行特征向量与分类标签的分离
X_train = digits_train[np.arange(64)]
y_train = digits_train[64]
X_test = digits_test[np.arange(64)]
y_test = digits_test[64]

#4.2 用SVM对64维数据进行进行训练
svc = LinearSVC()  # 初始化线性核的支持向量机的分类器
svc.fit(X_train,y_train)
y_pred = svc.predict(X_test)

#4.3 用SVM对20维数据进行进行训练
estimator = PCA(n_components=20)   # 使用PCA将原64维度图像压缩为20个维度
pca_X_train = estimator.fit_transform(X_train)   # 利用训练特征决定20个正交维度的方向,并转化原训练特征
pca_X_test = estimator.transform(X_test)

psc_svc = LinearSVC()
psc_svc.fit(pca_X_train,y_train)
pca_y_pred = psc_svc.predict(pca_X_test)

#5.获取结果报告
#输出用64维度训练的结果
print svc.score(X_test,y_test)
print classification_report(y_test,y_pred,target_names=np.arange(10).astype(str))

#输出用20维度训练的结果
print psc_svc.score(pca_X_test,y_test)
print classification_report(y_test,pca_y_pred,target_names=np.arange(10).astype(str))

运行结果:

1)将数据压缩到两维,在二维平面的可视化。

2)SVM对64维和20维数据的训练结果

0.9220923761825265
precision recall f1-score support

0 0.99 0.98 0.99 178
1 0.97 0.76 0.85 182
2 0.99 0.98 0.98 177
3 1.00 0.87 0.93 183
4 0.95 0.97 0.96 181
5 0.90 0.97 0.93 182
6 0.99 0.97 0.98 181
7 0.99 0.90 0.94 179
8 0.67 0.97 0.79 174
9 0.90 0.86 0.88 180

avg / total 0.94 0.92 0.92 1797

0.9248747913188647
precision recall f1-score support

0 0.97 0.96 0.96 178
1 0.88 0.90 0.89 182
2 0.96 0.99 0.97 177
3 0.99 0.91 0.95 183
4 0.92 0.96 0.94 181
5 0.87 0.96 0.91 182
6 0.98 0.97 0.98 181
7 0.98 0.89 0.93 179
8 0.91 0.83 0.86 174
9 0.83 0.88 0.85 180

avg / total 0.93 0.92 0.93 1797

结论:降维后的准确率降低,但却用了更少的维度。

3.PCA的优缺点

PCA算法的主要优点有:

1)仅仅需要以方差衡量信息量,不受数据集以外的因素影响。 

2)各主成分之间正交,可消除原始数据成分间的相互影响的因素。

3)计算方法简单,主要运算是特征值分解,易于实现。

PCA算法的主要缺点有:

1)主成分各个特征维度的含义具有一定的模糊性,不如原始样本特征的解释性强。

2)方差小的非主成分也可能含有对样本差异的重要信息,因降维丢弃可能对后续数据处理有影响。

原文地址:https://www.cnblogs.com/youngsea/p/9334773.html

时间: 2024-11-10 14:30:49

[python机器学习及实践(6)]Sklearn实现主成分分析(PCA)的相关文章

《Python机器学习及实践:从零开始通往Kaggle竞赛之路》

<Python 机器学习及实践–从零开始通往kaggle竞赛之路>很基础 主要介绍了Scikit-learn,顺带介绍了pandas.numpy.matplotlib.scipy. 本书代码基于python2.x.不过大部分可以通过修改print()来适应python3.5.x. 提供的代码默认使用 Jupyter Notebook,建议安装Anaconda3. 最好是到https://www.kaggle.com注册账号后,运行下第四章的代码,感受下. 监督学习: 2.1.1分类学习(Cla

Python机器学习及实践 课后小题

目录 第二章 2.3章末小结 @(Python机器学习及实践-----从零开始通往Kaggle竞赛之路) 第二章 2.3章末小结 1 机器学习模型按照使用的数据类型,可分为监督学习和无监督学习两大类. 监督学习主要包括分类和回归的模型. 分类:线性分类,支持向量机(SVM),朴素贝叶斯,k近邻,决策树,集成模型(随机森林(多个决策树)等). 回归:线性回归,支持向量机(SVM),k近邻,回归树,集成模型(随机森林(多个决策树)等). 无监督学习主要包括:数据聚类(k-means)和数据降维(主成

【机器学习】Sklearn库主成分分析PCA降维的运用实战

1.PCA分类介绍 在scikit-learn中,与PCA相关的类都在sklearn.decomposition包中.最常用的PCA类就是sklearn.decomposition.PCA. 原理:线性映射(或线性变换),简单的来说就是将高维空间数据投影到低维空间上,那么在数据分析上,我们是将数据的主成分(包含信息量大的维度)保留下来,忽略掉对数据描述不重要的成分.即将主成分维度组成的向量空间作为低维空间,将高维数据投影到这个空间上就完成了降维的工作. 除了PCA类以外,最常用的PCA相关类还有

PYTHON机器学习及实践pdf

下载地址:网盘下载 内容简介  · · · · · · 本书面向所有对机器学习与数据挖掘的实践及竞赛感兴趣的读者,从零开始,以Python编程语言为基础,在不涉及大量数学模型与复杂编程知识的前提下,逐步带领读者熟悉并且掌握当下最流行的机器学习.数据挖掘与自然语言处理工具,如Scikitlearn.NLTK.Pandas.gensim.XGBoost.Google Tensorflow等. 全书共分4章.第1章简介篇,介绍机器学习概念与Python编程知识:第2章基础篇,讲述如何使用Scikit

Python机器学习及实践 知识总结

机器学习中的监督学习的任务重点在于,根据已有的经验知识对未知样本的目标/标记进行预测. 根据目标预测变量的类型不同,我们把监督学习的任务大体分为分类学习与回归预测两类. 监督学习 任务的基本架构流程:1首先准备训练数据 可以是文本 图像 音频等:2然后抽取所需要的特征,形成特征向量:3接着,把这些特征向量连同对应的标记/目标一并送入学习算法中,训练出一个预测模型:4然后,采用同样的特征方法作用于新的测试数据,得到用于测试的数据的特征向量:5最后,使用预测模型对这些待预测的特征向量进行预测并得到结

Python机器学习及实践+从零开始通往Kaggle竞赛之路

内容简介 本书面向所有对机器学习与数据挖掘的实践及竞赛感兴趣的读者,从零开始,以Python编程语言为基础,在不涉及大量数学模型与复杂编程知识的前提下,逐步带领读者熟悉并且掌握当下最流行的机器学习.数据挖掘与自然语言处理工具,如Scikitlearn.NLTK.Pandas.gensim.XGBoost.Google Tensorflow等. 全书共分4章.第1章简介篇,介绍机器学习概念与Python编程知识:第2章基础篇,讲述如何使用Scikitlearn作为基础机器学习工具:第3章进阶篇

机器学习资料《分布式机器学习算法理论与实践》+《白话机器学习算法》+《Python机器学习基础教程》

机器学习正在迅速改变我们的世界.我们几乎每天都会读到机器学习如何改变日常的生活. 人工智能和大数据时代,解决最有挑战性问题的主流方案是分布式机器学习! <分布式机器学习:算法.理论与实践>电子书资料全面介绍分布式机器学习的现状,深入分析其中的核心技术问题,并且讨论该领域未来的发展方向. 我认为第3章到第8章是核心,讲解分布式机器学习的框架及其各个功能,分别针对其中的数据与模型划分模块.单机优化模块.通信模块.数据与模型聚合模块加以介绍.最有用的是第9章,学习由分布式机器学习框架中不同选项所组合

python机器学习-sklearn挖掘乳腺癌细胞

python机器学习-sklearn挖掘乳腺癌细胞( 博主亲自录制) https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campaign=commission&utm_source=cp-400000000398149&utm_medium=share 课程概述 Toby,持牌照金融公司担任模型验证专家,国内最大医药数据中心数据挖掘部门负责人!此课程讲述如何运用python的sklearn快速

python机器学习-sklearn挖掘乳腺癌细胞(三)

python机器学习-sklearn挖掘乳腺癌细胞( 博主亲自录制) 网易云观看地址 https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campaign=commission&utm_source=cp-400000000398149&utm_medium=share 乳腺癌细胞和正常细胞是有显著区别的 癌细胞半径更大,形状更加不规则,凹凸不平.我们可以用科学手段来区分正常细胞和癌细胞吗?答案