1.需要的依赖
import xlrd
import numpy as np
from matplotlib import pyplot as plt
import random
import math
2.数据初始化
这个方案只需要传入三个参数即可
一个是数据维度——dimension
一个是聚类的数量——K
一个是excel表格路径——path
使得循环停下来的标准有两个
最大迭代次数——max_test,直接定为100次,可在代码中修改
最小能容忍的误差——loss,定为0.0000001,可以修改
对于不同的数据,可以用不同的方法,以此对代码进行调整。
质心初始化时,使用
init_centroid()
将质心初始化为0-1内的数,方便后续计算。
整个原始数据需要归一化处理,以此来消除不同维度数据体量不同导致的影响。使用线性变换的方法进行归一化,这样可以不改变原始数据的相对位置。
3.分配数据
利用每个数据与每个质心的欧氏距离来分配数据,靠质心近的数据被分为同一堆。
欧式距离计算公式:
4.更新质心位置
在分配了数据之后,对每一堆数据,重新计算质心位置,以每个维度的平均值来代替原来的质心。
重复多次分配和计算质心之后,当质心稳定在某个值附近时,这个位置就是我们所需要求得的最终的质心位置。
当某个质心没有分配到数据时,将这个质心重置为(0.5, 0.5)也就是中心位置,以此来希望下一次更新时能为其分配数据。
5.使用方法
由于本文将所有函数集成到了一个类中,并由一个函数统一调用
run_kmeans()
所以只需要创建一个变量来调用这个函数即可。
下载地址:
本代码下载无需付费,纯学术交流,如果下载失败请私信