天天看点

matlab实现PLA算法

分类模型感知器学习算法(Perceptron Learning Algorithm, PLA)

PLA算法的一个简单应用场景:假设一家银行要根据顾客的资产、居住年限、未偿债务和其他数据字段来评估是否要给这名顾客发放信用卡,用y来表示是否批准或者(-1/1)。

现在已经知道了顾客的数据和y的结果,想要知道判断发放信用卡的公式,我们在这里选择的函数形式h(x)给x的不同坐标赋予了不同的权重,反映了它们在信贷决策中的相对重要性。然后将加权坐标合并形成信用评分,并将结果与阈值进行比较。如果申请人通过了门槛,信用证被批准;如果不通过,信用证被拒绝。

h(x)=+1表示“批准信用”,h(x)=-1表示“拒绝信用”;

知乎上一个关于PLA算法的通俗易懂的描述

以下求出权重的matlab代码

clear
load data

%%
tr_label=data(:,end)%取最后一列判断数据
tr_data=data(1:360,1:end-1);%输入 x 前360行的数据
tr_label=data(1:360,end);%标签y 前360的所有数据(包括判断)
[trnum,Dim]=size(tr_data);%trnum=360行 Dim=4列

w=ones(1,Dim+1);%x对应的权重 生成1*5的1矩阵 初始权重都是1

x=[ones(trnum,1) tr_data];%加上x0 输出第一列是1和前360行的数据矩阵
h=zeros(trnum,1);%sign函数的输出值 生成360*1个零矩阵用来存放数据

while 1% 求权重W=[w0,w1,,,wd]^T
    for i=1:trnum  %对所有个体循环
        h(i,:)=sign(x(i,:)*w');%计算函数的输出值 1或者-1
        if h(i,:)~=tr_label(i,:)%若函数的输出与真实值不符合
            w=w+tr_label(i,:)*x(i,:);%对权重更新,再判断下一个个体(可以用上面链接内的向量解释)
        end
    end
    if h==tr_label%循环直到所有行的函数输出与真实值相同
        break
    end
end

%此时的w是最优权重
           

继续阅读