大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章将为大家详细讲解有关K-means算法怎么在Python中应用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
站在用户的角度思考问题,与客户深入沟通,找到灵川网站设计与灵川网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站设计、成都做网站、企业官网、英文网站、手机端网站、网站推广、空间域名、网络空间、企业邮箱。业务覆盖灵川地区。
Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚本语言,其最初的设计是用于编写自动化脚本,随着版本的不断更新和新功能的添加,常用于用于开发独立的项目和大型项目。
1、调用以下库
import numpy as np #用于抽样和生成随机数 from sklearn.cluster import KMeans #sklearn自带的Kmeans算法, 用于严重本文算法结果是否正确 import matplotlib.pyplot as plt #结果可视化 import sys #需要用到sys.exit()函数
若不需要验证聚类结果是否可以不使用Sklearn库。
2、生成用于训练的随机数据
np.set_printoptions(suppress=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)的函数
def K_means(data, k): global Mean mean = [] a = np.max(data[:, 0]) b = np.min(data[:, 0]) c = np.max(data[:, 1]) d = np.min(data[:, 1]) for i in range(k): x = np.random.uniform(a, b, 1) #此处返回array y = np.random.uniform(c, d, 1) #此处返回array mean.append([float(x), float(y)]) Mean = np.array(mean) return Mean
在上面的代码中,为了限定初始点(x,y)的位置不会超出样本点的范围,因此均匀抽样的上下限是指训练数据(a,b)和(c,d)的最小横距。
4、定义可视化函数, 绘制测试数据散点图
def vision(data, 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("scatter of " + "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("scatter of " + cell + " data") plt.show()
聚类结果的可视化对于判断聚类结果的准确性至关重要。
5、定义迭代过程, 通过不断计算各个样本对聚类点的欧式聚类, 来不断更新聚类点
def iteration(Data, point): A = [] B = [] for i in range(len(Data)): d1 = np.sqrt(sum(pow(Data[i] - point[0], 2))) d2 = np.sqrt(sum(pow(Data[i] - point[1], 2))) if d1 > d2: A.append(list(Data[i])) else: B.append(list(Data[i])) if len(A) == len(Data) or len(B) == len(Data): print("初始化错误") sys.exit(0) new_x1 = np.mean(np.array(A)[:, 0]) new_y1 = np.mean(np.array(A)[:, 1]) new_x2 = np.mean(np.array(B)[:, 0]) new_y2 = np.mean(np.array(B)[:, 1]) new_point = np.array([[new_x1, new_y1], [new_x2, new_y2]]) return new_point
注意, 上段代码中加入了一个if语句
if len(A) == len(Data) or len(B) == len(Data): print("初始化错误") sys.exit(0)
关于K-means算法怎么在Python中应用就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。