美文网首页
用sklearn 实践PCA降维

用sklearn 实践PCA降维

作者: 一百万个不确定 | 来源:发表于2019-03-25 17:05 被阅读0次

用sklearn 实践PCA

原文地址:

https://towardsdatascience.com/pca-using-python-scikit-learn-e653f8989e60

对于许多机器学习应用程序,它有助于可视化你的数据.可视化2或3维数据并不具有挑战性.但是,即使本教程的这一部分中使用的Iris数据集也是4维的.你可以使用PCA将4维数据缩减为2维或3维,以便你可以绘制并希望更好地理解数据.

加载Iris数据集

Iris数据集是scikit-learn附带的数据集之一,不需要从某个外部网站下载任何文件.下面的代码将加载iris数据集.

#将pandas导入为pd
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
#load dataset into Pandas DataFrame 
df = pd.read_csv(url,names = ['sepal length','sepal width','petal length','petal width','target'])
1.png

Original Pandas df (features + target)

标准化数据

PCA受比例影响,因此你需要在应用PCA之前缩放数据中的功能.使用StandardScaler可帮助你将数据集的特征标准化为单位比例(均值= 0和方差= 1),这是许多机器学习算法的最佳性能要求.如果你希望看到不会缩放数据的负面影响,scikit-learn会有一节介绍不标准化数据效果.

#来自sklearn.preprocessing导入StandardScaler
features = ['sepal length', 'sepal width', 'petal length', 'petal width']
#分离出特征
x = df.loc[:,features].values
#分离目标
y = df.loc[:,['target']].values
#标准化特征
x = StandardScaler().fit_transform(x)
2.png

标准化之前和之后的数组x(由pandas数据帧可视化)

PCA投影到2D

原始数据有4列(萼片长度,萼片宽度,花瓣长度和花瓣宽度).在本节中,代码将4维原始数据投影到2维.我应该注意,在减少维数之后,通常没有为每个主成分分配特定含义.新组件只是变体的两个主要维度.

#来自sklearn.decomposition导入PCA
pca = PCA(n_components = 2)
principalComponents = pca.fit_transform(x)
principalDf = pd.DataFrame(data = principalComponents 
             ,columns = ['principal component 1','principal component 2'])
3.png

PCA并保持前两大主要组成部分

finalDf = pd.concat([principalDf,df [['target']]],axis = 1)

沿axis = 1连接DataFrame. finalDf是最终的DataFrame.

4.png

沿着列连接数据帧以在绘图之前生成finalDf

可视化2D投影

本节仅绘制二维数据.请注意下图中的类似乎彼此分开.

import matplotlib.pyplot as plt
fig = plt.figure(figsize = (8,8))
ax = fig.add_subplot(1,1,1) 
ax.set_xlabel('Principal Component 1', fontsize = 15)
ax.set_ylabel('Principal Component 2', fontsize = 15)
ax.set_title('2 component PCA', fontsize = 20)
targets = ['Iris-setosa', 'Iris-versicolor', 'Iris-virginica']
colors = ['r', 'g', 'b']
for target, color in zip(targets,colors):
    indicesToKeep = finalDf['target'] == target
    ax.scatter(finalDf.loc[indicesToKeep, 'principal component 1']
               , finalDf.loc[indicesToKeep, 'principal component 2']
               , c = color
               , s = 50)
ax.legend(targets)
ax.grid()
plt.show()
5.png

解释差异

解释的方差告诉你可以将多少信息(方差)归因于每个主要组件.这很重要,因为当你可以将4维空间转换为2维空间时,在执行此操作时会丢失一些方差(信息).通过使用属性explained_variance_ratio_,可以看到的是,第一主成分含有方差的72.77%和第二主成分含有方差的23.03%.这两个组件一起包含95.80%的信息.

pca.explained_variance_ratio_

array([ 0.72770452, 0.23030523])

相关文章

  • 用sklearn 实践PCA降维

    用sklearn 实践PCA 原文地址: https://towardsdatascience.com/pca-u...

  • Sklearn中的降维究竟是如何实现的

    sklearn中的降维算法 1. PCA与SVD sklearn中降维算法都被包括在模块decomposition...

  • SKlearn - PCA数据降维

    PCA是无监督数据降维方式,目的是将一个高维数据集转换为一个低维数据集。如今我们的数据集往往有成百上千维的特征,但...

  • 机器学习之sklearn中的降维算法

    1. PCA与SVD sklearn中降维算法都被包括在模块decomposition中,这个模块本质是一个矩阵分...

  • PCA

    PCA降维 一、算法原理 降维算法 还原算法 二、算法实现 三、scikit-learn PCA 四、PCA降噪 ...

  • LDA有标签数据降维

    之前无标签数据降维PCA,那么像下图带有标签数据,如果用PCA降维将会投影到v轴上,这个投影方差最大,数据将变成不...

  • 【R图千言】主成分分析之3D绘图

    主成分分析 (PCA, principal component analysis)是一种数学降维方法。 PCA降维...

  • numpy实现鸢尾花数据集PCA降维

    PCA降维过程 在前面的一篇博客中我已经从数学角度解释了PCA降维的原理,我们从中也可以得到PCA降维的过程1)将...

  • sklearn调包侠之PCA降维

    PCA PCA(主成分分析),它是一种维度约减算法,即把高维度数据在损失最小的情况下转换为低纬度数据的算法。 实战...

  • 学习笔记:sklearn-PCA降维

    PCA降维使用 看看降维后特征向量的信息量 查看降维后特征的信息量占原特征信息量的比例 用极大似然估计选取n_co...

网友评论

      本文标题:用sklearn 实践PCA降维

      本文链接:https://www.haomeiwen.com/subject/owebvqtx.html