机器学习之聚类——模糊聚类FCM

简介: 机器学习之聚类——模糊聚类FCM

FCM

FCM,英文全程Fuzzy C-Means(FCM),是一种基于目标函数的模糊聚类方法。

原理

关于FCM的资料,网上很多,原理也相对简单,详述如下

代码

import numpy as np
from matplotlib import pyplot as plt
class FCM:
    def __init__(self, K, m=2, eps=0.1):
        # 聚类个数
        self.K = K
        # 加权参数
        self.m = m
        # 终止容限
        self.eps = eps
        # 最优相似度矩阵
        self.U = None
        # 最终的聚类中心
        self.centers = None
    def train(self, data):
        # 初始化隶属度矩阵
        self.U = np.random.random((len(data), self.K))
        # 保证每个样本属于所有类的概率是1
        self.U = np.divide(self.U, np.sum(self.U, axis=1)[:, np.newaxis])
        while True:
            temp_U = self.U ** self.m
            # 计算聚类中心
            self.centers = np.divide(np.dot(temp_U.T, data), np.sum(temp_U.T, axis=1)[:, np.newaxis])
            # 样本到聚类中心的距离
            dist = np.zeros((len(data), self.K))
            for i, x in enumerate(data):
                for j, c in enumerate(self.centers):
                    dist[i][j] = np.linalg.norm(x - c, 2)
            # 计算新的隶属度矩阵
            for i, x in enumerate(data):
                for j, c in enumerate(self.centers):
                    temp_U[i][j] = 1./np.sum((dist[i][j]/dist[i]) ** (2/(self.m-1)))
            # 判断是否收敛
            if np.sum(abs(temp_U-self.U)) < self.eps:
                break
            # 更新隶属度矩阵
            self.U = temp_U
        # 返回样本最大隶属度对应的类别
        return np.argmax(self.U, axis=1)
    def __str__(self) -> str:
        return f"K:{self.K}, m:{self.m}, eps:{self.eps}, U:{self.U}, centers:{self.centers}"
if __name__ == "__main__":
    # 样本数量
    N = 3000
    # 测试数据
    X = np.concatenate((
        np.random.normal((-2, -2), size=(N, 2)),
        np.random.normal((2, 2), size=(N, 2))
    ))
    # 模型
    fcm = FCM(K=2, m=2, eps=1)
    # 训练
    y = fcm.train(X)
    # 绘图
    plt.scatter(X[:, 0], X[:, 1], c=y, alpha=.1, edgecolors='black')
    plt.scatter(fcm.centers[:, 0], fcm.centers[:, 1], marker="+", s=500, c='w')
    plt.show()

运行效果如图:

作者这水平有限,有不足之处欢迎留言指正

相关文章
|
30天前
|
机器学习/深度学习 算法 数据可视化
机器学习的核心功能:分类、回归、聚类与降维
机器学习领域的基本功能类型通常按照学习模式、预测目标和算法适用性来分类。这些类型包括监督学习、无监督学习、半监督学习和强化学习。
24 0
|
3月前
|
机器学习/深度学习 数据采集 算法
【机器学习】K-Means聚类的执行过程?优缺点?有哪些改进的模型?
K-Means聚类的执行过程、优缺点,以及改进模型,包括K-Means++和ISODATA算法,旨在解决传统K-Means算法在确定初始K值、收敛到局部最优和对噪声敏感等问题上的局限性。
63 2
|
3月前
|
机器学习/深度学习 算法 数据挖掘
【机器学习】聚类算法中的距离度量有哪些及公式表示?
聚类算法中常用的距离度量方法及其数学表达式,包括欧式距离、曼哈顿距离、切比雪夫距离、闵可夫斯基距离、余弦相似度等多种距离和相似度计算方式。
258 1
|
3月前
|
机器学习/深度学习 算法 数据挖掘
【机器学习】Python详细实现基于欧式Euclidean、切比雪夫Chebyshew、曼哈顿Manhattan距离的Kmeans聚类
文章详细实现了基于不同距离度量(欧氏、切比雪夫、曼哈顿)的Kmeans聚类算法,并提供了Python代码,展示了使用曼哈顿距离计算距离矩阵并输出k=3时的聚类结果和轮廓系数评价指标。
67 1
|
5月前
|
机器学习/深度学习 算法 数据挖掘
机器学习与智能优化——利用简单遗传算法优化FCM
机器学习与智能优化——利用简单遗传算法优化FCM
62 5
|
5月前
|
机器学习/深度学习 算法 搜索推荐
机器学习中的聚类
**文章摘要:** 本文介绍了聚类算法的基本概念、应用、实现流程和评估方法。聚类是一种无监督学习技术,用于将数据分为相似的组,如K-means、层次聚类、DBSCAN和谱聚类。K-means算法通过迭代优化质心,将数据点分配到最近的簇,直至质心不再变化。模型评估包括误差平方和(SSE)、肘部方法(确定最佳簇数)和轮廓系数法(Silhouette Coefficient),以量化聚类的紧密度和分离度。应用场景涵盖用户画像、广告推荐和图像分割等。在Python的sklearn库中,可以使用KMeans API进行聚类操作。
|
5月前
|
机器学习/深度学习 算法 数据挖掘
机器学习——DBSCAN 聚类算法
【6月更文挑战第8天】DBSCAN是一种基于密度的无监督聚类算法,能处理不规则形状的簇和噪声数据,无需预设簇数量。其优点包括自动发现簇结构和对噪声的鲁棒性。示例代码展示了其基本用法。然而,DBSCAN对参数选择敏感,计算效率受大规模数据影响。为改善这些问题,研究方向包括参数自适应和并行化实现。DBSCAN在图像分析、数据分析等领域有广泛应用,通过持续改进,将在未来保持重要地位。
73 2
|
5月前
|
机器学习/深度学习 分布式计算 算法
在机器学习项目中,选择算法涉及问题类型识别(如回归、分类、聚类、强化学习)
【6月更文挑战第28天】在机器学习项目中,选择算法涉及问题类型识别(如回归、分类、聚类、强化学习)、数据规模与特性(大数据可能适合分布式算法或深度学习)、性能需求(准确性、速度、可解释性)、资源限制(计算与内存)、领域知识应用以及实验验证(交叉验证、模型比较)。迭代过程包括数据探索、模型构建、评估和优化,结合业务需求进行决策。
57 0
|
5月前
|
机器学习/深度学习 算法 数据可视化
技术心得记录:机器学习笔记之聚类算法层次聚类HierarchicalClustering
技术心得记录:机器学习笔记之聚类算法层次聚类HierarchicalClustering
51 0
|
5月前
|
机器学习/深度学习 算法 搜索推荐
机器学习聚类算法
聚类算法是无监督学习技术,用于发现数据集中的自然群体,如用户画像、广告推荐等。常见的聚类算法包括K-Means,它基于距离分配样本至簇,适合球形分布;层次聚类则通过合并或分裂形成簇,能发现任意形状的簇;DBSCAN依据密度来聚类,对噪声鲁棒。KMeans API中`sklearn.cluster.KMeans(n_clusters=8)`用于指定簇的数量。评估聚类效果可使用轮廓系数、SSE等指标,Elbow方法帮助选择合适的K值。