机器学习—西瓜书-chapter3—对率回归

本文介绍了一种使用Matlab实现对率回归的方法,并展示了在西瓜数据集3.0α上的应用结果。通过对数据集进行迭代训练,实现了对好瓜与坏瓜的有效分类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编程实现对率回归,并给出西瓜数据集3.0α上的结果

对率函数是任意阶可导的凸函数,这是非常重要的性质。

西瓜数据集3.0

这里写图片描述

暂时不知道什么原因导致,结果差别这么大,记录下来。

%matlab code
%对率回归 西瓜数据集3.0ɑ
old_l=0;    %记录上次计算的l
n=0;    %计算迭代次数
b=[0;0;1];  %初始参数 (自定义)

x = xlsread('E:\matlab-work\watermelon_book\3.0alpha.xlsx', 'sheet1', 'A1:Q3');%数据集包含,第一行17个 ,密度值,第二行17个 ,含糖率
y = xlsread('E:\matlab-work\watermelon_book\3.0alpha.xlsx', 'sheet1', 'A3:Q3');%获取含糖率

while(1)
   cur_l=0;
   bx=zeros(17,1); 
   %计算当前参数下的l
   for i=1:17
        bx(i) = b.'*x(:,i); %获取对应的好瓜坏瓜的判断结果(0,1)
        cur_l = cur_l + ((-y(i)*bx(i)) )+log(1+exp(bx(i)));
   end
 %迭代终止条件
        if abs(cur_l-old_l)<0.001  
            break;
        end
   %更新参数(牛顿迭代法)以及保存当前l
   p1=zeros(17,1);
   n=n+1;
   old_l = cur_l;
   dl=0;
   d2l=0;

   for i=1:17
        p1(i) = 1 - 1/(1+exp(bx(i)));
        dl = dl - x(:,i)*(y(i)-p1(i));
        d2l = d2l + x(:,i) * x(:,i).'*p1(i)*(1-p1(i));
   end
   b = b - d2l\dl;
end

%画出散点图以及计算出的直线
%逐点画  分别表示是否好瓜
for i=1:17     
    if y(i)==1
       plot(x(1,i),x(2,i),'+r');
       hold on;
    else if y(i)==0
          plot(x(1,i),x(2,i),'og');    
          hold on;
        end
    end
end
%计算出直线边界点 并绘制直线
ply=-(0.1*b(1)+b(3))/b(2);
pry=-(0.9*b(1)+b(3))/b(2);
line([0.1 0.9],[ply pry]);

xlabel('密度');
ylabel('含糖率');
title('对率回归'); 
set(gca,'Fontname','Monospaced');
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值