当前位置:   article > 正文

机器学习 - 聚类 - k_means

机器学习 - 聚类 - k_means

一、下载数据集

https://archive.ics.uci.edu/ml/datasets/ 这个库提供了大量的机器学习数据集

Iris数据集:这是一个经典的小型数据集,包含了150个样本,分为三类,每类50个样本。每个样本有四个特征,分别是花萼长度、花萼宽度、花瓣长度和花瓣宽度。这个数据集非常适合初学者用来理解和实践聚类算法 。

二、使用pandas对数据进行处理

因为下载的数据是 .data为后缀名,要转换成 .csv文件,那么就需要使用数据分析的包,pandas。

 第一次使用需要下载: pip install pandas

  1. import pandas as pd
  2. data_file_path = 'iris.data'
  3. csv_file_path = 'iris.csv'
  4. # 读取.data文件到pandas DataFrame
  5. # 注意:这里的分隔符是逗号,需要根据实际情况进行调整
  6. df = pd.read_csv(data_file_path, sep=',')
  7. # 假设你需要进行一些数据清洗和转换
  8. # 例如,重命名列名
  9. df.columns = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'species']
  10. # 根据你的.data文件内容替换这些列名
  11. # 将清洗后的DataFrame保存为.csv文件
  12. df.to_csv(csv_file_path, index=False) # index=False表示不保存行索引到CSV文件中
  13. # 打印聚类结果的前几行
  14. print(iris_df.head())

三、实现 k_means 聚类算法

 代码实现

  1. # 加载CSV文件
  2. iris_df = pd.read_csv('iris.csv')
  3. # 假设CSV文件中有'sepal_length', 'sepal_width', 'petal_length', 'petal_width'和'species'这些列
  4. # 我们将使用前四个特征列进行聚类,'species'列用于比较聚类结果(如果需要的话)
  5. X = iris_df[['sepal_length', 'sepal_width', 'petal_length', 'petal_width']]
  6. # 设置KMeans聚类器,这里我们假设类别数为3(与iris数据集的实际类别数相同)
  7. kmeans = KMeans(n_clusters=3, random_state=42)
  8. # 对数据进行聚类
  9. kmeans.fit(X)
  10. # 获取聚类标签
  11. labels = kmeans.labels_
  12. # 将聚类标签添加到原始DataFrame中
  13. iris_df['cluster'] = labels
  14. # 打印聚类结果的前几行
  15. print(iris_df.head())
  16. # 可视化聚类结果(仅适用于2D或3D数据)
  17. # 这里我们使用前两个特征进行简单的2D散点图可视化
  18. plt.scatter(X['sepal_length'], X['sepal_width'], c=labels, cmap='viridis')
  19. centers = kmeans.cluster_centers_
  20. plt.scatter(centers[:, 0], centers[:, 1], c='black', s=200, alpha=0.5)
  21. plt.xlabel('Sepal length')
  22. plt.ylabel('Sepal width')
  23. plt.title('KMeans Clustering')
  24. plt.show()

 通过matplotlib实现数据可视化

 四、sc聚类评价指标

首先,你需要加载iris数据集,然后应用聚类算法(比如KMeans),最后计算并打印轮廓系数。

  1. from sklearn import datasets
  2. from sklearn.cluster import KMeans
  3. from sklearn.metrics import silhouette_score
  4. from sklearn.preprocessing import StandardScaler
  5. import matplotlib.pyplot as plt
  6. # 加载iris数据集
  7. iris = datasets.load_iris()
  8. X = iris.data
  9. y = iris.target # 真实标签,对于聚类分析我们实际上不需要它,但为了评估可以保留
  10. # 数据标准化
  11. scaler = StandardScaler()
  12. X_scaled = scaler.fit_transform(X)
  13. # 使用KMeans进行聚类
  14. # 这里我们假设不知道真实类别数,因此可以尝试不同的k值来找到最佳的簇数
  15. # 但在本例中,为了简单起见,我们使用iris数据集的实际类别数3
  16. true_k = 3
  17. kmeans = KMeans(n_clusters=true_k, random_state=42)
  18. kmeans.fit(X_scaled)
  19. labels = kmeans.labels_
  20. # 计算轮廓系数
  21. silhouette_avg = silhouette_score(X_scaled, labels)
  22. print("The average silhouette_score is :", silhouette_avg)
  23. # 可视化聚类结果(对于二维或三维数据)
  24. # 由于iris数据集有四维特征,我们不能直接可视化。但是,我们可以选择两个特征进行可视化。
  25. plt.scatter(X_scaled[:, 0], X_scaled[:, 1], c=labels, cmap='viridis')
  26. centers = kmeans.cluster_centers_
  27. plt.scatter(centers[:, 0], centers[:, 1], c='black', s=200, alpha=0.5)
  28. plt.title("KMeans Clustering of Iris Dataset")
  29. plt.xlabel("Sepal length")
  30. plt.ylabel("Sepal width")
  31. plt.show()
  32. # 注意:这里我们只选择了前两个特征进行可视化,因此可能无法完全反映聚类的效果。
  33. # 在实际分析中,你应该考虑所有特征,并可能需要使用其他评估方法来全面评估聚类结果。

 结果可视化

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号