首页 > 编程语言 >“降维模糊C均值(PCA-FCM)”创新算法的聚类与可视化

“降维模糊C均值(PCA-FCM)”创新算法的聚类与可视化

时间:2024-10-10 21:51:47浏览次数:3  
标签:end center FCM 降维 聚类 PCA data col

在这篇博客中,我们将探讨一个MATLAB代码示例,它展示了如何从Excel文件导入数据,进行模糊C均值(FCM)聚类,并通过2D和3D图形可视化聚类结果。让我们一步一步地深入这个过程!

1. 环境准备

首先,我们需要清空工作环境,以确保没有旧变量干扰我们的结果。这可以通过以下几行代码实现:

clear; clc; close all;

2. 导入数据

接下来,我们从名为data.xlsx的Excel文件中读取数据。这里,我们使用xlsread函数来加载数据,并获取数据的行数和列数:

filename = 'data.xlsx';
data = xlsread(filename);
[data_n, in_n] = size(data);

3. 数据降维

如果我们的数据特征超过3列,我们将使用主成分分析(PCA)将数据降维到3个主成分。这是为了确保我们能够有效地进行可视化:

if in_n > 3
    [coeff, score, ~] = pca(data);
    data = score(:, 1:3);
    in_n = 3;
end

4. 绘制原始数据

在降维后,我们可以绘制原始数据。如果数据是2D的,我们使用plot函数;如果是3D的,则使用plot3函数

if in_n == 2
    plot(data(:, 1), data(:, 2), 'ro', 'MarkerSize', 8);
    xlabel '横坐标X'; ylabel '纵坐标Y'; title '样本数据(2D)';
elseif in_n == 3
    plot3(data(:, 1), data(:, 2), data(:, 3), 'ro', 'MarkerSize', 8);
    xlabel 'X轴'; ylabel 'Y轴'; zlabel 'Z轴'; title '样本数据(3D)';
    grid on;
end

 

5. 初始化FCM聚类参数

接下来,我们初始化FCM的相关参数,包括分类数K、最大迭代次数maxgen、模糊指数alpha和阈值threshold。并初始化隶属度矩阵U:

K = 4; maxgen = 100; alpha = 3; threshold = 1e-6;
U = rand(K, data_n);
col_sum = sum(U);
U = U ./ col_sum(ones(K, 1), :);

6. FCM聚类迭代

在主循环中,我们更新聚类中心、计算距离和目标函数,并更新隶属度矩阵,直到满足终止条件:

for i = 1:maxgen
    mf = U.^alpha;
    center = mf * data ./ ((ones(in_n, 1) * sum(mf'))');
    
    dist = zeros(size(center, 1), data_n);
    for k = 1:size(center, 1)
        dist(k, :) = sqrt(sum(((data - ones(data_n, 1) * center(k, :)).^2)', 1));
    end
    J(i) = sum(sum((dist.^2) .* mf));
    
    tmp = dist.^(-2/(alpha-1));
    U = tmp ./ (ones(K, 1) * sum(tmp));
    
    if i > 1 && abs(J(i) - J(i-1)) < threshold
        break;
    end
end

7. 绘制聚类结果

最后,我们绘制聚类结果。如果数据是2D的,我们使用plot;如果是3D的,我们使用plot3

if in_n == 2
    figure('Name', '2D FCM聚类结果');
    hold on;
    for i = 1:K
        col = find(index == i);
        plot(data(col, 1), data(col, 2), '*', 'MarkerSize', 8, 'Color', colors(i));
    end
    plot(center(:, 1), center(:, 2), 'p', 'color', 'm', 'MarkerSize', 12, 'MarkerFaceColor', 'k');
    title '2D FCM优化后的聚类图';
    grid on;
end

if in_n == 3
    figure('Name', '3D FCM聚类结果');
    hold on;
    for i = 1:K
        col = find(index == i);
        plot3(data(col, 1), data(col, 2), data(col, 3), '*', 'MarkerSize', 8, 'Color', colors(i));
    end
    plot3(center(:, 1), center(:, 2), center(:, 3), 'p', 'color', 'm', 'MarkerSize', 12, 'MarkerFaceColor', 'k');
    title '3D FCM优化后的聚类图';
    grid on;
end

8. 目标函数变化过程

最后,我们绘制目标函数的变化过程,以便观察算法的收敛情况:

figure;
plot(J, 'r', 'linewidth', 2);
xlabel '迭代次数'; ylabel '目标函数值';
title 'FCM聚类目标函数变化过程';
grid on;

 

总结

通过上述代码,我们可以实现从数据导入、降维到聚类和可视化的完整流程。这种方法不仅简洁明了,还提供了清晰的视觉反馈,帮助我们更好地理解聚类效果。希望这篇博客能够为你在MATLAB中的数据分析和聚类提供一些实用的启示!如果你有任何问题或建议,欢迎留言讨论!

附件:测试数据生成代码

% 生成4列100行的随机数据
data = rand(100, 4);

% 保存为data.xlsx
writematrix(data, 'data.xlsx');

% 显示生成的数据
disp(data);

标签:end,center,FCM,降维,聚类,PCA,data,col
From: https://blog.csdn.net/subject625Ruben/article/details/142734053

相关文章

  • 关于九种降维算法的一份介绍
    在这篇文章中我将介绍有关降维的一些东西,其中包括一些常见降维方法的概念、用途、优缺点以及python代码。一、概念降维是机器学习中常用到的一种技术,其用于减少数据集的维度,但又能保存数据集的重要信息,从而简化数据的处理,并提高计算效率、调高模型的性能以及方便可视化。二......
  • 洛谷P10336 [UESTCPC 2024] 2-聚类算法
    涉及知识点:博弈、贪心题意Alice和Bob在玩选点游戏,所有的点在一个\(k\)维空间中,他们轮流选走一个点放入自己的集合中,Alice先手。定义集合\(S\)的权值\(val(S)\)为集合中点两两之间的\(k\)维曼哈顿距离之和。Alice的得分为\(val(S_A)-val(S_B)\),Bob的得分为\(val(......
  • 【机器学习-无监督学习】降维与主成分分析
    【作者主页】FrancekChen【专栏介绍】⌈⌈⌈Python机器学习⌋......
  • [Python数据分析]最通俗入门Kmeans聚类分析,可视化展示代码。
     什么是k-means分析?【头条@William数据分析,看原版】    想象一下,你有一堆五颜六色的糖果,你想把它们按照颜色分成几堆。k-means分析就是这么一个自动分类的过程。它会根据糖果的颜色特征,把它们分成若干个组,每个组里的糖果颜色都比较相似。更专业一点说,k-means分析是一......
  • OPENCV判断图像中目标物位置及多目标物聚类
    文章目录在最近的项目中,又碰到一个有意思的问题需要通过图像算法来解决。就是显微拍摄的到的医疗图像中,有时候目标物比较偏,也就是在图像的比较偏的位置,需要通过移动样本,将目标物置于视野正中央,然后再次进行拍摄。就类似于下面的图像:基于这个需求,在图像上就需要使......
  • php: 查看opcache的使用情况
    一,代码:opcache的各项参数设置效果怎么样?是否需要调整?我们需要了解一个opcache使用情况的统计,以供调整参数时处理看php代码:<?php//确保已经启用了Opcacheif(extension_loaded('ZendOPcache')&&function_exists('opcache_get_status')){$status=opcache_get_stat......
  • 关于聚类算法的一份介绍
    在这篇文章中我将介绍无监督算法中“聚类”部分的知识,其中关于K均值聚类、层次聚类、密度聚类部分我将各附上一份实际运用的代码,而其余的像学习向量量化、高斯混合聚类部分则只是简单介绍下概念。一、关于聚类首先我先简单介绍下聚类算法有关的东西。1.1聚类任务我们知道......
  • 【机器学习-无监督学习】聚类
    【作者主页】FrancekChen【专栏介绍】⌈⌈⌈Python机器学习⌋......
  • 日新月异 PyTorch - pytorch 基础: K-means 聚类算法(sklearn.cluster 的 KMeans 实现,
    源码https://github.com/webabcd/PytorchDemo作者webabcd日新月异PyTorch-pytorch基础:K-means聚类算法(sklearn.cluster的KMeans实现,对一个包含10个特征的数据做分类)示例如下:basic\demo07.py'''K-means聚类算法(sklearn.cluster的KMeans实现,对一个包含1......
  • 聚类分析 | FCM模糊c均值聚类,三种优化算法(SSA、PSO、GA)对FCM初始中心点寻优
    聚类分析|FCM模糊c均值聚类,三种优化算法(SSA、PSO、GA)对FCM初始中心点寻优目录聚类分析|FCM模糊c均值聚类,三种优化算法(SSA、PSO、GA)对FCM初始中心点寻优效果一览基本介绍程序设计参考资料效果一览基本介绍聚类分析|FCM模糊c均值聚类,三种优化算法(SSA、PSO、GA)对FCM初始中心点......