MATLAB实现智能计算方法实验:实验一 模糊聚类分析

资源链接

MATLAB实现智能计算方法课程所有实验代码资源链接为:MATLAB实现智能计算方法课程所有实验代码资源

实验汇总

MATLAB实现智能计算方法课程所有实验汇总博客链接为:MATLAB实现智能计算方法实验汇总

实验目的

  1. 掌握数据文件的标准化、模糊相似矩阵的建立方法、学会传递闭包矩阵的求解方法;
  2. 学会使用MATLAB软件(Python)进行模糊矩阵的编程运算和仿真,实现模糊聚类分析。

实验内容

  1. 根据下面表格中的数据,用Matlab(或Python)编程进行数据标准化处理;

  2. 根据标准化处理后的数据,用Matlab(或Python)编程,建立模糊相似矩阵,并编程求出其传递闭包矩阵;

  3. 根据模糊等价矩阵,编程绘制动态聚类图;

  4. 根据原始数据,编程确定最佳分类结果。

    no Y1 Y2 Y3 Y4 Y5 Y6
    x1 21 63 19 40 1.567 106
    x2 23 74 30 75 2.693 54
    x3 119 179 86 118 6.897 9
    x4 115 168 49 89 2.637 29
    x5 79 146 46 92 2.356 24
    x6 79 158 48 103 2.142 7
    x7 65 114 58 99 2.679 7
    x8 68 119 58 96 3.099 6
    x9 109 166 59 95 2.868 6
    x10 118 177 56 89 2.64 7

实验步骤

1. 标准化处理

  • 建立原始数据矩阵

    依据题意,建立10×6的原始矩阵A,在matlab中表示如下图:

    图1.1 原始数据矩阵

    图1.1 原始数据矩阵
  • 数据规格化

    对原始矩阵应用极差正规化方法进行数据规格化,运用matlab编写fuzz函数,代码如下:

    function n = fuzz(A)
    [hei, wid] = size(A);
     n = zeros(hei, wid);
     for i = 1: hei
            for j = 1: wid
                n(i, j) = (A(i, j) - min(A(:, j)))/(max(A(:, j)) - min(A(:,j)));
            end
     end
     end
    

    在命令行输入n = fuzz(A)调用该函数,得到数据矩阵n如下图。

    图1.2 数据规格化

    图1.2 数据规格化

2. 建立模糊等价矩阵

  • 建立模糊相似矩阵

    对数据矩阵应用最大最小法得到模糊相似矩阵,编写fuzzs函数,代码如下:

    function m = fuzzs(n)
    [hei, wid] = size(n);
     m = zeros(hei, hei);
     for i = 1: hei
            for j = 1: hei
                maxnum = 0;
                minnum = 0;
                for k = 1: wid
                    maxnum = maxnum + max(n(i, k), n(j, k));
                    minnum = minnum + min(n(i, k), n(j, k));
                end
                m(i, j) = minnum/maxnum;
            end
     end
     end
    

    在命令行输入m = fuzzs(n)调用该函数,得到模糊相似矩阵m如下图。

    图2.1 模糊相似矩阵

    图2.1 模糊相似矩阵
  • 建立模糊等价矩阵

    应用传递闭包方法将模糊相似矩阵转化为模糊等价矩阵,编写synt函数,代码如下:

    function ab = synt(a)
    [hei, wid] = size(a);
    ab = zeros(hei, wid);
    flag = 0;
    while(flag == 0) 
        m = size(a, 1);
        n = size(a, 2);
        for i = 1: m
            for j = 1 :n 
                ab(i, j) = max(min([a(i, :);a(:, j)']));
            end
        end
        if(ab == a)
            flag = 1;
        else
            a = ab;
        end
    end
    end
    

    输入m0 = synt(m)调用该函数,得到模糊等价矩阵m0如下图。

    图2.2 模糊等价矩阵

    图2.2 模糊等价矩阵

3. 动态聚类

  • -截矩阵

    根据模糊等价矩阵,建立-截矩阵,按由大到小进行聚类,编写jjz4函数,代码如下:

    function[D, k] = jjz4(b)
    L = unique(b)';
    a = size(b);
    D = zeros(a);
    for m = length(L): -1 : 1
        k = L(m);
        for i = 1: a 
            for j = 1: a 
                if b(i, j) >= k 
                    D(i, j) = 1;
                else
                    D(i, j) = 0;
                end
            end
        end
        B = unique(D, 'rows');
            [hei] = size(B);
        for j = 1: hei
            eval(['L', num2str(j) '= [];'])
        end
        for i = a: -1: 1
            for j = 1: hei
                if D(i, :) == B(j, :)           
                    p = eval(['L', num2str(j);]);
                    p = [['x', num2str(i), ' '] p];
                    eval(['L', num2str(j) '= p;']);
                end
            end
        end
        fprintf("当分类系数k=%5.4f时,", L(m));
        fprintf("所得截距阵为:\n\n");
        disp(D);
        fprintf("分类结果为:\n");
        for j = 1: hei
            fprintf("第%d类:", j);
            disp(eval(['L', num2str(j);]));
        end
        fprintf("\n");
    end
    end
    

    输入jjz4(m0)调用该函数,为了便于看到所有的结果,先将显示截距阵的一行代码注释掉,运行得到所有分类结果如下图。

    图3.1 所有分类结果

    图3.1 所有分类结果

    选取 = 0.8791时函数得到的截距阵及分类结果图如下。
    图3.2 =0.8791时截距阵

    图3.2 =0.8791时截距阵
  • 动态聚类图

    根据分类结果绘制动态聚类图如下。
    图3.3 动态聚类图

    图3.3 动态聚类图

4. 确立最佳分类结果

  • =0.8374
    =0.8374时具有最佳分类结果,调用jjz4函数得到最佳分类的截距阵及分类结果如下图。

    图4.1 最佳分类的截距阵及分类结果

    图4.1 最佳分类的截距阵及分类结果

    由图可知一共分为了6类,其中x7,x8一类,x5,x6一类,x4,x9,x10一类,x1,x2,x3单独成一类。

你可能感兴趣的:(智能计算方法,matlab,python,机器学习,智能计算方法,人工智能)