首页 > 其他分享 >高维向量聚类(草稿)

高维向量聚类(草稿)

时间:2024-12-11 16:42:25浏览次数:4  
标签:plt 草稿 KMeans kmeans 聚类 PCA data 高维

  • 对于容易出现维度灾难的高维向量序列聚类,在不知道聚类数量的情况下,可以使用基于密度的聚类方法dbscan;也可以通过估计聚类数量,再使用kmeans。对于kmeans,一般有以下处理方法:
  • 方法一:使用 NearestNeighbors 估计簇数量,然后用 KMeans 聚类

   NearestNeighbors 可以通过计算样本的 kkk-近邻距离,利用距离拐点的方法估计最优簇的数量。

    1. 使用 NearestNeighbors 计算每个样本的第 kkk-近邻距离(通常 k=min_samples+1k = min\_samples + 1k=min_samples+1)。
    2. 绘制距离曲线,寻找拐点。
    3. 使用拐点估计的簇数量初始化KMeans,并进行聚类。
import numpy as np
from sklearn.cluster import KMeans
from sklearn.neighbors import NearestNeighbors
import matplotlib.pyplot as plt

# 示例数据
np.random.seed(42)
data = np.vstack([
    np.random.normal(loc=0, scale=0.5, size=(50, 2)),
    np.random.normal(loc=3, scale=0.5, size=(50, 2)),
    np.random.normal(loc=6, scale=0.5, size=(50, 2))
])

# 使用 NearestNeighbors 计算 k-近邻距离
k = 5  # 通常选择比 min_samples 大 1 的值
neighbors = NearestNeighbors(n_neighbors=k).fit(data)
distances, _ = neighbors.kneighbors(data)
distances = np.sort(distances[:, -1])  # 第 k 近邻的距离

# 绘制距离曲线
plt.plot(distances)
plt.xlabel('Samples sorted by distance')
plt.ylabel(f'{k}th Nearest Neighbor Distance')
plt.title('Elbow for K Estimation')
plt.show()

# 根据拐点估计簇数
estimated_clusters = 3  # 手动通过图中拐点估计簇数量

# 用 KMeans 聚类
kmeans = KMeans(n_clusters=estimated_clusters, random_state=42).fit(data)

# 可视化结果
plt.scatter(data[:, 0], data[:, 1], c=kmeans.labels_, cmap='viridis', s=50)
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], c='red', marker='X', s=200)
plt.title('KMeans Clustering')
plt.show()

     方法二:使用 PCA 的主成分数量估计簇数,然后用 KMeans 聚类

      PCA 可以通过分析数据的主要方差方向估计潜在的簇数,通常观察累积解释方差比,选择主要贡献的主成分数作为簇数的估计值。

      1. 使用 PCA 对数据降维。
      2. 绘制累积解释方差比,选择一个拐点估计主要成分的数量。
      3. 使用估计的成分数作为簇数输入到 KMeans
from sklearn.decomposition import PCA

# 使用 PCA 分析主成分
pca = PCA().fit(data)
cumulative_variance_ratio = np.cumsum(pca.explained_variance_ratio_)

# 绘制累积方差解释曲线
plt.plot(range(1, len(cumulative_variance_ratio) + 1), cumulative_variance_ratio, marker='o')
plt.axhline(y=0.9, color='r', linestyle='--', label='90% Variance Threshold')
plt.xlabel('Number of Principal Components')
plt.ylabel('Cumulative Explained Variance Ratio')
plt.title('PCA for Cluster Estimation')
plt.legend()
plt.show()

# 根据拐点选择主成分数量
estimated_clusters_pca = 3  # 通过图估计

# 用 KMeans 聚类
kmeans_pca = KMeans(n_clusters=estimated_clusters_pca, random_state=42).fit(data)

# 可视化结果
plt.scatter(data[:, 0], data[:, 1], c=kmeans_pca.labels_, cmap='viridis', s=50)
plt.scatter(kmeans_pca.cluster_centers_[:, 0], kmeans_pca.cluster_centers_[:, 1], c='red', marker='X', s=200)
plt.title('KMeans Clustering (PCA-based Estimation)')
plt.show()

 

     比较
特性NearestNeighborsPCA
目标 利用空间距离估计簇数,适用于高维数据 利用主要方差方向估计簇数,适用于线性分布的数据
计算复杂度 依赖于 O(n2)O(n^2)O(n2) 的邻居计算 依赖于 O(n⋅d2)O(n \cdot d^2)O(n⋅d2) 的协方差矩阵计算
优点 精确反映样本间的几何关系 能降维,减少噪声,提高聚类的可解释性
缺点 需要手动选择第 kkk-近邻的值,容易受噪声影响 不适用于簇形状复杂或非线性分布的数据
适用场景 数据簇之间间距较大,且分布较均匀 数据分布具有显著的主要方向,且簇数与主成分相关
  1. NearestNeighbors 更适合样本点间距离信息明显的情况,尤其是密度差异较大的数据。
  2. PCA 更适合数据具有高维结构且簇方向线性相关的场景。
    在实际中,可以先对数据进行标准化,再结合这两种方法辅助选择 K。
    TBC

标签:plt,草稿,KMeans,kmeans,聚类,PCA,data,高维
From: https://www.cnblogs.com/Song-Meow/p/18599944

相关文章

  • 聚类算法的种类
    定义与原理聚类算法是一种无监督学习方法,旨在揭示数据集中的内在结构。它通过计算样本间的相似性,将相似对象自动归类到同一组中,无需预先标记数据。这种方法的核心在于选择合适的相似度量,如欧氏距离,以捕捉数据间的关系。聚类过程通常涉及迭代优化目标函数,如最小化簇内距离之......
  • 蒙特卡洛1000个风光场景并通过削减法|聚类法得到几个典型场景(matlab&python实现)
    目录1 对风光的认识2 风电DG出力概率模型 2.1 风速分布特性2.2 风电DG有功出力3 光伏DG出力概率模型 3.1 光照强度分布特性3.2光伏DG有功出力 4Python代码实现4.1数据4.2Python代码 4.3结果  5Matlab实现5.1数据5.2Matlab代码 5.3结果6......
  • 【机器学习】机器学习的基本分类-无监督学习-K-Means聚类
    K-Means是一种基于划分的无监督学习算法,用于数据聚类任务,它通过迭代优化将数据分组为k 个互斥的簇,使得每个簇内数据点的相似性最大化,而簇间的相似性最小化。它通过最小化簇内样本点到簇中心的距离平方和(即误差平方和,SSE)来完成聚类任务。1.算法原理目标函数K-Means的目......
  • 草稿
     importrandomimportpgzrunWIDTH=960HEIGHT=720bg=Actor('bg2.png')start=Actor('start.png',(140,580))end=Actor('end.png',(320,580))ping=Actor('ping.png',(230,400))score=['100','......
  • 实验、K-means聚类实现
    实验目标本实验旨在帮助理解K-means聚类的基本原理,学习如何使用Scikit-learn库实现K-means聚类,并通过实验观察其在不同数据集上的效果。学会数据标准化、如何确定聚类数目以及评估聚类效果。实验环境oPython3.xoScikit-learn库oJupyterNotebookoMatplotlib实验数......
  • 用简单的例子理解 - 基于模型聚类里的基于概率模型的聚类是什么?
    基于模型的聚类包括:基于概率模型的聚类基于神经网络模型的聚类 其中,大多数都是基于概率模型的聚类。 概率模型聚类就是利用属性的概率分布来描述聚类。最典型的例子是高斯混合模型(GMM,GaussianMixtureModel),它用了EM法求解。 ⚠️:GMM是一种混合模型,它使......
  • DBSCAN算法作为基于密度聚类里最典型的代表算法,到底是什么?
    ⚠️:基于划分聚类和基于层次聚类:它们要根据距离来划分类簇,所以,只能够用于挖摒球状簇。 但是,基于密度的聚类:利用了密度思想,把高密度区域划分为簇。所以,基于密度的聚类算法,能够用于挖掘任意形状的簇。 常见的基于密度的聚类算法:DBSCAN、OPTICS和DENCLUE等。 DBSCAN......
  • 17章12节:耦合网络可视化,从常规网络图到耦合分析聚类图的深度讲解
    耦合网络分析是文献计量学中的一种重要方法,通过衡量文献、作者、出版源或国家之间的共同引用或共享参考文献的关系,揭示其内在关联性。与共被引分析不同,耦合网络强调研究对象之间的直接联系。本文将系统介绍耦合网络的概念及其类型,包括文献耦合、作者耦合、出版源耦合和国家耦......
  • 【老生谈算法】matlab实现基于K-Means聚类、Transformer与Bi-LSTM的智能优化算法在电
    MATLAB实现基于K-Means聚类、Transformer与Bi-LSTM的智能优化算法在电力负荷预测中的应用1、全套下载:本项目完整讲解和全套实现源码见下资源,有需要的朋友可以点击进行下载说明文档(点击下载)本算法文档【老生谈算法】matlab实现基于K-Means聚类、Transformer与Bi-LSTM的智......
  • AngClust:基于角度特征的短时间序列基因表达谱聚类(时间序列数据的聚类软件)
    中文关键词:时序数据聚类,时间序列数据聚类,基因表达数据聚类,机器学习,角度特征 中文摘要:在对基因表达进行聚类时,预计同一聚类中基因的相关系数很高,大多数聚类的基因本体(GO)富集分析将具有重要意义。然而,现有的短期基因表达聚类算法存在局限性。为了解决这个问题,我们提出了一种基......