Python中使用K-means算法
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培训机构:千锋教育。
猜你喜欢LIKE
相关推荐HOT
更多>>Python中使用K-means算法
python中使用K-means算法k-means是机器学习中最常用的聚类算法,关于k-means算法的数学原理、算法、伪码等已有相当丰富的文献,在此不再赘述。1...详情>>
2023-11-14 22:27:42python包和模块的内容整理
python包和模块的内容整理1、包(1)包是一个文件夹,存放多个模块,作用是包含多个模块,本质上仍然是模块,因此包也可以包含在其中。(2)库:与...详情>>
2023-11-14 21:31:01python线程中deque如何使用?
python线程中deque如何使用?1、说明collections.deque类是一种线程安全的数据类型,可以从两端快速添加或删除元素。而且如果你想有一个数据类型...详情>>
2023-11-14 18:22:54python并集是什么意思?
python并集是什么意思?本文教程操作环境:windows7系统、Python3.9.1,DELLG3电脑。以属于A或属于B的元素为元素的集合成为A与B的并集。1、概念...详情>>
2023-11-14 16:44:05热门推荐
python中如何实现列表与字典的相互转换?
沸python sorted中key参数怎么用?
热python中exec()函数如何执行表达式?
热Python中使用K-means算法
新python如何对电脑进行清屏
python包和模块的内容整理
python中scipy.special模块如何使用?
python检测给定的路径是否存在的方法
怎样在python中定义非闭包
python如何画火山图
pythonpickle模块的使用注意
python线程中deque如何使用?
python如何安装pyenv
pythontime模块的时间格式