0
点赞
收藏
分享

微信扫一扫

动态规划相关题目

Sikj_6590 10小时前 阅读 2

一、下载数据集

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

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

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

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

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

import pandas as pd


data_file_path = 'iris.data'
csv_file_path = 'iris.csv'

# 读取.data文件到pandas DataFrame
# 注意:这里的分隔符是逗号,需要根据实际情况进行调整
df = pd.read_csv(data_file_path, sep=',')

# 假设你需要进行一些数据清洗和转换
# 例如,重命名列名
df.columns = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'species']  
# 根据你的.data文件内容替换这些列名

# 将清洗后的DataFrame保存为.csv文件
df.to_csv(csv_file_path, index=False)  # index=False表示不保存行索引到CSV文件中


# 打印聚类结果的前几行
print(iris_df.head())

三、实现 k_means 聚类算法

 代码实现

# 加载CSV文件
iris_df = pd.read_csv('iris.csv')

# 假设CSV文件中有'sepal_length', 'sepal_width', 'petal_length', 'petal_width'和'species'这些列
# 我们将使用前四个特征列进行聚类,'species'列用于比较聚类结果(如果需要的话)
X = iris_df[['sepal_length', 'sepal_width', 'petal_length', 'petal_width']]

# 设置KMeans聚类器,这里我们假设类别数为3(与iris数据集的实际类别数相同)
kmeans = KMeans(n_clusters=3, random_state=42)

# 对数据进行聚类
kmeans.fit(X)

# 获取聚类标签
labels = kmeans.labels_

# 将聚类标签添加到原始DataFrame中
iris_df['cluster'] = labels

# 打印聚类结果的前几行
print(iris_df.head())

# 可视化聚类结果(仅适用于2D或3D数据)
# 这里我们使用前两个特征进行简单的2D散点图可视化
plt.scatter(X['sepal_length'], X['sepal_width'], c=labels, cmap='viridis')
centers = kmeans.cluster_centers_
plt.scatter(centers[:, 0], centers[:, 1], c='black', s=200, alpha=0.5)
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.title('KMeans Clustering')
plt.show()

 通过matplotlib实现数据可视化

 四、sc聚类评价指标

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

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

 结果可视化

举报

相关推荐

0 条评论