两种细胞
本课属于 Coddy Machine Learning 学习旅程的“无监督学习”单元。第 51 课,共 51 课。
实验室测量了 569 个组织样本,每个样本有 30 项细胞测量数据。数量太多,无法绘图,也没人能看出其中的规律:
每个样本的诊断结果(良性或恶性)都封存在信封里。没有这些信息,细胞能把自己分成两类吗?
用 PCA 将 30 个测量值降维,对剩下的数据进行聚类,然后再打开信封,看看这些细胞聚得有多近。
挑战
困难程序会读取要保留的方差比例,该值至少为 0.7;起始代码会设置图表。
- 先进行缩放,再保留能达到该比例的最少组件。打印组件数量以及它们保留的方差比例。
- 使用 k-means 对这些组件进行聚类:k = 2,
n_init=10,random_state=0。 - 打开信封:按每个簇的大小从大到小,打印其中的诊断结果和多数诊断。然后打印一致率,也就是与各自簇的多数诊断相符的样本比例。
- 按簇绘制前两个组件的散点图,标签为
mostly benign或mostly malignant;显示图例并展示图表。
对于前 300 个样本,比例为 0.8 时:
Components for 80% of the variance: 5 (they keep 0.844)
Cluster of 175: 146 benign, 29 malignant, so mostly benign
Cluster of 125: 8 benign, 117 malignant, so mostly malignant
Agreement with the diagnosis: 0.877对应的图表:
接下来,Coddy 会描述你的图表。
亲手试试
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_breast_cancer
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
# 569 个组织样本,每个样本有 30 项细胞测量值
cancer = load_breast_cancer(as_frame=True)
cells = cancer.data
# 密封的信封:每个样本是良性还是恶性。最后再打开。
diagnosis = pd.Series(cancer.target_names[cancer.target])
# 要保留的方差比例,至少为 0.7
share = float(input())
fig, ax = plt.subplots()
ax.set_title("Cells on Two Components")
ax.set_xlabel("Component 1")
ax.set_ylabel("Component 2")
# 在下方编写你的代码
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
无监督学习中的所有课
自己练习: Python 在线编译器