千锋教育-做有情怀、有良心、有品质的职业教育机构

Python中使用K-means算法

来源:千锋教育
发布时间:2023-11-12 21:54:16
分享

python中使用K-means算法

k-means是机器学习中最常用的聚类算法,关于k-means算法的数学原理、算法、伪码等已有相当丰富的文献,在此不再赘述。

1、调用以下库

importnumpyasnp#用于抽样和生成随机数

fromsklearn.clusterimportKMeans#sklearn自带的Kmeans算法,用于严重本文算法结果是否正确

importmatplotlib.pyplotasplt#结果可视化

importsys#需要用到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)的函数

defK_means(data,k):

globalMean

mean=[]

a=np.max(data[:,0])

b=np.min(data[:,0])

c=np.max(data[:,1])

d=np.min(data[:,1])

foriinrange(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)

returnMean

在上面的代码中,为了限定初始点(x,y)的位置不会超出样本点的范围,因此均匀抽样的上下限是指训练数据(a,b)和(c,d)的最小横距。

4、定义可视化函数,绘制测试数据散点图

defvision(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("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):

A=[]

B=[]

foriinrange(len(Data)):

d1=np.sqrt(sum(pow(Data[i]-point[0],2)))

d2=np.sqrt(sum(pow(Data[i]-point[1],2)))

ifd1>d2:

A.append(list(Data[i]))

else:

B.append(list(Data[i]))

iflen(A)==len(Data)orlen(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]])

returnnew_point

注意,上段代码中加入了一个if语句

iflen(A)==len(Data)orlen(B)==len(Data):

print("初始化错误")

sys.exit(0)

由于初始点是随机产生的,所以这个条件语句是非常必要的,因此有可能所有的样本点都只接近一个聚类中心而远离另一个聚类中心,这样就不能形成两个聚类中心,程序将会报错,因此我们需要排除出现这种情况的可能性。一旦所有样本点都接近一个聚类中心时令程序停止。

以上就是Python中使用K-means算法,希望能对大家有所帮助!更多Python学习教程请关注IT培训机构:千锋教育。

声明:本站部分稿件版权来源于网络,如有侵犯版权,请及时联系我们。

相关推荐

  • python如何对Python数据表进行检查 如何对Python数据表进行检查在python中处理的数据量通常会比较大,例如千万级数据,而且我们不能一目了然地了解整个数据表,而且必须通过某种方法获得关于数据表的关键信息。DataTableChec
  • Python itemgetter函数怎么用? pythonitemgetter函数怎么用?Operator模块中也有一类函数可以作为条件过滤。首先介绍itemgetter函数。假设定义了一个f函数,f=itemgetter(2),那么如果调用f(
  • python中remove()方法如何使用删除后的值? python中remove()方法如何使用删除后的值?有时,您可能不知道列表中元素的索引,但只要您知道该值,您就可以根据该值删除该元素。remove()方法可以使用。remove()方法将不返回已删除
  • Python中Operator计算函数 python中Operator计算函数使用Operator模块中的mul函数来实现阶乘:fromoperatorimportmuldeffactWithMul(n):returnreduce(mul,
  • python中如何查看stdin编码? python中如何查看stdin编码?1、通过Pythonsys库查看$pythonPython2.7.6(default,Nov132018,12:45:42)[GCC4.8.4]onlinux2T
  • python中列表的索引如何理解? python中列表的索引如何理解?一、python中列表的索引介绍:第一个列表要素的索引为0,很多编程语言都是这样规定的,这与列表操作的基础有关。第二个列表要素的索引值为1,根据该访问方式,访问任何要