k-means是什么算法,python k-means聚类算法
K-means是机器学习中最常用的聚类算法。关于k-means算法的数学原理、算法和伪代码的文献非常丰富,这里就不赘述了。
1、调用以下库
Importnumpyasnp#用于采样和生成随机数。
Fromsklearn。clusterimportkmeans # sklearn自带的kmeans算法,用来认真判断本文的算法结果是否正确。
Importmatplotlib.pyplotplt #结果可视化
Importsys#需要sys.exit()函数。如果不需要验证聚类结果,可以不使用Sklearn库。
2、生成用于训练的随机数据
NP。SET _ PRINT OPTIONS (SUPPLY=TRUE) #使numpy的结果不以科学计数的方式输出。
Data=np.array([[1.0,2.0],[1.5,1.8],[3,4],[6,8],[8,8],[1,0.6],
[9,11],[7,10]] #你也可以通过采样更快地得到测试数据3、定义用于选择随机初始点和簇数(k)的函数。
defK_means(data,k):
全球平均值
均值=[]
a=np.max(data[:0])
b=np.min(data[:0])
c=np.max(数据[:1])
d=np.min(数据[:1])
foriinrange :
x=np.random.uniform(a,b,1)
#在此返回数组
Y=np.random.uniform(c,d,1)#此处返回数组
mean.append([float(x),float(y)])
均值=np.array(均值)
ReturnMean在上面的代码中,为了限制初始点(x,y)的位置不超出样本点的范围,均匀采样的上下限是指训练数据的最小水平距离(a,b)和(c,d)。
4、定义可视化函数, 绘制测试数据散点图
defvision(数据,nbsp
;cell):
plt.figure(figsize=(12,6))
ax1=plt.subplot(121)
ax1.scatter(Data[:,0],Data[:,1])#原始数据散点图
ax1.scatter(point[:,0],point[:,0])#同时将随机选取的初始点表示出来
plt.xlabel("x")
plt.ylabel("y")
plt.title("scatterof"+"rural"+"data")
ax2=plt.subplot(122)
ax2.scatter(Data[:,0],Data[:,1])#原始数据散点图
ax2.scatter(data[:,0],data[:,1])#经过迭代后最终确定的聚类点
plt.xlabel("x")
plt.ylabel("y")
plt.title("scatterof"+cell+"data")
plt.show()聚类结果的可视化对于判断聚类结果的准确性至关重要。
5、定义迭代过程, 通过不断计算各个样本对聚类点的欧式聚类, 来不断更新聚类点
defiteration(Data,point):
注意, 上段代码中加入了一个if语句
iflen(A)==len(Data)orlen(B)==len(Data):
由于初始点是随机产生的,所以这个条件语句是非常必要的,因此有可能所有的样本点都只接近一个聚类中心而远离另一个聚类中心,这样就不能形成两个聚类中心,程序将会报错,因此我们需要排除出现这种情况的可能性。一旦所有样本点都接近一个聚类中心时令程序停止。
以上就是Python中使用K-means算法,希望能对大家有所帮助!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。