繁体   English   中英

Matlab中的逻辑回归

[英]logistic regression in matlab

我想在matlab中实现逻辑回归,为此我有以下几段代码

function B=logistic_regression(x,y)

f=@(a)(sum(y.*log((exp(a(1)+a(2)*x)/(1+exp(a(1)+a(2)*x))))+(1-y).*log((1-((exp(a(1)+a(2)*x)/(1+exp(a(1)+a(2)*x))))))));
a=[0.1, 0.1];
options = optimset('PlotFcns',@optimplotfval);
B = fminsearch(f,a, options);

end

逻辑回归如下:

首先我们计算的logit等于

L = B0 + B1 * X

那么我们正在计算的概率等于p = e ^ L /(1 + e ^ L)

最后我们正在计算

Y * LN(P)+(1-γ)* LN(1-p)的

我决定将所有这些内容写在一行中,但是当我运行代码时,它给了我以下错误

>> B=logistic_regression(x,y)
Assignment has more non-singleton rhs dimensions than non-singleton subscripts

Error in fminsearch (line 200)
fv(:,1) = funfcn(x,varargin{:});

Error in logistic_regression (line 6)
B = fminsearch(f,a, options);

我该如何解决这个问题? 提前致谢

为了实现逻辑回归模型,我通常调用glmfit函数,这是更简单的方法。 语法为:

 b = glmfit(x,y,'binomial','link','logit');

b是一个向量,其中包含逻辑回归线性部分的系数(第一个元素是回归的常数项alpha )。 x包含预测变量数据,每个观察值一行,每个变量一行。 y包含目标变量,通常是代表结果的布尔值(0或1)的向量。

一旦获得系数,就必须将回归的线性部分应用于预测变量:

z = b(1) + (x * b(2));

最后,必须将逻辑函数应用于线性零件的输出:

z = 1 ./ (1 + exp(-z));

如果您需要对数据或输出进行更多修改,并且需要更大的灵活性和对模型的控制,建议您查看以下实现:

https://github.com/mohammadaltaleb/Logistic-Regression

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM