class 3 cluster 点云分割聚类

class 3 cluster

1.数学基础

  • 聚类就是把相似的物体聚在一起,不相似的物体分开;

  • 聚焦两类聚类方法

    • 理论上被证明的
      • K-means
      • GMM
      • EM
      • Spectral Clustering
    • 工程中常用的
      • mean-shift
      • DBSCAN
  • 线性代数

    • 矩阵的SVD分解

      M = U ∗ Σ ∗ V ∗ M=U*\Sigma*V^* M=UΣV,其中, U , V ∗ U,V^* U,V是正交矩阵(旋转矩阵), Σ \Sigma Σ是对角阵,元素是 M M M的特征值的平方根,按照从大到小的顺序排列;

      如下图所示,一个圆 经过一个 M M M处理,就是,先经过一个 V ∗ V^* V,做一个旋转,经过一个 Σ \Sigma Σ,各个维度上的一个缩放,圆变成了椭圆,最后经过一个 U U U,旋转一下,得到最后的结果

      一个矩阵可以分解为旋转矩阵+缩放矩阵+旋转矩阵

      在这里插入图片描述

    • 谱定理Spectral Theorem

      对阵矩阵A的分解

      在这里插入图片描述

    • 瑞丽商Rayleigh Quotients
      在这里插入图片描述
      ​根据SVD的那个解释图,瑞丽商表示对称矩阵A可以把x缩放多少倍,最大特征值倍到最小特征值倍

  • 概率论

    • 联合概率

    • 边缘分布概率

      由联合分布求某一个变量的概率分布

      在这里插入图片描述
      把其余的变量通过求和或者积分 消掉
      在这里插入图片描述

    • 条件概率
      在这里插入图片描述

  • 图论

    • 有向图 Directed Graphical Model (DGM)

      • DGM被用于表示条件独立

      • G ( V , E ) G(V,E) G(V,E)

        • V是节点的集合,一个节点表示一个变量

        • E是有方向的边的集合,一条边代表一个条件关系,两个随机变量的联系

          在这里插入图片描述

        • 马尔科夫假设:一个随机变量(节点)只和它的父节点有关,与父节点之前的节点无关

          • 如上图,就是一个简单的有向图

          • the joint distribution is p ( x , z ) = p ( z ) p ( z ∣ x ) p(x,z)=p(z)p(z|x) p(x,z)=p(z)p(zx)
            在这里插入图片描述

    • 无向图UGM

      • 在这里插入图片描述
  • 优化方法—拉格朗日乘数法

    考虑一个优化问题:
    m a x   f ( x , y ) , s . t . :   g ( x , y ) = 0 max\ f(x,y),s.t.:\ g(x,y)=0 max f(x,y),s.t.: g(x,y)=0

    对于简单的优化问题,用梯度下降就能解决,但是这里加入了限制条件,如下图所示:

    在这里插入图片描述
    图中:

  1. 虚线圆代表 f(x,y) 的登高线,越往里面值越大

  2. g(x,y)=0代表x,y必须在红线上面

  3. 优化为题的解,就是虚线和红线相切的位置,在红线的其他位置,移动(x,y) 存在一个方向,f(x,y)会变大,但是在相切的位置

    无论怎么移动,都会变小

    在这里插入图片描述
    拉格朗日乘数法解决优化问题:

m a x   f ( x , y ) , s . t . :   g ( x , y ) = 0 max\ f(x,y),s.t.:\ g(x,y)=0 max f(x,y),s.t.: g(x,y)=0

  1. 引入一个新的变量 λ \lambda λ 叫做拉格朗日乘数

  2. 构造拉格朗日函数:

    L ( x , y , λ ) = f ( x , y ) − λ g ( x , y ) \mathcal{L}(x,y,\lambda)=f(x,y)-\lambda g(x,y) L(x,y,λ)=f(x,y)λg(x,y)

  3. 求解(一阶导数为0):

    ∇ x , y , λ L ( x , y , λ ) =

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是CSDN AI语言模型的回答: 可以的,以下是Python代码示例: ```python import numpy as np from sklearn.cluster import OPTICS from sklearn.neighbors import NearestNeighbors from sklearn.preprocessing import StandardScaler import open3d as o3d # 读取pcd文件 pcd = o3d.io.read_point_cloud("input.pcd") points = np.asarray(pcd.points) # 数据标准化 scaler = StandardScaler() points = scaler.fit_transform(points) # 使用OPTICS算法进行聚类 clustering = OPTICS(min_samples=10, xi=.05, min_cluster_size=.05) clustering.fit(points) # 获取每个簇的核心点和边界点 core_samples_mask = np.zeros_like(clustering.labels_, dtype=bool) core_samples_mask[clustering.core_sample_indices_] = True labels = clustering.labels_ n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0) unique_labels = set(labels) colors = [plt.cm.Spectral(each) for each in np.linspace(0, 1, len(unique_labels))] # 分割出单根输电线并拟合得到方程 for k, col in zip(unique_labels, colors): if k == -1: col = [0, 0, 0, 1] class_member_mask = (labels == k) xy = points[class_member_mask & core_samples_mask] xy = scaler.inverse_transform(xy) x = xy[:, 0] y = xy[:, 1] z = xy[:, 2] # 拟合得到方程 z = np.polyfit(x, y, 1) # 可视化 plt.plot(x, y, 'o', markerfacecolor=tuple(col), markeredgecolor='k', markersize=14) plt.plot(x, np.polyval(z, x), '-', color=tuple(col), linewidth=2) plt.title('Estimated number of clusters: %d' % n_clusters_) plt.show() ``` 希望这个代码示例能够帮到你。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值