楼主: 时光人
1853 3

[网帖精选] python机器学习: 将PCA应用于cancer数据集并可视化 [推广有奖]

  • 3关注
  • 34粉丝

院士

23%

还不是VIP/贵宾

-

威望
1
论坛币
26907 个
通用积分
429.0303
学术水平
95 点
热心指数
109 点
信用等级
91 点
经验
39960 点
帖子
1629
精华
3
在线时间
579 小时
注册时间
2019-2-25
最后登录
2023-4-26

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

CDA网校:数据科学、人工智能从业者的在线大学。

数据科学(Python/R/Julia)数据分析、机器学习、深度学习

PCA最常见的应用之一就是将高维数据可视化,它可以将具有两个及以上特征的数据进行可视化,下面我们利用PCA来对cancer数据集进行可视化(良性肿瘤和恶性肿瘤),不使用PCA时可视化只能一个一个去对比其中的数据,其代码如下:


  1. import numpy as np

  2. from sklearn.datasets import load_breast_cancer

  3. import matplotlib.pyplot as plt

  4. cancer = load_breast_cancer

  5. fig, axes = plt.subplots(15, 2, figsize=(10, 20))

  6. malignant = cancer.data[cancer.target == 0]

  7. benign = cancer.data[cancer.target == 1]

  8. ax = axes.ravel

  9. for i in range(30):

  10. _,bins = np.histogram(cancer.data[:, i], bins=50)

  11. ax[i].hist(malignant[:, i], bins=bins, color=mglearn.cm3(0), alpha=.5)

  12. ax[i].hist(benign[:, i], bins=bins, color=mglearn.cm3(2), alpha=.5)

  13. ax[i].set_title(cancer.feature_names[i])

  14. ax[i].set_yticks

  15. ax[0].set_xlabel("feature magnitude")

  16. ax[0].set_ylabel("Frenguency")

  17. ax[0].legend(["malignant", "benign"], loc="best")

  18. fig.tight_layout
复制代码

运行后结果如下:

乳腺癌数据集中的类别直方图1

乳腺癌数据集中的类别直方图2

乳腺癌数据集中的类别直方图3

这里我们为每个特征创建一个直方图,计算具有某一特征的数据在特定范围内(叫做bin)的出现频率,。每张图都包含两个直方图,一个是良性类别(蓝色),一个是恶性类别,这样我们可以了解每个特征在两个类别中的分布情况,也可以猜测哪些特征能够更好地区分恶性和良性样本。如:“smoothness error”特征似乎没有什么信息量,因为两个直方图大部分都重叠在一起, 而“worst concave points”特征看起来信息量比较大,因为两个直方图的交集很小。

但是,这种图无法向我们展示变量之间的相互作用以及这种相互作用与类别之间的关系。利用PCA,我们可以获取到主要的相互作用,并得到稍微完整的图像,我们可以找到前两个主要成分,并在这个新的二维空间中用散点图来将数据可视化,其代码如下:

  1. #利用PCA之前,我们先利用StandardScaler对数据进行缩放

  2. from sklearn.preprocessing import StandardScaler

  3. scaler = StandardScaler

  4. x_scaled = scaler.fit_transform(cancer.data)

  5. #学习并应用PCA变换与应用预处理变换类似,我们将PCA对象实例化,然后调用fit方法找到主成分,在调用transform

  6. #来旋转并降维。默认情况下,PCA金旋转并移动数据,但保留所有的主要成分,为了降低数据维度,我们需要在#创建

  7. #PCA对象时指定想要保留的主成分个数

  8. from sklearn.decomposition import PCA

  9. #保留数据的前两个主成分

  10. pca = PCA(n_components=2)

  11. #对乳腺癌数据拟合PCA模型

  12. pca.fit(x_scaled)

  13. #将数据变换到前两个主成分方向

  14. x_pca = pca.transform(x_scaled)

  15. print("original shape: {}".format(str(x_scaled.shape)))

  16. print("reduced shape: {}".format(str(x_pca.shape)))

  17. #现在我们利用主成分作图

  18. #对第一个和第二个主成分作图,按照类别作色

  19. plt.figure(figsize=(8,8))

  20. mglearn.discrete_scatter(x_pca[:,0], x_pca[:, 1], cancer.target)

  21. plt.legend(cancer.target_names, loc="best")

  22. plt.gca.set_aspect("equal")

  23. plt.xlabel("fist principle component")

  24. plt.ylabel("Second principle component")

  25. 写完代码后运行,其结果如下:

  26. original shape: (569, 30)

  27. reduced shape: (569, 2)
复制代码

这里需要注意的是:PCA是一种无监督方法,在寻找旋转方向时没有用到任何类别信息,它只是观察数据中的相关性,并且将利用第一、二主成分的关系,绘制成图,由图可以看出,恶性点比良性点更加的分散。

PCA的一个缺点在于,通常不容易对图中的两个轴进行解释。主成分对应于原始数据中的方向,所以他们是原始特征的组合。但是这些组合往往非常复杂,这一点我们很快就会看到。在拟合过程中,主成分保存在PCA对象的components_.shape属性中,下节我们将对其进行讲解。


关注“AIU人工智能”公众号,回复“白皮书”获取数据分析、大数据、人工智能行业白皮书及更多精选学习资料!


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Cancer python 机器学习 ance 可视化

沙发
gudure 学生认证  发表于 2019-10-15 10:30:34 |只看作者 |坛友微信交流群

使用道具

藤椅
jinlu310 在职认证  发表于 2019-10-15 10:31:20 |只看作者 |坛友微信交流群
感谢分享

使用道具

板凳
东方祥 企业认证  发表于 2019-10-15 10:40:57 |只看作者 |坛友微信交流群
PCA是一种无监督方法

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-5 03:07