精华内容
下载资源
问答
  • 【模式识别小作业】逻辑回归模型(logistic regression model)+Matlab实现+UCI的Iris和Seeds数据集+分类问题 包含:完整全套代码+readme+报告
  • 在这里讲述如何通过MATLAB的代码实现多元logistic回归模型,对于想用MATLAB来实现多元logistic回归模型的朋友有很大的帮助。
  • 逻辑回归matlab代码预测PRNG 使用机器学习技术预测伪随机数生成器 要运行一个学习者的单个实例,请使用exampleKNN.m脚本(例如,运行KNN)。 要重新运行实验,请运行deployConfig.m。 我们总共实施了五名学习者: ...
  • matlab实现逻辑回归

    2018-04-24 10:52:05
    matlab实现逻辑回归,够字数了吗,够字数了吗,够字数了吗
  • LogisticRegression 逻辑斯蒂回归 matlab 可运行 内含测试数据
  • 利用matlab自带工具箱对二分类数据进行逻辑回归预测1和0的概率
  • 多元逻辑斯蒂回归matlab代码ML 该存储库包含用于完成机器学习练习的Matlab代码,例如: 具有梯度下降的单变量和多变量线性模型,包括正态方程。...单变量和多元逻辑回归模型,具有梯度下降。 工作正在进行中!
  • 【吴恩达 机器学习】 逻辑回归算法Matlab实现

    万次阅读 多人点赞 2018-06-05 17:01:47
    逻辑回归(Logistic Regression),Logistic function, Sigmoid function是同一个意思,函数形式(假设函数形式)如下: 逻辑回归是二分类算法,h θ&...

    一,假设函数:

    1) 逻辑回归(Logistic Regression),Logistic function, Sigmoid function是同一个意思,函数形式(假设函数形式)如下:

    逻辑回归是二分类算法, hθ(x)>=0.5 h θ ( x ) >= 0.5 z>=0 z >= 0 , 即 θTx>=0 θ T x >= 0 ),则 y=1 y = 1

    2) 决策边界(Decision Boundary)
    逻辑函数分为正类和负类时的边界,即 hθ(x)=0.5 h θ ( x ) = 0.5 即为边界函数。

    上图假定参数 θ θ 已经学好, 根据上一张图知 θTx>=0 θ T x >= 0 为正类, θTx<0 θ T x < 0 为负类,则边界为 θTx=0 θ T x = 0 ,此时边界为 x1+x2=3 x 1 + x 2 = 3

    3) 非线性决策边界
    假设已经使用训练集训练逻辑回归模型,得到参数 θ θ ,于线性边界一样,则非线性决策边界为 θTx=0 θ T x = 0 ,如下

    二,参数学习

    1) 损失函数,学习参数,首先需要定义损失函数,线性回归的损失函数可以是均方误差

    J(θ)=1mi=1m(hθ(xi)yi)2 J ( θ ) = 1 m ∑ i = 1 m ( h θ ( x i ) − y i ) 2
    ,但逻辑回归的损失函数不能使用均方误差函数,因为逻辑回归函数 hθ(x)=11+exp(θTx) h θ ( x ) = 1 1 + e x p ( − θ T x ) ,也叫Sigmoid function作为假设函数,此函数是非线性的,会导致均方误差函数为non-convex( 函数的二阶导数大于等于零,那么这个函数就是凸函数),有许多局部最小值。所有需要定义新的损失函数,如下:

    损失函数另一种表达方式是:

    Cost(hθ(x),y)=ylog(hθ(x))(1y)log(1hθ(x)) C o s t ( h θ ( x ) , y ) = − y l o g ( h θ ( x ) ) − ( 1 − y ) l o g ( 1 − h θ ( x ) )

    所有样本的损失值之和:
    J(θ)=1/mi=1mCost(hθ(x),y) J ( θ ) = 1 / m ∑ i = 1 m C o s t ( h θ ( x ) , y )

    2) 使用梯度下降算法,找到 J J 损失值最小时的参数θ,预测某个样本 x x 时,利用得到的参数θ代入假设函数(逻辑回归函数,Sigmoid函数),即可求得预测值:

    hθ(x)=11+exp(θTx) h θ ( x ) = 1 1 + e x p ( − θ T x )

    3) 梯度下降法,损失函数偏导具体推导过程参考链接

    前面已经确定了三要素:假设函数,损失函数,梯度下降

    三,Matlab实现

    数据集下载:百度云链接 密码:tb4p

    假设一所高中有一个数据集,代表40名学生被录取进入大学,40名学生未被录取。训练样本包含两个标准化考试的学生成绩和学生是否被录取的标签。

    任务是建立一个二元分类模型,根据学生在两次考试中的分数来估计大学录取的机会。

    ex4x.dat:X数组的第一列代表所有的测试1分数,第二列代表所有的测试2分数。
    ex4y.dat:Y向量使用“1”来标记被录取和“0”以标记未录取的学生。

    数据分布

    Matlab代码

    clear;
    clc;
    % 1,读入数据
    load('D:\Code\Data\ex4Data\ex4x.dat');
    load('D:\Code\Data\ex4Data\ex4y.dat');
    x = ex4x;
    y = ex4y;
    
    % 2,显示数据,查看分布
    pos = find(y == 1); neg = find(y == 0);
    plot(x(pos, 1), x(pos,2), '+'); hold on
    plot(x(neg, 1), x(neg, 2), 'o')
    
    % 3, 参数设置
    iteration = 10000;
    sample_num = length(x); % 样本个数
    x = [ones(sample_num, 1), x];
    theta = zeros(size(x, 2), 1); % 参数
    alpha = 0.1;
    
    % 4,特征归一化
    x(:,2) = (x(:,2)- mean(x(:,2)))./ std(x(:,2));
    x(:,3) = (x(:,3)- mean(x(:,3)))./ std(x(:,3));
    
    % 5,迭代,寻找最佳参数
    for i = 1:iteration
        h = 1 ./ (1 + exp(-x * theta)); % 通过假设函数得到预测值
        J(i,1) = -1/sample_num * (y' * log(h+eps) + (1-y)'*log(1-h+eps)); % 当前参数下的损失值
        theta(1,1) = theta(1,1) - alpha * sum((h - y) .* x(:,1));  % 更新参数
        theta(2,1) = theta(2,1) - alpha * sum((h - y) .* x(:,2));
        theta(3,1) = theta(3,1) - alpha * sum((h - y) .* x(:,3));
        %theta = theta - alpha * x'*(h-y); % 同时更新所有参数
    end
    
    figure,
    plot(x(pos, 2), x(pos,3), '+'); hold on
    plot(x(neg, 2), x(neg, 3), 'o')
    
    % 6,边界为Theta'x = 0; theta_1 + theta_2*x_2 + theta_3*x_3 = 0
    max_value = max(x(:,2));
    min_value = min(x(:,2));
    X = min_value:0.001:max_value;
    Y = -(theta(1,1) + theta(2,1) * X) / theta(3,1);
    plot(X, Y, '-')
    
    

    效果图,画决策边界( hθ(z)=0.5,z=θTx=0 h θ ( z ) = 0.5 , 此 时 z = θ T x = 0 ):

    关键代码(向量化表示):

    theta(1,1) = theta(1,1) - alpha * sum((h - y) .* x(:,1));  % 更新参数
    theta(2,1) = theta(2,1) - alpha * sum((h - y) .* x(:,2));
    theta(3,1) = theta(3,1) - alpha * sum((h - y) .* x(:,3));
    %theta = theta - alpha * x'*(h-y); % 同时更新所有参数
    展开全文
  • 逻辑回归Matlab实现

    万次阅读 2017-09-17 18:33:29
    Logistic回归(Logistic Regression)方法一、利用matlab自带的函数glmfit() :function theta=logisticRegression() % logistic regression的参数theta,可以用matlab自带函数glmfit求出 x = [0.0 0.1 0.7 1.0 1.1 ...

    Logistic回归(Logistic Regression)

    方法一、利用matlab自带的函数glmfit() :

    function theta=logisticRegression()
    % logistic regression的参数theta,可以用matlab自带函数glmfit求出
    x = [0.0 0.1 0.7 1.0 1.1 1.3 1.4 1.7 2.1 2.2]';
    y = [0 0 1 0 0 0 1 1 1 1]'; 
    theta = glmfit(x, [y ones(10,1)], 'binomial', 'link', 'logit')
    end

    方法二:使用梯度下降法迭代

    function theta =logisticReg()
    %   梯度下降法寻找最合适的theta,使得代价函数J最小
    options=optimset('GradObj','on','MaxIter',100);
    inittheta=[0 0]';
    theta=fminunc(@costFunc,inittheta,options);
    end
    
    %%
    function [J,gradient] = costFunc(theta)
    x = [0.0 0.1 0.7 1.0 1.1 1.3 1.4 1.7 2.1 2.2]';
    y = [0 0 1 0 0 0 1 1 1 1]'; 
    m=size(x,1);
    tmp=theta(1)+theta(2)*x;        %theta'x
    hypothesis=1./(1+exp(-tmp));  %logistic function
    delta=log(hypothesis+0.01).*y+(1-y).*log(1-hypothesis+0.01);       %加上0.01是为了防止x为0
    J=-sum(delta)/m;
    gradient(1)=sum(hypothesis-y)/m;  %x0=1;
    gradient(2)=sum((hypothesis-y).*x)/m;  
     %theta=theta-a*gradient;  gradient=-J'(theta)
    end

    两种方法都使用数据:

    x = [0.0 0.1 0.7 1.0 1.1 1.3 1.4 1.7 2.1 2.2]’;
    y = [0 0 1 0 0 0 1 1 1 1]’;

    注意,Y的值只能取0和1两种。

    得到结果:

    theta =
    
       -3.4932
        2.9402

    即可以学习到函数:

    Y=1/(1+exp(3.4932-2.9402*x));

    展开全文
  • 逻辑斯蒂回归实例-matlab

    热门讨论 2014-06-30 14:41:23
    机器学习课程作业,自己编写matlab源代码,运行LogisticRegression即可
  • 输入:特征和标签->模型->回归系数->预测:分类结果 功能:逻辑回归实现二分类
  • matlab实现的多分类逻辑回归

    热门讨论 2015-06-22 08:50:21
    matlab实现的多分类逻辑回归,用于手写数字识别
  • 典型相关分析matlab实现代码 iris 一、简介 学习机器学习有一段时间了,由于以前使用的是matlab,所以想使用python来实现一些机器学习的问题。 鸢尾花分类问题时一个很经典的问题,我就想从这个问题入手吧。网上有...
  • 逻辑回归 神经网络 支持向量机 无监督学习 K均值聚类 主成分分析 异常检测一元和多元高斯模型 推荐系统协同过滤/低秩矩阵分解 其他主题: 成本函数和假设 正态方程 梯度下降 批 随机 特征归一化 创建特征 偏差-偏差...
  • 逻辑回归原理及matlab实现

    万次阅读 2019-01-08 13:54:46
    对于某些分类问题,自变量可能是连续的,但是因变量却可能是离散的,例如:根据肿瘤大小判断该肿瘤是否是良性。...因此,逻辑回归(logistic regression)就成为了一个解决分类问题的好方法。 ...

    个人博客文章链接:  http://www.huqj.top/article?id=163

    对于某些分类问题,自变量可能是连续的,但是因变量却可能是离散的,例如:根据肿瘤大小判断该肿瘤是否是良性。这种问题不适合用线性回归来解决,虽然可以将连续的因变量值映射到离散的分类上,但是效果和训练复杂度都不尽如人意。因此,逻辑回归(logistic regression)就成为了一个解决分类问题的好方法。

        所谓逻辑回归,就是通过函数模型将因变量的值控制到0~1之间,然后通过梯度下降法求出模型的参数,最后使用一个值域在(0,1)的函数进行预测,预测的结果就是分类为1的概率。

        使用一个叫做sigmoid函数的和普通的线性回归函数组成复合函数就可以将函数的值域控制在0到1之间,sigmoid函数如下:

        image.png

        该函数的函数图像如下:

        image.png

        该复合函数就是逻辑回归的函数模型,而代价函数不适合使用线性回归相同的函数,因为线性回归函数的代价函数是和绝对误差成二次方比例的,不能很好的衡量训练误差,对于逻辑回归中的训练误差,我们需要一个更加强的惩罚,这个函数就是指数型函数,因为指数型函数的函数值在0~1之间导数绝对值极大,可以达到很好的训练误差“惩罚”效果:即训练出现误差的时候,代价函数会很大。

        因此逻辑回归的代价函数如下:

        image.png

        这个函数也可以使用分段的形式呈现,但是写成统一的形式更加简洁,后续也更好处理。

        而对此代价函数求偏导,可以得到如下迭代公式:

        image.png

        ==》

        image.png

        应用梯度下降法实现逻辑回归的matlab代码如下:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    function theta=LogisticRegression(data, maxIndex, alpha, threshold, maxTimes)

        %测试逻辑回归

         

        %测试数据

    %     data = [0 0 0; 0 1 0; 0 1.5 0; 0.5 0.5 0; 0.5 1 0; 1 0.95 0; 0.5 1.4 0; 1.5 0.51 0; 2 0 0; 

    %         1.9 0 0; 0 3 1; 0 2.1 1; 0.5 1.8 1; 0.8 1.5 1; 1 1.2 1; 1.5 2 1; 3 0 1; 3 1 1; 2 2 1; 

    %         3 4 1; 1.8 0.5 1];

    %     maxIndex = 2;

    %     alpha = 0.1;

    %     threshold = 0.00001;

    %     maxTimes = 1000;

         

        dataSize = size(data);

        dataLen = dataSize(1);

        paramLen = maxIndex + 1;

        theta = zeros(paramLen, 1);

        theta0 = theta;

         

        times = 0;

        cost0 = 0;

        cost1 = 1;

         

        while abs(cost1-cost0) > threshold && times < maxTimes

            times = times + 1;

            theta0 = theta;

            cost0 = LogisticRegressionCostFun(theta, data);

            for i = 1 : dataLen

                tmp = ((1 / (1 + exp(-theta0' * [1, data(i,1:maxIndex)]'))) - data(i, paramLen)) / dataLen; 

                theta(1) = theta(1) - alpha * tmp;

                for j = 2 : paramLen

                   theta(j) = theta(j) - alpha * tmp * data(i, j - 1); 

                end

            end

            cost1 = LogisticRegressionCostFun(theta, data);

        end

         代价函数:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    function cost=LogisticRegressionCostFun(theta, data)

        %逻辑回归的代价函数计算

         

        paramLen = length(theta);

        X = zeros(paramLen, 1);

        dataSize = size(data);

        dataLen = dataSize(1);

        cost = 0;

        for i = 1 : dataLen

            X(1) = 1;

           for k = 1 : paramLen - 1

              X(k + 1) = data(i, k); 

           end

           cost = cost + 

               (-data(i, 3) * log(1/(1 + exp(-(theta' * X)))) 

               - (1 - data(i, 3)) * log(1 - 1/(1 + exp(-(theta' * X)))));

        end

        cost = cost / dataLen;

        使用一个决策边界为直线的训练数据集训练,可以得到如下的图像:

        image.png

        其中横纵坐标分别代表两个自变量,红白颜色代表两种类别,绿色的线则是训练出来的决策边界。

        

        上面是决策边界为直线的情况,还有很多时候决策边界并非直线,例如下面这种情况:

        image.png

        这时候就不能选择线性模型来训练,而要想办法提高变量的指数

        使用x1变量最高二次方但是x2变量一次方的模型训练出来的边界如下(实际就是一个二次函数的图像)

        image.png

        但是这个模型仍然不能很好的模拟,所以选择将x2变量也提高至二次方,得到如下决策边界:

        image.png

        可以看到这个椭圆的决策边界比上面的模型要更好更精确。

    展开全文
  • 我将试图从感知机的基础上说明逻辑回归的一般性原理和学习及预测方法,其中缺少一些必要的证明,包括了一个二分类问题的实例。其中关于感知机的实验在 机器学习 专栏中有介绍。 从感知机到逻辑斯蒂回归 感知机模型:...

    说明

    我将试图从感知机的基础上说明逻辑回归的一般性原理和学习及预测方法,其中缺少一些必要的证明,包括了一个二分类问题的实例。其中关于感知机的实验在 机器学习 专栏中有介绍。

    从感知机到逻辑斯蒂回归

    感知机模型:

    ·应用范围:

    二分类问题,线性分类模型,属于判别模型

    ·输入输出:

    In: n维的特征空间X
    Out: y={+1,-1},即类别的label

    ·关系:

    f(x) = sign(w·x + b)
    其中:·sign(x)为符号函数
    ·w·x + b = 0:
    对应n维特征空间中的一个超平面,w对应法向量,b为截距。若选取合适,这个超平面将会把所有实例(x,y)分为两类。
    ·训练集:表示为T{(x1,y1),(x2,y2)…};
    ·判别:若数据集线性可分,则一定存在一超平面w·x + b = 0;对所有yi = 1的实例,都有w·x + b>0,对所有yi = -1的实例,都有w·x + b<0。由此通过一个“外壳” sign函数,即可进行有效分类。

    ·学习策略:

    ·Lossfunction:
    ·注意:选取损失函数时要保证损失函数是参数的连续可导函数,这样便于优化。可以引入误分类点到超平面的总距离这一概念,将其作为损失函数。误分类点数越少,超平面越接近“理想答案”,损失函数越小,这一思路是直观和易于接受的。
    ·关于距离,引入了范数的概念,并且对比函数间距 |w·x0 + b| 以及几何间距|w·x0 + b|/||w||,机器学习中常用后者,即几何间距,这样的损失函数对比例是鲁棒的。如果采用函数间距,缺陷比较明显,学习到的参数较小。误分类点到超平面S的距离为:(即高中几何距离算法)-yi(w·xi + b)/||w||
    ·如何选取误分类点:对于被正确分类的点,有yi·(w·x0 + b)> 0,相应的误分类点就有yi·(w·x0 + b)< 0;
    ·损失函数表达式:L(w,b) = -Σyi·(w·xi + b) ((xi,yi)为误分类点)
    参数更新:
    ·梯度:用损失函数分别对w,b求导,得到梯度

    ·参数更新:
    w <———— w + μ·yi·xi
    b <———— b + μ·yi

    ·算法描述:

    输入:
    训练数据集T = {(x1,y1),(x2,y2),(x3,y3),…… },xi为n维特征空间的特征向量,yiϵ{+1,-1},i = 1,2……学习率μ(0≤μ≤1)
    输出:
    w,b,以及感知机模型为f(x) = sign(w·x + b);
    (1) 设定w,b初始值
    (2) 训练集中选取数据(xi,yi)
    (3) 判断如果yi·(wi·x + b) ≤0,则更新参数
    w <———— w + μ·yi·xi
    b <———— b + μ·yi
    (4) 转至(2)直到没有误分类点

    ·实验结果:

    Matlab完成了感知机算法,随着训练集数据的增多,发现出现了不能找到超平面的情况,此时将学习率调低,随之又找到了合适的参数,单同时由于学习率较低,使得学习到的参数很小。
    事实上,感知机存在着一个很大的弊端,即它敏感的“非黑即白”式的判断结果未免太过武断,事实上对于很多分类问题两个相距很近的点可能并没有如此之大的差距,为了使得更加细致的描绘这种点和点之间的差距,引入了逻辑斯蒂回归。

    逻辑斯蒂回归模型:

    ·适用范围:

    分类问题,二分类甚至是多分类。属于对数线性模型(输出Y=1的对数概率是输入的线性函数)

    ·输入输出:

    In: T = { (xi,yi) | i = 1,2,3,…},xi为n维特征空间中的特征向量。Yi∈{+1,-1}
    Out:逻辑斯蒂回归模型

    在这里插入图片描述
    ·函数关系:

    在这里插入图片描述

    另外,定义了事件几率的表达式:
    在这里插入图片描述

    对于对数几率有
    在这里插入图片描述

    所以说,逻辑斯蒂回归模型是对数线性模型。

    ·学习策略(4.12.23.40)

    模型参数估计采用极大似然法:
    在这里插入图片描述

    似然函数为: 在这里插入图片描述

    对数似然函数为: 在这里插入图片描述

    对ω求偏导数得到: 在这里插入图片描述

    因此参数学习问题就变成了以对数似然函数为目标函数的最优化问题,常用方法为梯度下降法和牛顿法。

    最大熵模型:

    ·适用范围

    属于概率模型。最大熵原理认为要选择的概率模型首先要满足已有事实,即约束条件,而没有更多信息情况下,不确定部分是“等可能的”,由于“等可能”这个概念不方便优化操作,相反地熵可以作为优化的数值指标。
    最大熵原理朴素解释为:凡是可考虑的因素之外的,均假设是均匀分布,也即等概率假设。它的原则是在所有满足约束条件的概率模型集合中选取熵最大的集合。
    ·熵的定义:
    在这里插入图片描述

    熵满足不等式

    在这里插入图片描述
    其中|X|为X取值的个数,当X分布式均匀分布时,H ( P ) 才取得最大值。

    ·最大熵模型的定义

    最大熵应用到分类问题时,假设了这个模型是一个条件概率分布p(Y|X),即输入为x的条件下,输出为y的概率。
    ·输入输出
    In:T={(x1,y1),(x2,y2),(x3,y3)……}
    Out:P(Y|X)
    ·函数关系
    根据训练数据集可以获得联合分布P(X,Y)与P(X)的经验分布

    在这里插入图片描述

    代表样本中x的频数。

    ·梯度下降法补充

    在感知机时,我们应用了梯度下降作为优化算法,并第一次感受到数值迭代的方式解得最佳参数的快感。在逻辑斯蒂回归模型中,我们把优化目标划归成了求解使得似然函数最大值的参数,我们不妨将求解似然函数最大值问题当成优化目标,习惯上取其相反数作为损失函数,我们便可以继续应用梯度下降法进行优化了。
    Tips:
    为了应对过拟合,我们可以对损失函数进行正则化
    在这里插入图片描述

    ,即损失函数中加入正则项。

    在这里插入图片描述
    其中,
    在这里插入图片描述
    即为正则项
    注意:
    1.引入正则项是为了应对过拟合,倾向于让模型参数更小。
    2.模型参数小的时候,意味着模型更为“平滑”,这样输入改变的时候,输出的变化不会很剧烈,所以正则化后应该更加鲁棒。
    3.参数问题:λ如果选的过大,那么损失函数会更倾向于考虑正则项,导致模型过于“平滑”,也会使得模型变得不准确,对train_data的准确率大大下降。

    牛顿法

    输入:特征函数f1,f2,f3,…,fn;经验分布P‘(x,y),目标函数f(ω),模型
    在这里插入图片描述

    输出:最优参数值 在这里插入图片描述;最优模型 在这里插入图片描述

    (1)对所有i∈{1,2,…,n},取初值 =0;

    (2)对每一i∈{1,2,…,n},
    (a) 令 在这里插入图片描述是方程
    在这里插入图片描述

    的解,这里

    (b)更新 : 在这里插入图片描述

    (3)如果不是所有 都收敛,重复步(2)

    拟牛顿法

    在这里插入图片描述
    在这里插入图片描述

    算法实现:

    不失一般性也为了方便数据可视化,随机生成300个具有3个特征的数据。对数据进行某种函数关系映射,按照函数关系分为两类,一类label为1,一类为0;并将数据等分成两份一份用于训练,一份用于测试。随后用梯度下降法进行参数学习;运行结果如下:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    close;
    clear;
    clc;
    % 作者 M宝可梦
    % 引用请注明出处 谢谢合作
    %% 二分类:数据生成
    data_num = 500;
    Features=3;
    data=rand(data_num,Features);
    label=zeros(data_num,1);
    data=[data,ones(data_num,1)];
    % 数据预处理:通过设定某种关系进行预先二分类,打乱循序使得每次运行训练集和测试集和不同
    for i = 1:data_num
        if 2*data(i,1)-data(i,2)+2*data(i,3)<1.5    % 代码可精简:label(2*data(:,1)-data(:,2)<0.5)=1; % 通过逻辑判断
            label(i)=1;
        end
    end
    randIndex = randperm(data_num);
    data_new=data(randIndex,:);
    label_new=label(randIndex,:);
    
    %一半训练  一半测试
    k=0.8*data_num;
    train_data=data_new(1:k,:);
    train_label=label_new(1:k,:);
    test_data=data_new(k+1:end,:);
    test_label=label_new(k+1:end,:);
    [m1,n1] = size(train_data);
    [m2,n2] = size(test_data);
    
    %% 训练
    %设定学习率delta;正则项系数;迭代次数;模型参数
    delta=0.05; 
    lambda=0.0001; 
    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);
            
            h=1/(1+exp(-(theta * Data_Features'))); % h为P(Y=1|X) = exp(w·x)/[1+exp(w·x)]
            dt=(Data_Label-h) * Data_Features;   % 对数似然函数对w的求导
            theta=theta + delta*dt-lambda*theta; % 梯度下降法更新参数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('损失函数');
    figure(2);
    subplot(211);
    plot3(data(label==1,1),data(label==1,2),data(label==1,3),'ro');
    axis([0 1 0 1]);
    title('正样本分类显示');
    subplot(212);
    plot3(data(label==0,1),data(label==0,2),data(label==0,3),'go');
    axis([0 1 0 1]);
    title('负样本分类显示');
    figure(3);
    plot3(data(label==1,1),data(label==1,2),data(label==1,3),'ro');
    hold on;
    plot3(data(label==0,1),data(label==0,2),data(label==0,3),'go');
    axis([0 1 0 1]);
    title('总体样本分类显示');
    grid on
    
    %% 测试准确率
    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',acc/m2)
    

    引用请注明出处 谢谢合作

    展开全文
  • logistic回归分析matlab代码逻辑回归-机器学习 客观的开发机器学习算法,无需使用Octave或Matlab即可在python中进行逻辑回归。 Logistic回归是一种估计事件发生概率的回归类型。 例如,电子邮件是否为垃圾邮件,情绪...
  • 基于matlab逻辑回归示例

    千次阅读 2020-02-21 17:31:58
    最近研究机器学习算法,属于小白,学习了“寒小阳”博主的文章(地址:http://blog.csdn.net/han_xiaoyang/article/details/49123419)后,对机器学习的逻辑回归有了个大概的认识,再借助另一位博主“ Earendil ”...
  • 五参数逻辑回归MatLab cftool函数的一个大漏洞是缺少Logistic函数。 特别是,五参数对数回归或5PL非线性回归模型通常用于生物测定或免疫测定(例如ELISA,RIA,IRMA或剂量React曲线)中的曲线拟合分析。 标准剂量...
  • 主要介绍了python代码实现逻辑回归logistic原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • matlab逻辑回归建立预测模型

    千次阅读 2018-05-23 19:08:48
    对下列数据进行回归:clearclc%读人口数据Y = [33815 33981 34004 34165 34212 34327 34344 34458 34498 34476 34483 34488 34513 34497 34511 34520 34507 34509 34521 34513 34515 34517 34519 34519 34521 34521 ...
  • 参考我的个人博客: 分类器设计之logistic回归分析 http://blog.csdn.net/ranchlai/article/details/10022637
  • 基于Octave/Matlab的二元逻辑回归(logistic regression)算法 本博文基于吴恩达老师的机器学习网课,是对作业代码进行简化和补充完整后的实现。 逻辑回归算法的基本思想 sigmoid函数 在分类问题中,我们需要根据...
  • 代码参考了知乎以及机器学习实战的内容,数据集为机器学习实战的testSet.txt machine learning inaction - Ch05 - testSet.txt ...% 逻辑回归 path='E:\Codes\Python\ML\testSet.txt'; [data,label]=lo...
  • 文章目录关于多元回归分析应用范围举例结果分析例题Matlab代码 关于多元回归分析 应用范围举例 结果分析 例题 Matlab代码 在桌面创建txt文件并输入: 1 135.0 13.70 12.68 80.32 0.16 16 102.5 17.48 ...
  • -----------------------------------------------------------------------------------------------logistic regression属于概率型非线性回归,它是研究二分类观察结果与一些影响因素之间关系的一种多变量分析方法...
  • 逻辑回归一般指logistic回归。logistic回归又称logistic回归分析,是一种广义的线性回归分析模型,常用于数据挖掘,疾病自动诊断,经济预测等领域。
  • 逻辑回归算法matlab伪代码统计_分析_代码 机器学习和数据挖掘的各种算法的 Matlab、Pyhton 和 C++ 实现。这些是作为我的研究生课程(云计算、机器学习、SMAI)的要求而实现的。 其中一些算法是: 聚类 凝聚聚类 ...
  • MNIST数据集是机器学习领域中非常经典的一个数据集,由60000个训练样本和10000个测试样本组成,每个样本都是一张28 * 28像素的灰度手写数字图片。 import time import numpy as np import matplotlib.pyplot as plt...
  • softmax回归模型是一种常用的分类器,也是与深度结构模型相结合最多的分类方法。本代码包中的程序对图像构建softmax分类器,并按照图像所属类别进行分类。程序是在matlab平台上实现的,简单易懂。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,325
精华内容 2,130
关键字:

逻辑回归模型matlab

matlab 订阅