乐趣区

关于人工智能:使用PCA可视化数据

作者 |Conor O’Sullivan
编译 |VK
起源 |Towards Data Science

主成分剖析(PCA)是一个很好的工具,能够用来升高特色空间的维数。PCA 的显著长处是它能产生不相干的特色,并能进步模型的性能。

它能够帮忙你深刻理解数据的分类能力。在本文中,我将带你理解如何应用 PCA。将提供 Python 代码,残缺的我的项目能够在 GitHub 链接:https://github.com/conorosull…。

什么是 PCA

咱们先温习一下这个实践。如果你想确切理解 PCA 是如何工作的,咱们不会具体介绍,网上有大量学习资源。

PCA 用于缩小用于训练模型的特色的数量。它通过从多个特色结构所谓的主成分(PC)来实现这一点。

PC 的结构形式使得 PC1 方向在最大变动上尽可能地解释了你的特色。而后 PC2 在最大变动上尽可能地解释残余特色,等等……PC1 和 PC2 通常能够解释总体特色变动中的很大一部分。

另一种思考办法是,前两个 PC 能够很好地概括大部分特色。这很重要,因为正如咱们将看到的,它容许咱们在二维立体上可视化数据的分类能力。

数据集

让咱们来看看一个理论的例子。咱们将应用 PCA 来摸索乳腺癌数据集(http://archive.ics.uci.edu/ml…,咱们应用上面的代码导入该数据集。

import numpy as np
import pandas as pd
from sklearn.datasets import load_breast_cancer
cancer = load_breast_cancer()

data = pd.DataFrame(cancer['data'],columns=cancer['feature_names'])
data['y'] = cancer['target']

指标变量是乳腺癌检测的后果,恶性或良性。每次测试,都要取多个癌细胞。而后从每个癌细胞中采取 10 种不同的措施。这些测量包含细胞半径和细胞对称性。最初,为了失去特征值,咱们计算了每个度量值的平均值、标准误差和最大值(不太好的),这样咱们总共失去 30 个特征值。

在图中,咱们仔细观察了其中两个特色——细胞的均匀对称性 (Benign) 和最差平滑度(worst smoothness)。

在图中,咱们看到这两个特色能够帮忙辨别这两个类。那就是良性肿瘤往往更为对称和润滑。然而,依然有很多重叠,所以仅仅应用这些特色的模型不会做得很好。

咱们能够创立这样的图来理解每个特色的预测能力。然而有 30 个特色,这意味着有相当多的图要剖析,他们也没有通知咱们如何作为一个整体来预测数据集。这咱们能够引入 PCA。

PCA- 整个数据集

首先,咱们对整个数据集进行主成分剖析。咱们应用上面的代码。

from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA

#标准化
scaler = StandardScaler()
scaler.fit(data)
scaled = scaler.transform(data)

#PCA
pca = PCA().fit(scaled)

pc = pca.transform(scaled)
pc1 = pc[:,0]
pc2 = pc[:,1]

#画出主成分
plt.figure(figsize=(10,10))

colour = ['#ff2121' if y == 1 else '#2176ff' for y in data['y']]
plt.scatter(pc1,pc2 ,c=colour,edgecolors='#000000')
plt.ylabel("Glucose",size=20)
plt.xlabel('Age',size=20)
plt.yticks(size=12)
plt.xticks(size=12)
plt.xlabel('PC1')

咱们首先标准化特色,使它们的平均值为 0,方差为 1。这一点很重要,因为主成分剖析通过最大化主成分剖析所解释的方差来工作。

一些特色因为其没有通过标准化天然会有更高的方差。例如,以厘米为单位测量的间隔将比以公里为单位测量的雷同间隔具备更高的方差。在不缩放特色的状况下,主成分剖析将被那些高方差特色“吸引”。

缩放实现后,咱们会拟合 PCA 模型,并将咱们的特色转换为 PC。因为咱们有 30 个特色,咱们最多能够有 30 个 PC。然而,对于可视化,咱们只对前两个感兴趣。而后应用 PC1 和 PC2 创立如图所示的散点图。

在图 2 中,咱们能够看到两个不同的簇。尽管依然有一些重叠,然而簇比咱们在之前的图中要清晰得多。这通知咱们,作为一个整体,这个数据集在辨别恶性肿瘤和良性肿瘤方面会做得很好。

咱们还应该思考到,咱们只关注前两个 PC,因而并不是所有特色的变动都被捕捉。这意味着应用所有特色训练的模型依然能够正确预测异样值(即聚类中不分明的点)。

在这一点上,咱们应该提到这种办法的一个正告。咱们提到 PC1 和 PC2 能够解释你的特色中很大一部分的差别。然而,这并不总是真的。在这种状况下,这些 PC 能够被认为是对你的特色的谬误总结。这意味着,即便你的数据可能很好地拆散,你也可能无奈取得如上图所示的清晰的簇。

咱们能够通过查看 PCA-scree 图来确定。咱们应用上面的代码为这个剖析创立 scree 图,

var = pca.explained_variance_[0:10] #percentage of variance explained
labels = ['PC1','PC2','PC3','PC4','PC5','PC6','PC7','PC8','PC9','PC10']

plt.figure(figsize=(15,7))
plt.bar(labels,var,)
plt.xlabel('Pricipal Component')
plt.ylabel('Proportion of Variance Explained')

它实质上是一个柱状图,其中每个柱状图的高度是相干 PC 解释的方差百分比。咱们看到,总共只有大概 20% 的特色方差是由 PC1 和 PC2 解释的。即便只解释了 20%,咱们依然失去两个不同的集群。这强调了数据的预测能力。

PCA- 特色组

到目前为止,咱们曾经应用主成分剖析来理解整个特色集对数据的分类成果。咱们也能够应用这个过程来比拟不同的特色组。例如,假如咱们想晓得细胞的对称性和光滑性是否比细胞的周长和凸起性更好。

group_1 = ['mean symmetry', 'symmetry error','worst symmetry',
'mean smoothness','smoothness error','worst smoothness']
        
group_2 = ['mean perimeter','perimeter error','worst perimeter', 
'mean concavity','concavity error','worst concavity']

咱们首先创立两组特色。第一组蕴含所有与对称性和光滑性无关的特色,第二组蕴含所有与周长和凸起性无关的特色。而后,除了应用这两组特色外,咱们以与之前雷同的形式进行主成分剖析。这个过程的后果如下图所示。

咱们能够看到,对于第一组,有一些拆散,但依然有很多重叠。相比之下,第 2 组有两个不同的簇。因而,从这些图中,咱们能够预期第 2 组的特色(即细胞周长和凸起)将是更好的预测肿瘤是恶性还是良性的指标。

最终,这将意味着应用组 2 中的特色的模型比应用组 1 中的特色的模型具备更高的精度。当初,让咱们来验证这个假如。

咱们应用上面的代码来训练一个应用两组特色的 logistic 回归模型。在每种状况下,咱们应用 70% 的数据来训练模型,剩下的 30% 用来测试模型。

from sklearn.model_selection import train_test_split
import sklearn.metrics as metric
import statsmodels.api as sm

for i,g in enumerate(group):

    x = data[g]
    x = sm.add_constant(x)
    y = data['y']
    x_train, x_test, y_train, y_test = train_test_split(x,y,test_size=0.3, 
                                                        random_state = 101)

    model = sm.Logit(y_train,x_train).fit() #fit logistic regression model

    predictions = np.around(model.predict(x_test)) 
    accuracy = metric.accuracy_score(y_test,predictions)
    
    print("Accuracy of Group {}: {}".format(i+1,accuracy))

第一组测试集的准确率为 74%,相比之下,第二组的准确率为 97%。因而,组 2 的特色显著是更好的预测因子,这正是咱们从主成分剖析后果中所看到的。

最初,咱们将理解如何在开始建模之前应用 PCA 来加深对数据的了解。理解哪些特色是可预测的,将在特征选择方面给你带来劣势。此外,查看特色的总体分类能力将使你理解预期的分类精度。

如前所述,这种办法并不能齐全证实,因而应与其余数据勘探图和汇总统计一起应用。一般来说,在开始建模之前,最好从尽可能多的不同角度查看数据。

原文链接:https://towardsdatascience.co…

欢送关注磐创 AI 博客站:
http://panchuang.net/

sklearn 机器学习中文官网文档:
http://sklearn123.com/

欢送关注磐创博客资源汇总站:
http://docs.panchuang.net/

退出移动版