分类判决界面---位势函数法

       本篇文章是博主在人工智能等领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在AI学习笔记:

      AI学习笔记(10)---《分类判决界面---位势函数法》

分类判决界面---位势函数法

目录

一、算法原理

二、实验要求

三、实验程序

四、实验结果


一、算法原理

        位势函数算法是利用物理概念,通过训练模式对特征空间中的累积位势函数修正,使累积位势函数对训练模式具有正确分类的性质,从而以其作为判别函数。由于位势函数是非线性的,所以由位势函数训练算法产生的判别函数是非线性的。该方法可用于非线性可分情况,也可用于线性可分情况。位势函数选取的灵活性使位势函数法有很强的分类能力。设训练模式集为{x1, x2, ..., xN}它们分属 w1 w2 类,定义一个位势函数K(x, xj)。初始化,令特征空间中各点处的初始累积位势函数 K0(x)=0,判错计数 m=0。令 j=1,输人训练模式 x1,使累积位势函数

其他分类判决界面方法见

分类判决界面---W-H、H-K算法


二、实验要求

已知两类训练样本:

        w1:x1 = (1, 1)x2 = (2, 1)

        w2:x3 = (-1, -1)x4 = (-2, -1)

采用位势函数法编程实现分类器设计


三、实验程序

main.m文件

%% 判别域代数界面方程法
clc;
close all;

%% 位势函数法
% 数据
Y = [1, 1; 2, 1; -1, -1; -2, -1];
% 标签
Label = [1 1 2 2];
% 位势函数法求判决界面
[Kx,alpha] = potential_function(Y, Label);
disp("位势函数表达式:");
disp(Kx);
disp("alpha数值:");
disp(alpha);
% 画图
figure()
x1 = Y(:, 1);
y1 = Y(:, 2);
N2 = size(Label,2);
% 绘制判决界面
x = [-3 3];
y = -x;
plot(x,y,'black')
hold on
% 绘制数据散点图
for i = 1:N2
    if Label(i) == 1
        scatter(x1(i),y1(i),"filled","o",'g');
        hold on
    end
    if Label(i) == 2
        scatter(x1(i),y1(i),"filled","o",'b');
        hold on
    end
end
axis([-3, 3, -2, 2]);
title('位势函数法的判决界面');

potential_function.m文件

function [K, alpha] = potential_function(samples, labels)
    %%%%%%%%%% Begin %%%%%%%%%%
    %% 初始化
    K0 = 0;                      %累积位势
    j = 1;                       %训练次数
    m = 0;                       %判错次数
    
    j_max = 100;                 %最大的循环次数
    
    [row, col] = size(samples);
    
    syms x1 x2 real;             %定义符号常量
    
    %% j=1的累积位势函数
    K = K0 + potential([x1 x2], samples(1, :));
    
    j = j + 1;
    K_old = K;

    while 1
        for i = 1 : row
            %% 逐次训练
            x1 = samples(i, 1);
            x2 = samples(i, 2);
            K_V = subs(K_old);      %将符号表达式中的符号变量替换为指定的值

            syms x1 x2 real;        %定义符号常量      
            K = potential([x1 x2], samples(i, :));

            % 计算赏罚因子
            if labels(i) == 1 && K_V > 0
                alpha = 0;
            elseif labels(i) == -1 && K_V < 0
                alpha = 0;
            elseif labels(i) == 1 && K_V <= 0
                alpha = 1;
            elseif labels(i) == -1 && K_V >= 0 
                alpha = -1;
            end

            % 迭代累积位势
            K_new = K_old + alpha * K;

            K_old = K_new;

            % 累加错判次数
            m = m + abs(alpha);
            
            % 循环控制
            if j < j_max
                j = j + 1;
            else
                disp('已到最大迭代次数');
                break
            end
        end
        
        %% 总检查:训练可否结束
        if m == 0
            K = K_new;
            break
        else
            m = 0;
        end
     
    end
       
    %%%%%%%%%% End %%%%%%%%%%
    
end

function [result] = potential(X,Xk)
    result = exp(-(X(1)-Xk(1)) ^2 - (X(2)-Xk(2))^2);
    %result = exp(-norm(X-Xk,2));
end

四、实验结果


     文章若有不当和不正确之处,还望理解与指出。由于部分文字、图片等来源于互联网,无法核实真实出处,如涉及相关争议,请联系博主删除。如有错误、疑问和侵权,欢迎评论留言联系作者,或者私信联系作者。

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不去幼儿园

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值