kmeans聚类手动实现-python版

本文详细介绍了KMeans聚类算法的原理和流程,通过Python手动实现该算法。利用鸢尾花数据集进行实验,展示了算法的运行过程和结果。实验表明,KMeans算法在合适的k值下能有效进行数据分组,但k值过大可能导致分类效果下降。
摘要由CSDN通过智能技术生成

聚类算法

是在没有给定划分类别的情况下,根据数据的相似度进行分组的一种方法,分组的原则是组内距离最小化而组间距离最大化。

K-means算法是典型的基于距离的非层次聚类算法,在最小化误差函数的基础上将数据划分为预定的K类别,采用距离作为相似性的评级指标,即认为两个对象的距离越近,其相似度越大。

kmeans流程

算法过程:

  1. 从N个样本数据中随机选取K个对象作为初始的聚类质心。
  2. 分别计算每个样本到各个聚类中心的距离,将对象分配到距离最近的聚类中。
  3. 所有对象分配完成之后,重新计算K个聚类的质心。
  4. 与前一次的K个聚类中心比较,如果发生变化,重复过程2,否则转过程5.
  5. 当质心不再发生变化时,停止聚类过程,并输出聚类结果。

数据集介绍

使用sklearn自带的鸢尾花数据集

from sklearn.datasets import load_iris
data = load_iris()

即可导入数据。

数据集中的特征包括:

print("鸢尾花数据集的返回值:\n", iris)
# 返回值是一个继承自字典的Bench
print("鸢尾花的特征值:\n", iris["data"])
print("鸢尾花的目标值:\n", iris.target)
print("鸢尾花特征的名字:\n", iris.feature_names)
print("鸢尾花目标值的名字:\n", iris.target_names)
print("鸢尾花的描述:\n", iris.DESCR)

我们这里只使用目标是和特征值,这个特征值经过print是一个四维向量。
鸢尾花的target只包括三种花,所以k=3时候理论上最佳。编写代码的时候将target一并写入数组进行组合,这样在聚类完成后进行验证分类的错误率来衡量算法好坏。

代码简介

代码除了调用数据集和划分数据集使用到了sklearn的库函数之外,其余全部使用python自带的list结构或set结构和numpy相关函数实现。

主函数

第一次随机选取核心,就取数据集的前k个分别作为中心


	def main(x,y,k,max_iter,interrupte_distance = 0):
		#x是数据集,y是标签,k是聚类数目,终止距离和最大迭代数目.
		#第一步初始化ak
		a=[]
		a_check = []#用于之后检查准确率
		for i in range(k):
			a.append([x.pop(0)])
			a_check.append([y.pop(0)])
		#初始化完了,来一遍第一次
		for i in range(len(x)):
			dist = []
			for num in range(k):
				dist.append(calc_distance(a[num][0],x[i]))
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值