我的Logistic回归有什么问题吗?

时间:2016-10-27 17:40:58

标签: matlab normalization logistic-regression

我试图验证我在Matlab中实现的Logistic回归是否良好。我通过比较我通过实现得到的结果和内置函数mnrfit给出的结果来做到这一点。

我拥有的数据集DYD的每一行都是R ^ 2中的一个观察点,Y中的标签是0或者1.因此,D是一个大小为(n,2)的矩阵,Y是一个大小为(n,1)

的向量

以下是我的实施方式: 我首先规范化我的数据并将其扩充到包括偏移量:

d = 2; %dimension of data
M = mean(D) ;
centered = D-repmat(M,n,1) ;
devs = sqrt(sum(centered.^2)) ;
normalized = centered./repmat(devs,n,1) ;
X = [normalized,ones(n,1)];

我将在X上进行计算。

其次,我定义了Y | X的可能性的梯度和粗糙:

function grad = gradient(w)
    grad = zeros(1,d+1) ;
    for i=1:n
        grad = grad + (Y(i)-sigma(w'*X(i,:)'))*X(i,:) ;
    end
end

function hess = hessian(w)
    hess = zeros(d+1,d+1) ;
    for i=1:n   
       hess = hess - sigma(w'*X(i,:)')*sigma(-w'*X(i,:)')*X(i,:)'*X(i,:) ;
    end
end

sigma是编码sigmoid函数z的matlab函数 - > 1 /(1 + exp(-z))。

第三,我在gradient上运行牛顿算法来找到可能性梯度的根。我自己实现了它。它的行为与预期的一致,因为迭代之间的差异的范数变为0.我基于this script编写了它。 我验证了牛顿实现返回的wOPT的渐变为null:

gradient(wOP)

ans =

   1.0e-15 *

    0.0139   -0.0021    0.2290

并且粗麻布具有严格的负特征值

eig(hessian(wOPT)) 

ans =

   -7.5459
   -0.0027
   -0.0194

这是我实施的wOPT:

wOPT =

 -110.8873
   28.9114
    1.3706

偏移是最后一个元素。为了绘制决策线,我应该使用wOPT(1:2)M转换斜率devs。所以我设置:

my_offset = wOPT(end);
my_slope = wOPT(1:d)'.*devs + M ;

我得到了:

my_slope =

   1.0e+03 *

   -7.2109    0.8166
my_offset =

    1.3706

现在,当我运行B=mnrfit(D,Y+1)时,我得到了

B =

   -1.3496
    1.7052
   -1.0238

偏移量存储在B(1)中。 我的价值观非常不同。我想知道我做错了什么。我对规范化和非规范化有一些疑问。处理。但我不确定,可能是我做错了什么。

其他信息

当我录音时:

B=mnrfit(normalized,Y+1)

我得到了

-1.3706
110.8873
-28.9114

这是我wOPT反面的重新排列版本。它包含完全相同的元素。 似乎我缩减学习参数是错误的。否则,它将与B=mnrfit(D,Y+1)

相同

0 个答案:

没有答案