m基于K-means聚类算法和神经网络的模糊控制器设计matlab仿真

简介: m基于K-means聚类算法和神经网络的模糊控制器设计matlab仿真

1.算法描述

   聚类就是按照某个特定标准把一个数据集分割成不同的类或簇,使得同一个簇内的数据对象的相似性尽可能大,同时不在同一个簇中的数据对象的差异性也尽可能地大。即聚类后同一类的数据尽可能聚集到一起,不同类数据尽量分离。​主要的聚类算法可以划分为如下几类:划分方法、层次方法、基于密度的方法、基于网格的方法以及基于模型的方法。下面主要对k-means聚类算法、凝聚型层次聚类算法、神经网络聚类算法之SOM,以及模糊聚类的FCM算法通过通用测试数据集进行聚类效果的比较和分析。

   k-means是划分方法中较经典的聚类算法之一。由于该算法的效率高,所以在对大规模数据进行聚类时被广泛应用。目前,许多算法均围绕着该算法进行扩展和改进。k-means算法以k为参数,把n个对象分成k个簇,使簇内具有较高的相似度,而簇间的相似度较低。k-means算法的处理过程如下:首先,随机地 选择k个对象,每个对象初始地代表了一个簇的平均值或中心;对剩余的每个对象,根据其与各簇中心的距离,将它赋给最近的簇;然后重新计算每个簇的平均值。 这个过程不断重复,直到准则函数收敛。

算法流程:​

输入:包含n个对象的数据和簇的数目k;​

输出:n个对象到k个簇,使平方误差准则最小。​

步骤:  

(1) 任意选择k个对象作为初始的簇中心; 

(2) 根据簇中对象的平均值,将每个对象(重新)赋予最类似的簇; 

(3) 更新簇的平均值,即计算每个簇中对象的平均值;  

(4) 重复步骤(2)、(3)直到簇中心不再变化;

层次聚类算法
根据层次分解的顺序是自底向上的还是自上向下的,层次聚类算法分为凝聚的层次聚类算法和分裂的层次聚类算法。 凝聚型层次聚类的策略是先将每个对象作为一个簇,然后合并这些原子簇为越来越大的簇,直到所有对象都在一个簇中,或者某个终结条件被满足。绝大多数层次聚类属于凝聚型层次聚类,它们只是在簇间相似度的定义上有所不同。

算法流程:

注:以采用最小距离的凝聚层次聚类算法为例:

(1) 将每个对象看作一类,计算两两之间的最小距离;

(2) 将距离最小的两个类合并成一个新类;

(3) 重新计算新类与所有类之间的距离; 

(4) 重复(2)、(3),直到所有类最后合并成一类。

  神经网络的训练主要包括两个部分:正向传播和反向传播两个过程。正向传播得到损失值,反向传播得到梯度。最后通过梯度值完成权值更新(其中梯度就是一个偏导数向量)。采用反向传播算法构建神经网络的模型,可以实现扑克牌数据集的多分类问题。搭建神经网络的主要步骤:

训练的数据
定义节点准备接收数据
定义神经层:隐藏层和预测层
定义 loss 表达式
选择 optimizer 使 loss 达到最小
保存训练结果 对扑克牌数据集进行简单的预处理,读取预处理后的数据加载到神经网络中,搭建有 4 个隐藏层的神经网络。神经网络与感知器的最大的一个区别在于:感知器的激活函数是节阶跃的而神经网络的激活函数是非线性的,从而给神经网络引入了非线性的因素。在对扑克牌的数据集进行训练是使用 ReLU 为每个隐藏层的激活函数,式 (1) 是 ReLU 的函数表达式,如图 1.1 是 ReLU 的函数图像。

   在模糊神经网络设计中,模糊规则的建立是系统设计的瓶颈问题,所以有关神经网络与模糊系统相结合的研究大多集中在模糊神经网络的建模,模糊神经网络结构和算法的研究是国内外学者研究的热点,新模糊神经网络模型和学习算法不断涌现。
   模糊神经网络一般结构如图1所示。第一层为输入层,缓存输入信号。第二层为模糊化层,对输入信号进行模糊化。第三层为模糊规则层。第四层为模糊决策层,主要针对满足一定条件的量进行分类并将模糊量去模糊化。第五层为输出层,输出运算结果。

1.png

2.仿真效果预览
matlab2022a仿真结果如下:

2.png
3.png
4.png
5.png
6.png
7.png
8.png

3.MATLAB核心程序

      15.063   -8.05   0;
       6.943    0     -1];
 
A  = A/max(max(abs(A)));   
   
C2 = [0 0;
      0 1;
      1 0];
  
Ku  = 0.7;
Ke  = 1;
Kec = 1;
K   = 1;
 
%闭环控制器
for k=1:SIM_times
    k
    time(k) = k*ts;
    %定义输入信号
    din(k)   = 2;  
    %定义输出信号
 
    %定义干扰
    q = 0.012 + (0.142 - 0.012) * rand(1,1);
    %定义输出
    Tmp = A * [x,s,o]' + C2 * [(1+Ku)*u1,q]';
 
    o   = Tmp(3);
    
    yout(k)   = o;
 
    e(k)      = yout(k) - din(k);
 
 
    x1   =(1-exp(-10*Ke*e1))/(1+exp(-10*Ke*e1));
    x2   =(1-exp(-Kec*ec))/(1+exp(-Kec*ec));
    
    %第1层输出
    for i=1:7
        o11(i) = x1;
        o12(i) = x2;
    end
    o1=[o11;o12];
    
    %第2层输出
    for i=1:2
        for j=1:7
            z1(i,j)  =-((o1(i,j)-a(i,j))^2)/(b(i,j));
            o2(i,j)  =  exp(z1(i,j));
        end
    end
    
    %第3层输出
    for j=1:7
        for l=1:7
            o3((j-1)*7+l)=o2(1,j)*o2(2,l);
        end
    end
    
    %第4层输出
    I=0;
    for i=1:49
        I = I + o3(i)*Weight(i);
    end
 
    o4   = I/(sum(o3));
    u(k) = o4;
    u1   =-u(k);
 
    e1        = e(k);
    ec        = e(k)-error1;
    error1    = e(k);    
 
    %梯度下降法调整权值
    for i=1:49
        dwp       =  e1*du*o3(i)/(sum(o3));
        %迭代
        Weight(i) =  Weight(i) + eta*dwp;
    end
 
    %中心值更新
    da11=zeros(1,7);
    for j=1:7
        for l=1:7
            da11(j) =  da11(j)+(o2(2,l)*((Weight((j-1)*7+l)*sum(o3))-I));
        end
        da12(1,j)   = -e1*du*(2*(o1(1,j)-a(1,j))*(o2(1,j)))/((b(1,j)^2)*(sum(o3))^2);
        da1(j)      = (da12(1,j))*(da11(j));
    end
    da21 = zeros(1,7);
    for j=1:7
        for l=1:7
            da21(j) = da21(j)+(o2(1,l)*((Weight((l-1)*7+j)*sum(o3))-I));
        end
        da22(2,j) = -e1*du*(2*(o1(2,j)-a(2,j))*(o2(2,j))/((b(2,j)^2)*(sum(o3))^2));
        da2(j)    = (da22(2,j))*(da21(j));
    end      
    da=[da1;da2];
    for i=1:2
        for j=1:7
            a(i,j)=a(i,j)-eta*da(i,j);
        end
    end             
    a_s(:,:,k) = a;
    
    if k == 1
       a_(:,:,k) = a_s(:,:,1);
    else
       for i = 1:2
           for j = 1:7
               dist_tmp(i,j) = (a_s(i,j,k) - a_(i,j))^2;
           end
       end
       dist = sqrt(sum(sum(dist_tmp))); 
       
       if dist < 0.1
           
          tmps(:,:,1) = a_(:,:,k-1);
          tmps(:,:,2) = a_s(:,:,k);
           
          a_(:,:,k) = mean(tmps(:,:,1:2),3);
       else
          a_(:,:,k) = a_(:,:,k-1);
       end
    end
    
相关文章
|
1天前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
101 80
|
1天前
|
监控 算法 数据安全/隐私保护
基于扩频解扩+turbo译码的64QAM图传通信系统matlab误码率仿真,扩频参数可设置
该通信系统基于MATLAB 2022a仿真,适用于高要求的图像传输场景(如无人机、视频监控等),采用64QAM调制解调、扩频技术和Turbo译码提高抗干扰能力。发射端包括图像源、64QAM调制器、扩频器等;接收端则有解扩器、64QAM解调器和Turbo译码器等。核心程序实现图像传输的编码、调制、信道传输及解码,确保图像质量和传输可靠性。
25 16
|
1天前
|
机器学习/深度学习 人工智能 算法
基于GRNN广义回归网络和MFCC的语音情绪识别matlab仿真,对比SVM和KNN
该语音情绪识别算法基于MATLAB 2022a开发,可识别如悲伤等情绪,置信度高达0.9559。核心程序含中文注释及操作视频。算法采用MFCC特征提取与GRNN广义回归网络,通过预加重、分帧、加窗、FFT、梅尔滤波器组、对数运算和DCT等步骤处理语音信号,实现高效的情绪分类。
|
20天前
|
算法
基于WOA算法的SVDD参数寻优matlab仿真
该程序利用鲸鱼优化算法(WOA)对支持向量数据描述(SVDD)模型的参数进行优化,以提高数据分类的准确性。通过MATLAB2022A实现,展示了不同信噪比(SNR)下模型的分类误差。WOA通过模拟鲸鱼捕食行为,动态调整SVDD参数,如惩罚因子C和核函数参数γ,以寻找最优参数组合,增强模型的鲁棒性和泛化能力。
|
26天前
|
机器学习/深度学习 算法 Serverless
基于WOA-SVM的乳腺癌数据分类识别算法matlab仿真,对比BP神经网络和SVM
本项目利用鲸鱼优化算法(WOA)优化支持向量机(SVM)参数,针对乳腺癌早期诊断问题,通过MATLAB 2022a实现。核心代码包括参数初始化、目标函数计算、位置更新等步骤,并附有详细中文注释及操作视频。实验结果显示,WOA-SVM在提高分类精度和泛化能力方面表现出色,为乳腺癌的早期诊断提供了有效的技术支持。
|
6天前
|
供应链 算法 调度
排队算法的matlab仿真,带GUI界面
该程序使用MATLAB 2022A版本实现排队算法的仿真,并带有GUI界面。程序支持单队列单服务台、单队列多服务台和多队列多服务台三种排队方式。核心函数`func_mms2`通过模拟到达时间和服务时间,计算阻塞率和利用率。排队论研究系统中顾客和服务台的交互行为,广泛应用于通信网络、生产调度和服务行业等领域,旨在优化系统性能,减少等待时间,提高资源利用率。
|
13天前
|
存储 算法
基于HMM隐马尔可夫模型的金融数据预测算法matlab仿真
本项目基于HMM模型实现金融数据预测,包括模型训练与预测两部分。在MATLAB2022A上运行,通过计算状态转移和观测概率预测未来值,并绘制了预测值、真实值及预测误差的对比图。HMM模型适用于金融市场的时间序列分析,能够有效捕捉隐藏状态及其转换规律,为金融预测提供有力工具。
|
22天前
|
算法
基于GA遗传算法的PID控制器参数优化matlab建模与仿真
本项目基于遗传算法(GA)优化PID控制器参数,通过空间状态方程构建控制对象,自定义GA的选择、交叉、变异过程,以提高PID控制性能。与使用通用GA工具箱相比,此方法更灵活、针对性强。MATLAB2022A环境下测试,展示了GA优化前后PID控制效果的显著差异。核心代码实现了遗传算法的迭代优化过程,最终通过适应度函数评估并选择了最优PID参数,显著提升了系统响应速度和稳定性。
|
13天前
|
机器学习/深度学习 算法 信息无障碍
基于GoogleNet深度学习网络的手语识别算法matlab仿真
本项目展示了基于GoogleNet的深度学习手语识别算法,使用Matlab2022a实现。通过卷积神经网络(CNN)识别手语手势,如&quot;How are you&quot;、&quot;I am fine&quot;、&quot;I love you&quot;等。核心在于Inception模块,通过多尺度处理和1x1卷积减少计算量,提高效率。项目附带完整代码及操作视频。
|
19天前
|
算法
基于WOA鲸鱼优化的购售电收益与风险评估算法matlab仿真
本研究提出了一种基于鲸鱼优化算法(WOA)的购售电收益与风险评估算法。通过将售电公司购售电收益风险计算公式作为WOA的目标函数,经过迭代优化计算出最优购电策略。实验结果表明,在迭代次数超过10次后,风险价值收益优化值达到1715.1万元的最大值。WOA还确定了中长期市场、现货市场及可再生能源等不同市场的最优购电量,验证了算法的有效性。核心程序使用MATLAB2022a实现,通过多次迭代优化,实现了售电公司收益最大化和风险最小化的目标。