本篇文章是博主在人工智能等领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在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
四、实验结果
文章若有不当和不正确之处,还望理解与指出。由于部分文字、图片等来源于互联网,无法核实真实出处,如涉及相关争议,请联系博主删除。如有错误、疑问和侵权,欢迎评论留言联系作者,或者私信联系作者。