在这次练习中将实现K-means 聚类算法并应用它压缩图片,第二部分,将使用主成分分析算法去找到一个脸部图片的低维描述。
K-means Clustering
Implementing K-means
K-means算法是一种自动将相似的数据样本聚在一起的方法,K-means背后的直观是一个迭代过程,它从猜测初始的质心开始,然后通过重复地将示例分配到最接近的质心,然后根据分配重新计算质心,来细化这个猜测。
具体步骤:
- 随机初始K个质心
- 开始迭代
- 为每个样本找到最近的质心
- 用分配给每个质心的点来计算每个质心的平均值,作为新的质心
- 回到三
- 收敛于最终的均值集
在实践中,K-means算法通常使用不同的随机初始化运行几次。从不同的随机初始化中选择不同的解的一种方法是选择成本函数值(失真)最低的解。
Finding closest centroids

Computing centroid means
for every centroid k we set

新的形心重置为所有聚集该形心和的平均值
K-means on example dataset
def find_closest_centroids(X, centroids):
idx = np.zeros((len(X), 1))
print(idx.shape)
K = len(centroids)
print(K)
t = [0 for i in range(K)]
print(t)
for i in range(len(X)):
for j in range(K):
temp = centroids[j, :] - X[i, :]
t[j] = temp.dot(temp.T)
index = t.index(min(t)) + 1
print(index)
idx[i] = index
return np.array(idx)
mat = loadmat("ex7data2.mat")
X = mat['X']
init_centroids = np.array([[3, 3], [6, 2], [8, 5]])
idx = find_closest_centroids(X, init_centroids)
print(idx[0:3])
计算出聚集样本的平均数,得到新的centroids
def compute_centroids

最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



