用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'])

img

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)

img

标准化之前和之后的数组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'])

img

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

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

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

img

沿着列连接数据帧以在绘图之前生成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()

img

解释差异

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

pca.explained_variance_ratio_
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值