2012-05-02 14 views
1

私はしばらくの間、MATLABでロジスティック回帰を実装しようとしています。私はすでにそれを行っていますが、私にはわからないreasionsについては、fminuncを使用して1回の反復を実行することができません。関数が呼び出されると、プログラムは無期限に待機モードに入ります。コードに何か問題がありますか、または私のデータが大きくなっていますか?matlab fminuncが終了しない(無期限に実行中)

function [theta J] = logisticReg(initial_theta, X, y, lambda, iter) 

% Set Options 
options = optimset('GradObj', 'on', 'MaxIter', iter); 

% Optimize 
[theta, J, exit_flag] = fminunc(@(t)(costFunctionReg(t, X, y, lambda)), initial_theta, options); 

end 

どこ

X is a [676,6251] matrix 
y is a [676,1] vector 
lambda = 1 
initial_theta is [6251, 1] vector of zeros 
iter = 1 

どれでも '正しい方向に向い' を大幅に高く評価されます! P.P.私はcostFunctionRegを実行することができました。それはこの関数だと仮定しています。

@Rasman質問に答えるためにcostFunctionReg

function [J, grad] = costFunctionReg(theta, X, y, lambda) 

m = length(y); % number of training examples 

J = 0; 
grad = zeros(size(theta)); 

hyp = sigmoid(X * theta); 
cost_reg = (lambda/(2*m)) * sum(theta(2:end).^2); 

J = 1/m * sum((-y .* log(hyp)) - ((1-y) .* log(1-hyp))) + cost_reg; 


grad(1) = 1/m * sum((hyp - y)' * X(:,1)); 
grad(2:end) = (1/m * ((hyp - y)' * X(:,2:end))) + (lambda/m)*theta(2:end)'; 

を要求されるように:

Cost at initial theta: NaN 
press any key to continue 
Performing Logistic Regrestion 
Error using sfminbx (line 28) 
Objective function is undefined at initial point. fminunc cannot continue. 

Error in fminunc (line 406) 
    [x,FVAL,~,EXITFLAG,OUTPUT,GRAD,HESSIAN] = sfminbx(funfcn,x,l,u, ... 

Error in logisticReg (line 8) 
[theta, J, exit_flag] = fminunc(@(t)(costFunctionReg(t, X, y, lambda)), 
initial_theta, options); 

Error in main (line 40) 
[theta J] = logisticReg(initial_theta, X, y, lambda, iter); 

最初の行はinitial_thetaでcostFunctionRegを実行している私ですが。

+0

あなたは 'costFunctionReg'を表示することができますか?問題はそれである可能性があります。また、MaxFunEvalsを設定することもできます。多分、繰り返しごとに非常に多くの計算が必要です。 – bdecaf

+0

デバッガでコードを開始し、コスト関数にブレークポイントを設定して、到達しているかどうかを確認してください。 – silvado

+0

ねえ、簡単な質問です。まだ機械学習に新しいです。私は実際に分類問題を解決しようとしています。それが私の問題の原因かもしれませんか? – cubearth

答えて

0

それはあなたがすでにこのリンクを検索しようとした可能性があります: http://www.mathworks.com/matlabcentral/newsreader/view_thread/290418

一般アークが(私は上記のサイトからのテキストの編集をした/コピーして貼り付けました)です:

エラーメッセージあなたの目的関数 "obj"が のエラーか、Inf、NaNまたはx0点で評価された場合には の複合体などの無効な値を返します。

あなたはそれが明確に定義されていますかどうかを確認する(fminuncは、またはあなたのケースで)はfminconを呼び出す前に、X0であなたの機能を評価することもできます。

costFunctionReg(initial_theta) 

そして、あなたの機能(costFunctionRegが)戻っているかのような何かそれから、それを取り除くためにreal()を使います。

関連する問題