您的位置:首页 > 其它

Logistic回归分类----梯度上升法

2018-01-06 17:40 351 查看
本算法根据《机器学习实战》一书改编而来,原书使用了Python语言所写,自我感觉没有Matlab好用,所以进行了改写。

Logistic回归分类是一种常用的分类方法,其基本思想是利用现有数据对分类边界线建立回归公式,以此进行分类。本文的实验数据因为量大,所以放在了网盘上,https://pan.baidu.com/s/1qY9jFsg。

以下为实现代码:

clc;
clear;
%加载测试数据文件,前两列为坐标值,后两列为类标号
fileID = fopen('D:\matlabFile\Logistic\Logistic.txt');
DS=textscan(fileID,'%f %f %f');
fclose(fileID);
%将数据转为矩阵形式
DataMat=cat(2,DS{1},DS{2});
%在dataMat第一列之前再增加都为1的列
[Row,Column]=size(DataMat);
DataMat=cat(2,ones(Row,1),DataMat);
LabelMat=DS{3};
%重新获得行列数
[Row,Column]=size(DataMat);
%%%===利用梯度上升法寻找最佳参数
%设定alpha参数
Alpha=0.001;
%设定最大循环次数
MaxCycle=500;
%初始化系数矩阵为1
Weight=ones(Column,1);
%设定循环结束标志
flag=1;
while flag<MaxCycle+1
%调用系统sigmoid函数
h=sigmf(DataMat*Weight,[1,0]);
%计算误差
Error=LabelMat-h;
%更新系数矩阵
Weight=Weight+Alpha*DataMat'*Error;
flag=flag+1;
end
%画出原始点集
scatter(DataMat(:,2),DataMat(:,3),'filled');
hold on
%画出最佳拟合曲线
%定义X的取值范围
x=-3:0.1:3;
%计算Y的值域范围
y=(-Weight(1)-Weight(2)*x')/Weight(3);
plot(x,y,'r');

下图为仿真结果:
                                                
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: