m0_50062427 2021-10-21 10:18 采纳率: 100%
浏览 71
已结题

用MATLAB构建逻辑回归模型检测癌症 要求准确率达到百分之九十六

img

img

img

  • 写回答

1条回答 默认 最新

  • joel_1993 2021-10-21 22:31
    关注

    你好同学,代码供参考:

    close;clear;clc;
    
    %% 二分类:数据获取
    Features = 30;
    
    load('train.mat');% 导入train数据
    load('test.mat'); % 导入test数据
    
    train_data=[ones(size(train,1),1),train(:,3:end)];
    max_train_data = max(train_data);
    train_data = train_data./repmat(max_train_data,size(train_data,1),1);%归一化
    train_label=train(:,2);
    test_data=[ones(size(test,1),1),test(:,3:end)];
    test_data = test_data./repmat(max_train_data,size(test_data,1),1);%归一化
    test_label=test(:,2);
    [m1,n1] = size(train_data);
    [m2,n2] = size(test_data);
    
    %% 训练
    %设定学习率delta;迭代次数;模型参数
    delta=0.005; % 学习率
    num = 200;% 学习两百次
    theta=rand(1,Features+1);% 除w之外多一个偏置b
    L=zeros(1,num);
    for I = 1:num
        dt=zeros(1,Features);
        loss=0;
        for i=1:m1
            Data_Features=train_data(i,1:Features+1);
            Data_Label=train_label(i,1);
            t = theta * Data_Features';
            t(t<=-10) = -10;
            t(t>10) = 10;
            h=1/(1+exp(-t)); % h为P(Y=1|X) = exp(w·x)/[1+exp(w·x)]
            dt=(Data_Label-h) * Data_Features;   % 对数似然函数对w的求导
            theta=theta + delta*dt; % 梯度下降法更新参数w
            loss = loss + Data_Label*log(h)+(1-Data_Label)*log(1-h);% 对数似然函数
        end
        % 由于问题划归为由极大似然估计估计参数,是对似然函数求极大值
        % 统一起见应用梯度下降法,归为对极大似然函数相反数的极小值求解,此处除以了样本数量,为平均损失
        loss=-loss/m1;
        L(I) = loss;% 作损失函数图
        
        if loss<0.001
            break;
        end
    end
    
    %% 作图
    figure(1);
    plot(L);
    title('损失函数');
    
    %% 测试准确率
    acc=0;
    for i=1:m2
        Data_Features=test_data(i,1:Features+1)';
        Data_Label=test_label(i);
        P_Y1=1/(1+exp(-theta * Data_Features));% P(Y=1|X) = exp(w·x)/[1+exp(w·x)]
        if P_Y1>0.5 && Data_Label==1
            acc=acc+1;
        elseif P_Y1<=0.5 && Data_Label==0
            acc=acc+1;
        end
    end
    
    fprintf('训练测试完成!\n应用模型:逻辑斯蒂回归\n优化算法:梯度下降\ntest_acc:%6.2f%%\n',acc/m2*100)
    

    然后结果是:
    损失函数:

    img

    训练测试完成!
    应用模型:逻辑斯蒂回归
    优化算法:梯度下降
    test_acc: 97.50%
    

    满足了测试精度要求,哈哈哈,有帮助望采纳呢,谢谢啦

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月25日
  • 已采纳回答 10月23日
  • 创建了问题 10月21日

悬赏问题

  • ¥15 华为手机相册里面的照片能够替换成自己想要的照片吗?
  • ¥15 陆空双模式无人机飞控设置
  • ¥15 sentaurus lithography
  • ¥100 求抖音ck号 或者提ck教程
  • ¥15 关于#linux#的问题:子进程1等待子进程A、B退出后退出(语言-c语言)
  • ¥20 web页面如何打开Outlook 365的全球离线通讯簿功能
  • ¥15 io.jsonwebtoken.security.Keys
  • ¥15 急,ubuntu安装后no caching mode page found等
  • ¥15 联想交换机NE2580O/NE1064TO安装SONIC
  • ¥15 防火墙的混合模式配置