怎么用sklearn中kmeans算法处理乳腺癌数据集?

img


在sklearn上复制了代码后该怎么写才能处理乳腺癌数据集?

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这篇文章:【python sklearn】kmeans算法运用 也许有你想要的答案,你可以看看
  • 除此之外, 这篇博客: 使用sklearn进行kmeans实战中的 数据 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    我们知道,kmeans是无监督,没有标签。所以,我们的数据如下:

    import numpy as np
    X = np.array([[1, 2], [1, 4], [1, 0],
               [10, 2], [10, 4], [10, 0]])
    

    6个数据点,每一个点是二维的。我们使用kmeas进行聚类。

  • 以下回答来自chatgpt:

    使用sklearn中的kmeans算法处理乳腺癌数据集

    1. 导包和数据加载

    import numpy as np
    import pandas as pd
    from sklearn.cluster import KMeans
    from sklearn.datasets import load_breast_cancer
    
    # 加载数据集
    cancer = load_breast_cancer()
    
    # 获取特征矩阵
    X = cancer.data
    
    # 获取标签数组
    y = cancer.target
    

    2. 特征归一化

    由于KMeans算法是基于距离计算的聚类算法,因此需要将特征进行归一化处理,以避免某些特征的值对聚类结果有过大的影响。

    # 导包
    from sklearn.preprocessing import StandardScaler
    
    # 创建Scaler对象
    scaler = StandardScaler()
    
    # 对数据进行归一化处理
    X_normalized = scaler.fit_transform(X)
    

    3. 使用KMeans算法进行聚类

    # 创建KMeans对象
    kmeans = KMeans(n_clusters=2, random_state=0)
    
    # 对数据进行聚类
    kmeans.fit(X_normalized)
    
    # 获取聚类结果标签
    labels = kmeans.labels_
    

    4. 评估聚类结果

    4.1 使用轮廓系数评估聚类结果

    # 导包
    from sklearn.metrics import silhouette_score
    
    # 计算轮廓系数
    score = silhouette_score(X_normalized, labels)
    
    # 打印轮廓系数
    print("轮廓系数: ", score)
    

    4.2 使用ARI评估聚类结果

    ARI(Adjusted Rand Index)是一种用于度量两个聚类结果之间相似度的指标,其取值范围为[-1, 1],越接近1则说明两个聚类结果越相似,越接近-1则说明两个聚类结果越不相似。

    # 导包
    from sklearn.metrics import adjusted_rand_score
    
    # 计算ARI值
    ari = adjusted_rand_score(y, labels)
    
    # 打印ARI值
    print("ARI值: ", ari)
    

    5. 结果可视化

    由于乳腺癌数据集是一个30维的数据集,不方便直接进行可视化。因此,可以考虑使用PCA进行降维,将数据集转化为二维数据,方便进行可视化。

    # 导包
    from sklearn.decomposition import PCA
    import matplotlib.pyplot as plt
    
    # 创建PCA对象
    pca = PCA(n_components=2)
    
    # 对数据进行降维
    X_pca = pca.fit_transform(X_normalized)
    
    # 可视化聚类结果
    plt.scatter(X_pca[:, 0], X_pca[:, 1], c=labels)
    plt.show()
    

    其中,颜色不同的点表示聚类结果不同。可以看出,KMeans算法能够对乳腺癌数据集进行很好的聚类。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
from sklearn.datasets import load_breast_cancer

from sklearn.neighbors import KNeighborsClassifier

from sklearn.model_selection import train_test_split

#对数据进行处理
data_breast=load_breast_cancer()
#提取数据的特征
X=data_breast['data']
#提取数据的标签
y=data_breast['target']
#划分数据集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

#数据归一化
from sklearn.preprocessing import MinMaxScaler 
mms=MinMaxScaler()
mms.fit(X_train)
X_train=mms.transform(X_train)
X_test=mms.transform(X_test)

#数据交叉验证
from sklearn.model_selection import cross_val_score as csv
from sklearn.neighbors import KNeighborsClassifier
L=[]
for i in range (1,21):
    k=i
    knn=KNeighborsClassifier(n_neighbors=k,weights='distance')
    result=csv(knn,X_train,y_train,cv=5)
    L.append((k,result.mean(),result.var()))
L

# 画图观察交叉验证得到的k
a=pd.DataFrame(L)
a.columns=['k','平均准确率','方差']
plt.figure(figsize=(8,6),dpi=100)
plt.plot(a.k,a.平均准确率)
plt.plot(a.k,a.平均准确率+2*a.方差,linestyle='--',color='r')
plt.plot(a.k,a.平均准确率-2*a.方差,linestyle='--',color='r')
plt.xticks(a.k)
plt.xlabel('k')
plt.ylabel('平均准确率')
plt.title('带距离惩罚的5折交叉验证学习曲线')

https://blog.csdn.net/qq_39615254/article/details/104250242