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-y)*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));
如果您需要对数据或输出进行更多修改,并且需要对模型有更大的灵活性和控制力,我建议您查看此实现:
我想在 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-y)*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));
如果您需要对数据或输出进行更多修改,并且需要对模型有更大的灵活性和控制力,我建议您查看此实现: