Matlab 某物';我的逻辑回归有什么问题?
我试图验证我在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
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相同的结果。我是否应该重新规范化backwOPT
?我认为统计工具箱随代码一起提供。如果有,您可以将您的实现与它们的实现进行比较。如果这是一个作业,你不应该复制任何代码。我注意到mnrfit(normalized,Y+1)
产生的结果与我的wOPT
乘以-1的结果相同。我是否应该重新规范化backwOPT
?我认为统计工具箱随代码一起提供。如果有,您可以将您的实现与它们的实现进行比较。如果这是作业,你不应该复制任何代码。