Python计算机视觉 您所在的位置:网站首页 最新的聚类算法有哪些方法呢 Python计算机视觉

Python计算机视觉

2024-03-11 11:26| 来源: 网络整理| 查看: 265

相似矩阵定义:相似矩阵又称为亲和矩阵或距离矩阵,是一个n×n的矩阵,矩阵每个元素表示两两之间的相似性分数。它的特征向量没有类别限制,只要有一个“距离”或“相似性”的概念即可。

谱聚类的过程:

创建拉普拉斯矩阵 L = I − D − 1 / 2 S D − 1 / 2 L=I-D^{-1/2}SD^{-1/2} L=I−D−1/2SD−1/2,对于相似性矩阵中的元素 s i j s_{ij} sij​要求 s i j ≥ 0 s_{ij}≥0 sij​≥0,计算 L 的特征向量,并使用 k 个最大特征值对应的 k 个特征向量,构建出一个特征向量集,从而找到聚类簇。其中, D − 1 / 2 = [ 1 d 1 1 d 2 ⋱ 1 d n ] D^{-1 / 2}=\left[\begin{array}{llll} \frac{1}{\sqrt{d_{1}}} & & & \\ & \frac{1}{\sqrt{d_{2}}} & & \\ & & \ddots & \\ & & & \frac{1}{\sqrt{d_{n}}} \end{array}\right] D−1/2=⎣⎢⎢⎢⎡​d1​ ​1​​d2​ ​1​​⋱​dn​ ​1​​⎦⎥⎥⎥⎤​ 创建一个矩阵,该矩阵的各列是由之前求出的 k 个特征向量构成,每一行可以看做一个新的特征向量,长度为 k。这些新的特征向量可以用诸如 K-means 方法进行聚类,生成最终的聚类簇。

举例,我们使用两两间的欧氏距离创建矩阵S,并对k个特征向量用常规的K-means进行聚类,最后绘制出运行后的聚类簇,如下图所示:

在这里插入图片描述

代码如下:

# -*- coding: utf-8 -*- import imtools, pca from PIL import Image, ImageDraw from pylab import * from scipy.cluster.vq import * imlist = imtools.get_imlist('selectedfontimages/a_selected_thumbs') imnbr = len(imlist) # Load images, run PCA. immatrix = array([array(Image.open(im)).flatten() for im in imlist], 'f') V, S, immean = pca.pca(immatrix) # Project on 2 PCs. projected = array([dot(V[[0, 1]], immatrix[i] - immean) for i in range(imnbr)]) # P131 Fig6-3左图 # projected = array([dot(V[[1, 2]], immatrix[i] - immean) for i in range(imnbr)]) # P131 Fig6-3右图 n = len(projected) # 计算距离矩阵 S = array([[sqrt(sum((projected[i] - projected[j]) ** 2)) for i in range(n)] for j in range(n)], 'f') # 创建拉普拉斯矩阵 rowsum = sum(S, axis=0) D = diag(1 / sqrt(rowsum)) I = identity(n) L = I - dot(D, dot(S, D)) # 计算矩阵 L 的特征向量 U, sigma, V = linalg.svd(L) k = 5 # 从矩阵 L 的前k个特征向量(eigenvector)中创建特征向量(feature vector) # 叠加特征向量作为数组的列 features = array(V[:k]).T # k-means 聚类 features = whiten(features) centroids, distortion = kmeans(features, k) code, distance = vq(features, centroids) # 绘制聚类簇 for c in range(k): ind = where(code == c)[0] figure() gray() for i in range(minimum(len(ind), 39)): im = Image.open(imlist[ind[i]]) subplot(4, 10, i + 1) imshow(array(im)) axis('equal') axis('off') show()


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有