文章目录
1.原理
2.opencv中的K值聚类
代码速记:
- cv2.kmeans()
参数解释:
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
flags = cv2.KMEANS_RANDOM_CENTERS
compactness, labels, centers = cv2.kmeans(z, 2, None, criteria, 10, flags)
(1)输入参数
- samples: 应该是np.float32 类型的数据,每个特征应该放在一列。
- nclusters(K): 聚类的最终数目。
- criteria: 终止迭代的条件。当条件满足时,算法的迭代终止。它应该是一个含有3 个成员的元组,它们是(typw,max_iter,epsilon):
- type 终止的类型:有如下三种选择:
cv2.TERM_CRITERIA_EPS
只有精确度epsilon 满足是停止迭代。cv2.TERM_CRITERIA_MAX_ITER
当迭代次数超过阈值时停止迭代。cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER
上面的任何一个条件满足时停止迭代。 - max_iter 表示最大迭代次数。
- attempts: 使用不同的起始标记来执行算法的次数。算法会返回紧密度
最好的标记。紧密度也会作为输出被返回。
- type 终止的类型:有如下三种选择:
- flags:用来设置如何选择起始重心。通常我们有两个选择:
cv2.KMEANS_PP_CENTERS
和cv2.KMEANS_RANDOM_CENTERS
。
输出参数:
- compactness:紧密度,返回每个点到相应重心的距离的平方和。
- labels:标志数组(与上一节提到的代码相同),每个成员被标记为0,1等。
- centers:由聚类的中心组成的数组。
(1)只有一个特征的数据
假设我们有一组数据,每个数据只有一个特征(1 维)。我们只使用人们的身高来决定T 恤的大小。我们先来产生一些随机数据,并使用Matplotlib 将它们绘制出来。
def one_feature(self):
#随机产生数据并绘制
x = np.random.randint(25, 100, 25)#low,high,size
y = np.random.randint(175, 255, 25)#low,high,size
z = np.hstack((x, y))
z = z.reshape((50, 1))#长度为50的列向量
z