Multi variable de descente de gradient dans matlab
Je suis en train de faire la descente de gradient dans matlab pour plusieurs variables, et le code n'est pas en train de l'attendre thetas que j'ai obtenu avec la normale de l'eq. qui sont:
theta =
1.0 e+05 *
3.4041
1.1063
-0.0665
Avec la Normale de l'eq. J'ai mis en œuvre.
Et avec le GDM les résultats que j'obtiens sont:
theta =
1.0 e+05 *
2.6618
-2.6718
-0.5954
Et je ne comprends pas pourquoi est-ce, peut-être que quelqu'un peut m'aider et me dire où est l'erreur dans le code.
Code:
function [theta, J_history] = gradientDescentMulti(X, y, theta, alpha, num_iters)
m = length(y); % number of training examples
J_history = zeros(num_iters, 1);
thetas = size(theta,1);
features = size(X,2)
mu = mean(X);
sigma = std(X);
mu_size = size(mu);
sigma_size = size(sigma);
%for all iterations
for iter = 1:num_iters
tempo = [];
result = [];
theta_temp = [];
%for all the thetas
for t = 1:thetas
%all the examples
for examples = 1:m
tempo(examples) = ((theta' * X(examples, :)') - y(examples)) * X(m,t)
end
result(t) = sum(tempo)
tempo = 0;
end
%theta temp, store the temp
for c = 1:thetas
theta_temp(c) = theta(c) - alpha * (1/m) * result(c)
end
%simultaneous update
for j = 1:thetas
theta(j) = theta_temp(j)
end
% Save the cost J in every iteration
J_history(iter) = computeCostMulti(X, y, theta);
end
theta
end
Grâce.
EDIT: Données.
X =
1.0000 0.1300 -0.2237
1.0000 -0.5042 -0.2237
1.0000 0.5025 -0.2237
1.0000 -0.7357 -1.5378
1.0000 1.2575 1.0904
1.0000 -0.0197 1.0904
1.0000 -0.5872 -0.2237
1.0000 -0.7219 -0.2237
1.0000 -0.7810 -0.2237
1.0000 -0.6376 -0.2237
1.0000 -0.0764 1.0904
1.0000 -0.0009 -0.2237
1.0000 -0.1393 -0.2237
1.0000 3.1173 2.4045
1.0000 -0.9220 -0.2237
1.0000 0.3766 1.0904
1.0000 -0.8565 -1.5378
1.0000 -0.9622 -0.2237
1.0000 0.7655 1.0904
1.0000 1.2965 1.0904
1.0000 -0.2940 -0.2237
1.0000 -0.1418 -1.5378
1.0000 -0.4992 -0.2237
1.0000 -0.0487 1.0904
1.0000 2.3774 -0.2237
1.0000 -1.1334 -0.2237
1.0000 -0.6829 -0.2237
1.0000 0.6610 -0.2237
1.0000 0.2508 -0.2237
1.0000 0.8007 -0.2237
1.0000 -0.2034 -1.5378
1.0000 -1.2592 -2.8519
1.0000 0.0495 1.0904
1.0000 1.4299 -0.2237
1.0000 -0.2387 1.0904
1.0000 -0.7093 -0.2237
1.0000 -0.9584 -0.2237
1.0000 0.1652 1.0904
1.0000 2.7864 1.0904
1.0000 0.2030 1.0904
1.0000 -0.4237 -1.5378
1.0000 0.2986 -0.2237
1.0000 0.7126 1.0904
1.0000 -1.0075 -0.2237
1.0000 -1.4454 -1.5378
1.0000 -0.1871 1.0904
1.0000 -1.0037 -0.2237
y =
399900
329900
369000
232000
539900
299900
314900
198999
212000
242500
239999
347000
329999
699900
259900
449900
299900
199900
499998
599000
252900
255000
242900
259900
573900
249900
464500
469000
475000
299900
349900
169900
314900
579900
285900
249900
229900
345000
549000
287000
368500
329900
314000
299000
179900
299900
239500
Ensemble de données complet.
Veuillez inclure vos données.
Ha sûr pas de pb, c'est un gros fichier. C'est pourquoi je n'ai mis. 🙂
Puis créer artificielle ensemble qui est includable et échoue également. C'est la seule façon valable de demander de l'aide avec des données basées sur des problèmes.
Fait, a ajouté l'ensemble des données
Ha sûr pas de pb, c'est un gros fichier. C'est pourquoi je n'ai mis. 🙂
Puis créer artificielle ensemble qui est includable et échoue également. C'est la seule façon valable de demander de l'aide avec des données basées sur des problèmes.
Fait, a ajouté l'ensemble des données
OriginalL'auteur Pedro.Alonso | 2013-10-20
Vous devez vous connecter pour publier un commentaire.
La ligne où vous calculer le tempo est mauvais. Il devrait être
Également essayer d'utiliser la matrice des opérations dans MATLAB. Votre code sera plus rapide et il sera également plus facile à comprendre. Par exemple, vous pouvez remplacer votre boucle imbriquée avec
Vous pouvez remplacer vos prochaines deux boucle pour la mise à jour de thêta dans une ligne
Vous aviez X(m,t). m est toujours fixe. Que vous utilisiez la dernière ligne X pour tous les calculs. X(exemples,t) utilise la ligne correcte.
Oui, je vous remercie. Je le vois maintenant.
OriginalL'auteur Navan