机器学习 实验七

复制代码
# 导入必要的库
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score, accuracy_score, adjusted_rand_score
import numpy as np

# (1)加载数据集并划分数据集为训练集和测试集
iris = datasets.load_iris() # 加载 iris 数据集
X = iris.data # 特征值
y = iris.target # 目标值(仅用于最终评估)

# 使用train_test_split函数进行数据集分割,留出1/3的样本作为测试集
# stratify=y 参数确保训练集和测试集中各类别的比例相同(同分布取样)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=1/3.0, random_state=42, stratify=y)

# (2)初始化 K 均值聚类算法并训练,类别数为 3
kmeans = KMeans(n_clusters=3, random_state=42) # 创建 KMeans 实例,指定类别数为 3
kmeans.fit(X_train) # 使用训练集训练 KMeans 模型

# 计算轮廓系数以评估聚类质量
silhouette_avg = silhouette_score(X_train, kmeans.labels_)
print(f"训练集上的平均轮廓系数: {silhouette_avg}")

# (3)使用测试集评估模型性能
y_pred = kmeans.predict(X_test) # 使用测试集预测聚类标签

# 因为聚类是无监督的,所以需要调整随机指数 (Adjusted Rand Index, ARI) 来比较两个分配之间的相似性
ari = adjusted_rand_score(y_test, y_pred)
print(f"测试集上的调整后的兰德指数 (ARI): {ari}")

# (4)为了方便理解,我们还可以尝试计算一个简单的准确度分数,但要注意这个准确度可能不是最准确的评估指标
# 因为 K 均值聚类的标签是任意的,它们不一定与原始分类标签相匹配。
# 这里我们只是简单地用作参考。
accuracy = accuracy_score(y_test, y_pred)
print(f"测试集上的简单准确度分数 (仅供参考): {accuracy}")
复制代码

 

posted @   财神给你送元宝  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示