当前位置: 首页 > article >正文

DBSCAN 聚类 和 gmm 聚类 测试

测试代码

import math
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN
from sklearn.mixture import GaussianMixture

# 给定的线段数据(x1, y1, x2, y2)
lines = [
    # (265, 106, 268, 1),
    (265, 105, 268, 0),  # 点1: (265, 105), (268, 0)
    (246, 62, 247, 7),   # 点2: (246, 62), (247, 7)
    (246, 60, 246, 5)    # 点3: (246, 60), (246, 5)
]
lines_polar=[]
for line in lines:
    x1, y1, x2, y2 = line
    dx = x2 - x1
    dy = y2 - y1
    if dx == 0:
        x_value_when_y_0 = x1
        if dy != 0:
            angle_radians= math.pi / 2  # 对应90度,转换为弧度制为pi/2
        else:
            angle_radians= 0
    else:
        slope = (y2 - y1) / (x2 - x1)
        if slope == 0:
            x_value_when_y_0 = x1
        else:
            x_value_when_y_0 = x1 - y1 / slope
            m = dy / dx
            angle_radians = math.atan(m)
    lines_polar.append((x_value_when_y_0, angle_radians*2))

# 提取所有点 (x1, y1) 和 (x2, y2)

# 将点转换为 NumPy 数组
points = np.array(lines)

# DBSCAN 聚类
def dbscan_cluster(points, eps=6, min_samples=2):
    dbscan = DBSCAN(eps=eps, min_samples=min_samples)
    dbscan.fit(points)
    return dbscan.labels_

# GMM 聚类
def gmm_cluster(points, n_components=2):
    gmm = GaussianMixture(n_components=n_components)
    gmm.fit(points)
    labels = gmm.predict(points)
    return labels

# 比较 DBSCAN 和 GMM 聚类
def compare_clustering(points):
    # 使用 DBSCAN 聚类
    dbscan_labels = dbscan_cluster(points)
    
    # 使用 GMM 聚类
    gmm_labels = gmm_cluster(points)
    
    # 打印聚类标签
    print("DBSCAN 聚类标签:", dbscan_labels)
    print("GMM 聚类标签:", gmm_labels)
   
# 主函数
if __name__ == "__main__":
    compare_clustering(points)

  经过测试发现  ,当需要聚类的点数小于4个时,DBSCAN 聚类 效果很差,gmm效果较为不错。


http://www.kler.cn/a/465973.html

相关文章:

  • 用户界面的UML建模10
  • MySQL低版本没有函数row_number() over的解决方案
  • 【蓝桥杯研究生组】第14届Java试题答案整理
  • 【QED】kouki与阶乘之间的那些事?
  • RabbitMQ实现生产者消费者
  • vue3 vite 动态加载路由遇到的问题
  • Gitlab-runner 修改默认的builds_dir并使用custom_build_dir配置
  • Milvus×合邦电力:向量数据库如何提升15%电价预测精度
  • ASP.NET Core 中的响应压缩中间件
  • TensorFlow DAY1:基础语法
  • C++ 中如何优雅地返回一个递归闭包函数?
  • 聆听音乐 1.5.9 | 畅听全网音乐,支持无损音质下载
  • 【银河麒麟高级服务器操作系统实例】tcp半链接数溢出分析及处理全过程
  • 【go每日一题】golang异常、错误 {源码、实践、总结}
  • 探索Docker Compose:轻松管理多容器应用
  • RAID磁盘整列
  • cut-命令详解
  • 【Linux】传输层协议UDP
  • CDP集群安全指南-静态数据加密
  • 奇异值分解SVD
  • vue字符串的数字比较大小有问题
  • typescript安装后仍然不能使用tsc,如何解决
  • mask-R-cnn模型详解
  • overleaf写学术论文常用语法+注意事项+审阅修订
  • 重庆大学软件工程复试怎么准备?
  • 使用免费内网穿透(p2p)网络环境搭建小型文件管理服务器(简单操作)