Matlab 某物';我的逻辑回归有什么问题?

Matlab 某物';我的逻辑回归有什么问题?,matlab,normalization,logistic-regression,Matlab,Normalization,Logistic Regression,我试图验证我在Matlab中的逻辑回归实现是否良好。我将通过实现得到的结果与内置函数mnrfit给出的结果进行比较 我拥有的数据集D,Y的每一行D都是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

我试图验证我在Matlab中的逻辑回归实现是否良好。我将通过实现得到的结果与内置函数
mnrfit
给出的结果进行比较

我拥有的数据集
D
Y
的每一行
D
都是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的可能性的梯度和hessian:

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-->1/(1+exp(-z))进行编码的Matlab函数

第三,我在
gradient
上运行牛顿算法,以找到似然梯度的根。我自己实现了它。当迭代之间的差值的范数变为0时,它的行为与预期的一样。我是根据我的想法写的。 我验证了Newton实现返回的wOPT处的梯度为空:

gradient(wOP)

ans =

   1.0e-15 *

    0.0139   -0.0021    0.2290
hessian方程具有严格的负特征值

eig(hessian(wOPT)) 

ans =

   -7.5459
   -0.0027
   -0.0194
以下是我在实施过程中得到的好处:

wOPT =

 -110.8873
   28.9114
    1.3706
作为最后一个元素的偏移量。为了绘制决策线,我应该使用
M
devs
转换斜率
wOPT(1:2)
。所以我设定:

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)

相同的结果,我注意到
mnrfit(归一化,Y+1)
产生与我的
wOPT
乘以-1相同的结果。我是否应该重新规范化back
wOPT
?我认为统计工具箱随代码一起提供。如果有,您可以将您的实现与它们的实现进行比较。如果这是一个作业,你不应该复制任何代码。我注意到
mnrfit(normalized,Y+1)
产生的结果与我的
wOPT
乘以-1的结果相同。我是否应该重新规范化back
wOPT
?我认为统计工具箱随代码一起提供。如果有,您可以将您的实现与它们的实现进行比较。如果这是作业,你不应该复制任何代码。