K均值聚类

一维数据的K均值聚类

import cv2
import numpy as np
import matplotlib.pyplot as plt

#随机生成两组数组
#生成60个值在[0,50]内的xiaoMI直径数据
xiaoMI = np.random.randint(0,50,60)
#生成60个值在[200,250]内的daMI直径数据
daMI = np.random.randint(200,250,60)
#将xiaoMI和daMI组合为MI
MI = np.hstack((xiaoMI,daMI))
#使用reshape函数将其转化为(120,1)
MI = MI.reshape((120,1))
#将MI转化为float32类型
MI = np.float32(MI)

#调用kmeans模块
#设置参数criteria的值
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER,10,1.0)
#设置参数flage的值
flags = cv2.KMEANS_RANDOM_CENTERS
#调用kmeans
retval,bestLabels,centers = cv2.kmeans(MI,2,None,criteria,10,flags)

'''
#打印返回值
print(retval)
print(bestLabels)
print(centers)
'''

#获取分类结果
XM = MI[bestLabels == 0]
DM = MI[bestLabels == 1]

#绘制分类结果
#绘制原始数据
plt.plot(XM,'ro')
plt.plot(DM,'bo')

#绘制中心点
plt.plot(centers[0],'rx')
plt.plot(centers[1],'bx')
plt.show()

二维数组的K均值聚类

import cv2
import numpy as np
import matplotlib.pyplot as plt

#随机生成两组数组
#生成30个长款都在[0,20]内的xiaoMI数据
xiaoMI = np.random.randint(0,20,(30,2))
#生成30个长宽都在[40,60]内的daMI数据
daMI = np.random.randint(40,60,(30,2))
#将xiaoMI和daMI组合为MI
MI = np.vstack((xiaoMI,daMI))
#将MI转化为float32类型
MI = np.float32(MI)

#调用kmeans模块
#设置参数criteria的值
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER,10,1.0)
#设置参数flage的值
flags = cv2.KMEANS_RANDOM_CENTERS
#调用kmeans
ret,label,center = cv2.kmeans(MI,2,None,criteria,10,cv2.KMEANS_RANDOM_CENTERS)

'''
#打印返回值
print(retval)
print(bestLabels)
print(centers)
'''

#获取分类结果
XM = MI[label.ravel() == 0]
DM = MI[label.ravel() == 1]

#绘制分类结果
#绘制原始数据
plt.scatter(XM[:,0],XM[:,1],c = 'g',marker = 's')
plt.scatter(DM[:,0],DM[:,1],c = 'r',marker = 'o')
plt.scatter(center[0,0],center[0,1],s = 200, c = 'b',marker = 'o')
plt.scatter(center[1,0],center[1,1],s = 200, c = 'b',marker = 's')
plt.xlabel('Height'),
plt.ylabel('Width')

plt.show()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值