我的问题是基于Coursera课程的数据 - https://www.coursera.org/learn/machine-learning/,但在搜索后似乎是一个常见问题。
梯度下降完全适用于归一化数据(pic.1),但在原始数据(pic.2)上方向错误,J(成本函数)向无穷大增长非常快。参数值之间的差异大约是10 ^ 3.
我认为为了更好的执行速度需要规范化,即使经过大量搜索,我也无法看到成本函数增长的原因。减少' alpha'使其为0.001或0.0001也无济于事。
如果您有任何想法,请发布!
P.S。 (我手动为函数提供了矩阵,其中X_buf - 规范化版本和X_basic - 原始; Y - 所有考试的矢量Q - theta矢量,alpha - 倾斜率。)
function [theta, J_history] = gradientDescentMulti(X, Y, theta, alpha, num_iters)
m = length(Y);
J_history = zeros(num_iters, 1);
for iter = 1:num_iters
theta = theta - (alpha/m)*X'*(X*theta-Y);
J_history(iter) = computeCostMulti(X, Y, theta);
end
end
第二个功能:
function J = computeCostMulti(X, Y, theta)
m = length(Y); % number of training examples
J = 0;
J = (1/(2*rows(X)))*(X*theta-Y)'*(X*theta-Y);
end
答案 0 :(得分:0)
在这种情况下,将alpha的值减小到非常小的值并不是很有帮助,因为它需要很多迭代才能收敛。
归一化用于更快的收敛,但它也影响alpha的选择,因为成本函数的导数取决于X的值。
我第一次遇到同样的问题。但在我对X进行标准化后,Cost函数和θ会收敛所有小于1的alpha值。