【机器学习笔记】logistic回归

来源:互联网 发布:list是集合还是数组 编辑:程序博客网 时间:2024/05/22 10:41

本文章纯粹自己学习瞎写的 别看

Logistic回归是一种简单的分类算法,Logistic回归通过对数据分类边界的拟合来实现分类。
在分类情形下,经过学习后的LR分类器是一组权值,当测试样本的数据输入时,这组权值与测试数据按照线性加和得到
这里写图片描述
这里 这里写图片描述 是每个样本的个特征。
之后按照sigmoid函数的形式求出
这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

MATLAB程序

梯度上升函数

function thetas = gradAscent(dataMat, classLabels, iterNum)    [m, n] = size(dataMat);    alpha = 0.001; %步长    thetas = ones(n, 1);    for i = 1:iterNum        h = 1.0 ./ (1 + exp(-(dataMat * thetas)));   % sigmoid函数        error = classLabels - h;        %梯度上升法        thetas = thetas + alpha * dataMat' * error;     endend

主程序

clcclear;N = 500;data=[];%用于储存X中的来自不同模型的数据m1 = [1,0]';m2 = [1,3]';%三种模型S = 5*eye(2);%协方差矩阵%生成数据for i=1:N     P = rand(1);%生成一个随机数    if(P<=0.5)%根据先验概率决定本次来自哪个模型        data = [data;mvnrnd(m1,S,1),1];    else        data = [data;mvnrnd(m2,S,1),0];    endenddataMat = data(:,1:2); [m, n] = size(dataMat);dataSet = eye(m, n + 1);dataSet(:, 2:3) = dataMat;      % 输入x的样本dataSet(:, 1) = 1;              % 令第零维向量为1,便于计算labelMat = data(:,3);           % 输出y的样本j = 0;k = 0;xcord1 = [];ycord1 = [];xcord2 = [];ycord2 = [];for i = 1:m    if labelMat(i) == 1             % 对样本进行分类,归为1类        j = j + 1;        xcord1(j) = dataMat(i, 1);        ycord1(j) = dataMat(i, 2);    else                            % 归为0类        k = k + 1;        xcord2(k) = dataMat(i, 1);        ycord2(k) = dataMat(i, 2);    endendthetas = gradAscent(dataSet, labelMat, 500);x = -5.0 : 0.1 : 7.0;y = (-thetas(1) - thetas(2) * x) / thetas(3);     % 分类边界figure(1);xlabel('x1');ylabel('x2');plot(xcord1, ycord1, 'go', 'MarkerSize', 6, 'LineWidth', 2);hold on;plot(xcord2, ycord2, 'bx', 'MarkerSize', 6, 'LineWidth', 2);plot(x, y, '-r', 'LineWidth', 2)

结果

数据集是自己生成的,没用seed,所以运行一次产生一次新的数据集
这里写图片描述

程序里有一部分搬了网上找的,介意的话通知我我会删掉

本文章纯粹自己学习写的,别看

原创粉丝点击