【聚类分析】基于matlab交通干道车流量FCM聚类分析及预测【含Matlab源码 1141期】

举报
海神之光 发表于 2022/05/29 02:33:05 2022/05/29
【摘要】 一、获取代码方式 获取代码方式1: 完整代码已上传我的资源:【聚类分析】基于matlab交通干道车流量FCM聚类分析及预测【含Matlab源码 1141期】 获取代码方式2: 通过订阅紫极神光博客付费...

一、获取代码方式

获取代码方式1:
完整代码已上传我的资源:【聚类分析】基于matlab交通干道车流量FCM聚类分析及预测【含Matlab源码 1141期】

获取代码方式2:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。

备注:
订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);

二、FCM聚类分析简介

伴随着模糊集理论的形成、发展和深化,RusPini率先提出模糊划分的概念。以此为起点和基础,模糊聚类理论和方法迅速蓬勃发展起来。针对不同的应用,人们提出了很多模糊聚类算法,比较典型的有基于相似性关系和模糊关系的方法、基于模糊等价关系的传递闭包方法、基于模糊图论的最大支撑树方法,以及基于数据集的凸分解、动态规划和难以辨别关系等方法。然而,上述方法均不能适用于大数据量的情况,难以满足实时性要求较高的场合,因此实际应用并不广泛。

模糊聚类分析按照聚类过程的不同大致可以分为三大类:

(1)基于模糊关系的分类法:其中包括谱系聚类算法(又称系统聚类法)、基于等价关系的聚类算法、基于相似关系的聚类算法和图论聚类算法等等。它是研究比较早的一种方法,但是由于它不能适用于大数据量的情况,所以在实际中的应用并不广泛。

(2)基于目标函数的模糊聚类算法:该方法把聚类分析归结成一个带约束的非线性规划问题,通过优化求解获得数据集的最优模糊划分和聚类。该方法设计简单、解决问题的范围广,还可以转化为优化问题而借助经典数学的非线性规划理论求解,并易于计算机实现。因此,随着计算机的应用和发展,基于目标函数的模糊聚类算法成为新的研究热点。

(3)基于神经网络的模糊聚类算法:它是兴起比较晚的一种算法,主要是采用竞争学习算法来指导网络的聚类过程。

在介绍算法之前,先介绍下模糊集合的知识。

HCM聚类算法

    首先说明隶属度函数的概念。隶属度函数是表示一个对象x 隶属于集合A 的程度的函数,通常记做μA(x),其自变量范围是所有可能属于集合A 的对象(即集合A 所在空间中的所有点),取值范围是[0,1],即0<=μA(x),μA(x)<=1。μA(x)=1 表示x 完全隶属于集合A,相当于传统集合概念上的x∈A。一个定义在空间X={x}上的隶属度函数就定义了一个模糊集合A,或者叫定义在论域X={x}上的模糊子集A’。对于有限个对象x1,x2,……,xn 模糊集合A’可以表示为:

  
 
  • 1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
FCM算法流程图

FCM算法是目前比较流行的一种模糊聚类算法,究其原因大致有以下几个方面:首先,模糊C—均值泛函Jm仍是传统硬C一均值泛函J1的自然推广;硬C一均值泛函J1是一个应用十分广泛的聚类准则,对其在理论上的研究己经相当完善,这就为Jm的研究提供了良好的条件;数学上看,Jm与RS的希尔伯特空间结构(正交投影和均方逼近理论)有密切的关系,因此比其它泛函有更深厚的数学基础;最后,也是最重要的是该目标函数不仅在许多领域获得了非常成功的应用,而且以FCM算法为基础,人们提出的基于其它原型的模糊聚类算法,形成了一大批FCM类型的算法:如模糊C一线(FCL)、模糊C一面(FCP)等聚类算法,分别实现了对呈线状、超平面状结构模式子集(或聚类)的检测。

FCM算法应用到颜色迁移中

    钱小燕等人将聚类算法应用到色彩迁移中,提出了一种基于图像模糊颜色聚类的自适应色彩迁移算法。该算法首先将源图像和目标图像分别转换到lαβ颜色空间:利用FCM 算法把源图像和目标图像划分为具有不同颜色特征的聚类,然后分析图像中的颜色特征:分别算出每个域的匹配权值,对每个目标图像的匹配权值,从源图像中选取一个最接近域作为最佳匹配域;最后根据目标图像各聚类域与源图像中的匹配域之间的关系,引入隶属度因子,两个域的处理结果分别进行加权平均,获得色彩迁移结果。使用FCM的思想对图像进行聚类域划分的思路是:设准备处理图像I的大小是S×H,即对颜色聚类颜色分析的个数是N,N = S×H,则图像I可表示成集合,I={p1 ,p2 ...,pn }。图像被分为c类,每个类的聚类中心为V={v1,v2 ...,vc },用uik表示像素pk隶属于聚类中心Vi的隶属度,定义图像的隶属度矩阵U。具体算法如下:

  
 
  • 1

步骤一:把源图像和目标图像分别从RGB转换到lαβ空间。

步骤二:确定待处理图像聚类域个数c,然后初始化聚类中心。假设加权指数m=2,设定处理的最大迭代次数为50。

步骤三:当迭代次数T 小于50 时,根据初始化聚类中心计算隶属度矩阵。如果pk≠vi,则对于所有的vi ( i=1,2,…,C ),利用下式计算隶属度矩阵。

在这里插入图片描述
在这里插入图片描述

三、部分源代码

clear 
clc
% 注释中前面带数字的地方是您可能需要改的地方。
xls_name = 'road24shiyan0604.xlsx'; % 1.要读取的Excel表格的名字
df = xlsread(xls_name);
data = df(:,2:4);
time = df(:,1)';

%% 聚类处理
% 加权重在这一部分
a = 0;
b = 0;
c = 0;
for k1 = 1:10
    a = a + 0.1;
    for k2 = 1:(10-10*a)
        b = b + 0.1;
        c = 1 - a - b;
        weight = [a,b,c];
        [U,V,objFun] = myfcm(weight, data, 3);

        %% 标记,U倒数第二行是时间,倒数第一行是类别
        U = [U; time; zeros(1,length(data))];
        for i = 1:length(data)
            u = U(1:3,i);
            idx = find(u == max(u));
            U(5,i) = idx(1);
        end
        xlswrite(xls_name, U(5,:)', ['E2:E',num2str(length(data)+1)])

        %% 画聚类图
        colors = ['y', 'm', 'c', 'r', 'g', 'b', 'w', 'k'];
        count = 0;
        figure
        for j = 1:length(data)
            count = count + 1;    
            leibie = U(5,j);
            x = data(j,1);
            y = data(j,2);
            z = data(j,3);
            color = colors(ceil(count/36));
            if leibie == 1
                shape = '*';
            elseif leibie == 2
                shape = 'o';
            elseif leibie == 3
                shape = 'd';
            end
            F1 = plot3(x,y,z,[color,shape], 'MarkerSize', 15);
            hold on
        end
        
        hold off
    end
end
function [U, V,objFcn] = myfcm(weight, data, c, T, m, epsm)  
% fuzzy c-means algorithm  
% 输入: data: 待聚类数据,n行s列,n为数据个数,s为每个数据的特征数  
%        c  :  聚类中心个数  
%        m  :   模糊系数  
% 输出: U  :   隶属度矩阵,c行n列,元素uij表示第j个数据隶属于第i类的程度  
%        V  :  聚类中心向量,c行s列,有c个中心,每个中心有s维特征  
% written by Zhang Jin  
% see also  :  mydist.m  myplot.m  
  
if nargin < 4  
    T = 100;   %默认迭代次数为100  
end  
if nargin < 6  
    epsm = 1.0e-6;  %默认收敛精度  
end  
if nargin < 5  
    m = 2;   %默认模糊系数值为2  
end  
  
[n, s] = size(data);   
% 初始化隶属度矩阵U(0),并归一化  
U0 = rand(c, n);  
temp = sum(U0,1);  
for i=1:n  
    U0(:,i) = U0(:,i)./temp(i);  
end  
iter = 0;   
V(c,s) = 0; 
U(c,n) = 0; 
distance(c,n) = 0;  
  
while( iter<T  )  
    iter = iter + 1;  
%    U =  U0;  
    % 更新V(t)  
    Um = U0.^m;  
    V = Um*data./(sum(Um,2)*ones(1,s));   % MATLAB矩阵相乘啊,好东西  
    % 更新U(t)  
    for i = 1:c  
        for j = 1:n  
            distance(i,j) = mydist(data(j,:),V(i,:),weight);  % 算距离,去data的第j行
        end  
    end  
    U=1./(distance.^m.*(ones(c,1)*sum(distance.^(-m))));   
    objFcn(iter) = sum(sum(Um.*distance.^2));  
    % FCM算法停止条件  
    if norm(U-U0,Inf)<epsm    
   
end  
% myplot(U,objFcn);  


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107

四、运行结果

运行结果1.jpg运行结果2.jpg运行结果3.jpg运行结果4.jpg运行结果5.jpg运行结果6.jpg运行结果7.jpg运行结果8.jpg运行结果9.jpg运行结果10.jpg运行结果11.jpg运行结果18.jpg

五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 由伟,刘亚秀.MATLAB数据分析教程[M].清华大学出版社,2020.
[2]王岩,隋思涟.试验设计与MATLAB数据分析[M].清华大学出版社,2012.

文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。

原文链接:qq912100926.blog.csdn.net/article/details/118964032

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。