IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 使用PyMetis实现聚类融合算法 -> 正文阅读

[人工智能]使用PyMetis实现聚类融合算法

最近因为看文献看到了聚类融合技术,所以这里做一个简单的整理。

1. 聚类融合简介

??任何聚类算法都对数据集本身对有一定的预先假设。根据“No Free Lunch” 理论,如果数据集本身的分布并不符合预先的假设,则算法的结果将毫无意义,甚至可以说该结果只是给出了一个错误的分布,或者给数据集强加了一个虚构的分布。因此,面对特定的应用问题,如何选择合适的聚类算法是聚类分析研究中的一个重要课题。
??聚类融合将不同算法或者同一算法下使用不同参数得到的结果进行合并,从而得到比单一算法更为优越的结果。
??在聚类融合中,先要产生数据集的多个聚类成员,然后对这些聚类成员的聚类结果采用共识函数进行合并。

1.1 聚类成员的产生
  • 随机选择不同的初始点,运行多次k-means算法 ,从而产生所需要的聚类成员。优点:算法的复杂度低,运行方便等。但是对于分布非球形的数据以及处理高维数据是,该方法的效果并不理想。
  • 使用随机抽样的方法产生数据子集,然后对每个数据子集使用k-means算法生成聚类,从而得到聚类成员。
  • “弱”聚类组成的聚类成员实现的聚类融合方法。弱聚类的产生方法:(1):将多维数据随机投影到一维空间,(2): 用一组随机的超平面将数据空间切割。然后用k-means算法分别对得到的子空间数据进行聚类,组成聚类成员。
  • 使用随机投影将高维数据投影到低维空间,通过多次投影得到若干个数据子集,然后用EM聚类算法对每次的投影子集聚类,从而得到聚类成员。
    综上:通过选择不同的算法,对一个算法选择不同的初始值、选择不同的对象子集、选择不同的特征子集投影到数据子空间等来产生聚类成员。
1.2 共识函数设计
  • Co-Association矩阵:用于衡量数据点之间的相似度,其中第i个点和第j个数据点之间的相似度为:a_ij=(i与j同属一聚类的次数)/(聚类算法总次数) co_association矩阵中大于0.5的点即认为属于最终聚类结果中的同一类。
  • 基于超图的方法:CPSA、HGPA、MCLA
    • CPSA: 首先得到聚类成员的co-association值,然后用基于图论的聚类算法METIS算法进行聚类,得到最终的聚类成果.

2. Python实现

from sklearn.datasets import load_iris
import pandas as pd
from sklearn.cluster import KMeans
import numpy as np
import pymetis

X,y=load_iris(return_X_y=True)
X=pd.DataFrame(X)
X_result=[]

#调整k-means的初始参数得到不同的聚类成员
for k in [2,3,4,5,6]:
    kmeans=KMeans(n_clusters=k,random_state=0).fit(X)
    X_result.append(kmeans.labels_)

X_result=pd.DataFrame(X_result)
X_result=X_result.T
matrix=[]
#构造co-association矩阵,并保留矩阵中大于0.5的值对应的数据项索引
for i in range(X_result.shape[0]):
    tmp=X_result.drop(i)
    tmp=(tmp==X_result.iloc[i,:]).sum(axis=1)
    matrix.append(tmp[tmp>=3].index)
    
n_cuts, membership = pymetis.part_graph(3, adjacency=matrix)

nodes_part_0 = np.argwhere(np.array(membership) == 0).ravel() # 第一组聚类结果
nodes_part_1 = np.argwhere(np.array(membership) == 1).ravel() # 第二组聚类结果
nodes_part_2 = np.argwhere(np.array(membership) == 2).ravel() # 第三组聚类结果
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-04-01 00:02:58  更:2022-04-01 00:03:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 12:51:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码