1
我得到了這個wiki頁面所說的(http://en.wikipedia.org/wiki/Multinomial_logistic_regression),但我不知道如何獲得隨機梯度下降的更新規則。很抱歉在這裏提出這個問題(這實際上只是關於機器學習理論,而不是實際的實施)。有人可以提供解決方案嗎?提前致謝!如何使用1-k編碼來推導多類邏輯迴歸分類器的目標函數?
我得到了這個wiki頁面所說的(http://en.wikipedia.org/wiki/Multinomial_logistic_regression),但我不知道如何獲得隨機梯度下降的更新規則。很抱歉在這裏提出這個問題(這實際上只是關於機器學習理論,而不是實際的實施)。有人可以提供解決方案嗎?提前致謝!如何使用1-k編碼來推導多類邏輯迴歸分類器的目標函數?
我碰巧編寫代碼來implent SOFTMAX,我指大部分頁面http://ufldl.stanford.edu/wiki/index.php/Softmax_Regression
這是我在MATLAB寫的代碼,希望這將有助於
function y = sigmoid_multi(weight,x,class_index)
%% weight feature_dim * class_num
%% x feature_dim * 1
%% class_index scalar
sum = eps;
class_num = size(weight,2);
for i = 1:class_num
sum = sum + exp(weight(:,i)'*x);
end
y = exp(weight(:,class_index)'*x)/sum;
end
function g = gradient(train_patterns,train_labels,weight)
m = size(train_patterns,2);
class_num = size(weight,2);
g = zeros(size(weight));
for j = 1:class_num
for i = 1:m
if(train_labels(i) == j)
g(:,j) = g(:,j) + (1 - log(sigmoid_multi(weight,train_patterns(:,i),j) + eps))*train_patterns(:,i);
end
end
end
g = -(g/m);
end
function J = object_function(train_patterns,train_labels,weight)
m = size(train_patterns,2);
J = 0;
for i = 1:m
J = J + log(sigmoid_multi(weight,train_patterns(:,i),train_labels(i)) + eps);
end
J = -(J/m);
end
function weight = multi_logistic_train(train_patterns,train_labels,alpha)
%% weight feature_dim * class_num
%% train_patterns featur_dim * sample_num
%% train_labels 1 * sample_num
%% alpha scalar
class_num = length(unique(train_labels));
m = size(train_patterns,2); %% sample_number;
n = size(train_patterns,1); % feature_dim;
weight = rand(n,class_num);
for i = 1:40
J = object_function(train_patterns,train_labels,weight);
fprintf('objec function value : %f\n',J);
weight = weight - alpha*gradient(train_patterns,train_labels,weight);
end
end