网站要背代码?,wordpress搞笑,热门关键词,怎么做娱乐电玩网站1.理论知识 K-means算法#xff0c;又称为k均值算法。K-means算法中的k表示的是聚类为k个簇#xff0c;means代表取每一个聚类中数据值的均值作为该簇的中心#xff0c;或者称为质心#xff0c;即用每一个的类的质心对该簇进行描述。K-Means算法接受参数K#xff1b;然后将…1.理论知识 K-means算法又称为k均值算法。K-means算法中的k表示的是聚类为k个簇means代表取每一个聚类中数据值的均值作为该簇的中心或者称为质心即用每一个的类的质心对该簇进行描述。K-Means算法接受参数K然后将样本数据集划分为K个聚类。获得的聚类需要满足同一个聚类中的样本数据集相似度较高而不同聚类中的样本数据集相似度较小。 算法思想 以空间中K个点为中心进行聚类即先从样本集中随机选取 k个样本作为簇中心对最靠近他们的对象归类所有样本与这 k个“簇中心”的距离对于每一个样本将其划分到与其距离最近的“簇中心”所在的簇中。通过迭代的方法逐次更新各聚类中心的值直至得到最好的聚类结果。 2.算法流程 先从没有标签的元素集合A中随机取K个元素作为K个子集各自的质心。分别计算剩下的元素到K个子集质心的距离根据距离将元素分别划分到最近的子集。根据聚类结果重新计算质心(计算方法为子集中所有元素各个维度的算术平均数)将集合A中全部元素按照新的质心然后再重新聚类。重复第4步直到聚类结果不再发生变化。 3.算法流程图 4.参考代码
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from sklearn.cluster import KMeans
from sklearn.metrics import f1_score, accuracy_score, normalized_mutual_info_score, rand_score
from sklearn.preprocessing import LabelEncoder
from sklearn.decomposition import PCA# 数据保存在.csv文件中
iris pd.read_csv(dataset/Iris.csv, header0) # 鸢尾花数据集 Iris class3
# wine pd.read_csv(dataset/wine.csv) # 葡萄酒数据集 Wine class3
# seeds pd.read_csv(dataset/seeds.csv) # 小麦种子数据集 seeds class3
# wdbc pd.read_csv(dataset/wdbc.csv) # 威斯康星州乳腺癌数据集 Breast Cancer Wisconsin (Diagnostic) class2
# glass pd.read_csv(dataset/glass.csv) # 玻璃辨识数据集 Glass Identification class6df iris # 设置要读取的数据集columns list(df.columns) # 获取数据集的第一行第一行通常为特征名所以先取出
features columns[:len(columns) - 1] # 数据集的特征名去除了最后一列因为最后一列存放的是标签不是数据
dataset df[features] # 预处理之后的数据去除掉了第一行的数据因为其为特征名如果数据第一行不是特征名可跳过这一步
attributes len(df.columns) - 1 # 属性数量数据集维度
class_labels list(df[columns[-1]]) # 原始标签k 3# 这里已经知道了分3类其他分类这里的参数需要调试
model KMeans(n_clustersk)
# 训练模型
model.fit(dataset)
# 预测全部数据
label model.predict(dataset)
print(label)def clustering_indicators(labels_true, labels_pred):if type(labels_true[0]) ! int:labels_true LabelEncoder().fit_transform(df[columns[len(columns) - 1]]) # 如果数据集的标签为文本类型把文本标签转换为数字标签f_measure f1_score(labels_true, labels_pred, averagemacro) # F值accuracy accuracy_score(labels_true, labels_pred) # ACCnormalized_mutual_information normalized_mutual_info_score(labels_true, labels_pred) # NMIrand_index rand_score(labels_true, labels_pred) # RIreturn f_measure, accuracy, normalized_mutual_information, rand_indexF_measure, ACC, NMI, RI clustering_indicators(class_labels, label)
print(F_measure:, F_measure, ACC:, ACC, NMI, NMI, RI, RI)if attributes 2:dataset PCA(n_components2).fit_transform(dataset) # 如果属性数量大于2降维
# 打印出聚类散点图
plt.scatter(dataset[:, 0], dataset[:, 1], markero, cblack, s7) # 原图
plt.show()
colors np.array([red, blue, green, orange, purple, cyan, magenta, beige, hotpink, #88c999])
maker [*, , x, D, 8, s]
# 循换打印k个簇每个簇使用不同的颜色
for i in range(k):plt.scatter(dataset[np.nonzero(label i), 0],dataset[np.nonzero(label i), 1],ccolors[i],s100,markermaker[i % 5])
plt.show()5.测试数据
鸢尾花数据集你需要到网络上下载
表3.1K-Means算法输入的数据 sepal length sepal width petal length petal width class 5.1 3.5 1.4 0.2 Iris-setosa 4.9 3 1.4 0.2 Iris-setosa … … … … … 4.6 3.1 1.5 0.2 Iris-setosa *输入的数据用于鸢尾花的类型判断同时K设置为3。 6.实验结果与分析 图3.2鸢尾花数据集 图3.3 鸢尾花数据k-means分类后实验结果 7.算法优缺点
优点 算法简单,容易实现 缺点 对K个初始质心的选择比较敏感容易陷入局部最小值。K值是用户指定的而用户很难去选择一个合适的完美的K值。又因为没有标签很难进行评估。对于一些复杂的数据分布就无法进行正确的聚类。 其他实验我是芒果酱点一个关注吧(σ′▽‵)′▽‵)σ k-Means聚类算法 HNUST【数据分析技术】(2024)-CSDN博客PageRank Web页面分级算法 HNUST【数据分析技术】(2024)-CSDN博客KNN分类算法 HNUST【数据分析技术】(2024)-CSDN博客Apriori关联规则算法 HNUST【数据分析技术】(2024)-CSDN博客