Advertisement
Guest User

Octave ile gradient descent uygulaması

a guest
Jun 3rd, 2018
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Octave 4.56 KB | None | 0 0
  1. %% Ayarlamalar:
  2. MaxIter=5000;        %Azami iterasyon sayısı
  3. alfa=0.01;            %Öğrenme katsayısı (ilerleme adımı)
  4. MinDescent=0.000001;  %Asgari azalma miktarı 0.00000001 değerinden daha küçültünce, program bitiminde teta değerleri sapıtıyor
  5.  
  6. x=[1 0;1 1;1 2;1 3];    % x ile tetayı çarpmak için teta0'ın yanına sabit x=1 koyuyoruz. 4x2 * 2*1 ==> 4*1 matris oluşuyor.
  7. y=[0;2;4;6];
  8.  
  9. printf('En fazla %d iterasyon yapılacak, asgari azalma %e altına düşerse bitirilecek\n',MaxIter,MinDescent)
  10. m=length(x);
  11. teta=[0;0];
  12. J=(1/(2*m))*sum((x*teta-y).^2);     % J=7
  13. hata=x*teta-y;
  14. teta_gecici(1,1)=teta(1)-(alfa/m)*sum(hata);        % teta0=0.3
  15. teta_gecici(2,1)=teta(2)-(alfa/m)*(x(:,2)'*hata);   % teta1=0.7
  16. teta=teta_gecici; % eşzamanlı güncellemek için geçici değişken kullanıyoruz.
  17. %Elde ettiğimiz yeni değişkenleri bir matrise kaydet, belki çizdiririz.
  18. JveTeta=[J teta(1) teta(2)];
  19. printf('1. iterasyon --->  J=%f  teta0=%f  teta1=%f\n\n', J, teta(1,1), teta(2,1))
  20. % Buraya kadar sadece 1 iterasyon yapıldı. Bunun tamamen döngüye sokulmuş hali ayrıca aşağıda var.
  21.  
  22. for i=2:MaxIter % ilk satır yukarıda yazıldı zaten
  23.  
  24.   % hesaplara başla
  25.   J=(1/(2*m))*sum((x*teta-y).^2);     % J=7
  26.   hata=x*teta-y;
  27.   teta_gecici(1,1)=teta(1)-(alfa/m)*sum(hata);        % teta0=0.3
  28.   teta_gecici(2,1)=teta(2)-(alfa/m)*(x(:,2)'*hata);   % teta1=0.7
  29.   teta=teta_gecici;  % eşzamanlı güncellemek için geçici değişken kullanıyoruz.
  30.  
  31.   % Değişkenleri matrise ekle
  32.   JveTeta(i,1)=J; JveTeta(i,2)=teta(1); JveTeta(i,3)=teta(2);
  33.  
  34.   % Her iterasyonu yazdırması için alttaki kısmı aç
  35.   %printf('%d. iterasyon --->  J=%f  teta0=%f  teta1=%f\n', i, J, teta(1,1), teta(2,1))
  36.  
  37.   % Azalma miktarını hesapla (Jnin son değeri ile önceki arasındaki fark):
  38.   Azalma=JveTeta(i-1,1)-JveTeta(i,1);
  39.   yaklasim=false;
  40.   if (Azalma<MinDescent);
  41.     disp('Asgari azalma değerine ulaşıldı, iterasyon bitiriliyor')
  42.     printf('%d iterasyon sonucunda işlem tamamlandı. Azalma miktarı %e değerine düştü.\n', i, Azalma)
  43.     printf('Bulunan hipotez fonksiyonu ---> h(teta) = %f + %f x\n',teta(1),teta(2))
  44.     yaklasim=true;
  45.     break
  46.   endif
  47. endfor
  48. if (yaklasim==false)
  49.   disp('Azami iterasyon değerine ulaşıldı, iterasyon bitiriliyor')
  50.   printf('%d iterasyon sonucunda işlem tamamlandı. Azalma miktarı %e değerine düştü.\n', i, Azalma)
  51.   printf('Bulunan hipotez fonksiyonu ---> h(teta) = %f + %f x\n',teta(1),teta(2))
  52. endif
  53.  
  54. % BURADA PROGRAM BİTTİ ASLINDA, GRAFİKLER BAŞLIYOR
  55.  
  56. % Alttaki kısımda olası tüm teta değerleri için J yüzeyi hesaplanıp çiziliyor.
  57. % http://openclassroom.stanford.edu/MainFolder/DocumentPage.php?course=MachineLearning&doc=exercises/ex2/ex2.html
  58. J_vals = zeros(100, 100);   % initialize Jvals to 100x100 matrix of 0's
  59. theta0_vals = linspace(0, 3, 100);
  60. theta1_vals = linspace(0, 3, 100);
  61. for i = 1:length(theta0_vals)
  62.       for j = 1:length(theta1_vals)
  63.       t = [theta0_vals(i); theta1_vals(j)];
  64.       J_vals(i,j) = (1/(2*m))*sum((x*t-y).^2); %% YOUR CODE HERE %%
  65.     end
  66. end
  67. J_vals = J_vals';
  68. subplot(2,2,1);
  69. surf(theta0_vals, theta1_vals, J_vals)
  70. xlabel('\theta_0'); ylabel('\theta_1'); zlabel('J maliyet fonksiyonu')
  71. title('Olası tüm \theta değerleri için J maliyetleri')
  72.  
  73. %% Alttaki kısımda her iterasyon için J'nin değeri çizdiriliyor.
  74. subplot(2,2,2); plot (JveTeta(:,1));    % İterasyona bağlı maliyet eğirisi
  75. title ('J maliyet fonksiyonu, iterasyona bağlı')
  76. xlabel ('iterasyon sayısı')
  77. ylabel ('J maliyet (hata) değeri')
  78.  
  79. %% Alttaki kısımda, iki grafik var:
  80. % 1) verilen x ve y değerleri scatterplot olarak
  81. % 2) olası tüm x değerlerine karşılık tahmin edilen y değerleri (çizgi)
  82. subplot(2,2,3); scatter(x(:,2),y)        % Giriş ve çıkış eğrğsi (x,y)
  83. hold on
  84. test_x=linspace(0,max(x(:,2)));        %Tahmin edilecek verileri lineer skalada bol miktarda oluştur:
  85. test_y=polyval(flipud(teta),test_x);   %Hipotez fonksiyonunu her bir test_x için hesapla
  86. plot(test_x,test_y) %Uydurulan fonksiyonu çiz
  87. title ('X''ler (verilen ve uydurulan) ile uydurulan y''ler')
  88. xlabel ('x (girişler) ekseni')
  89. ylabel ('y (çıkışlar)')
  90. %%polyout(flipud(teta),'x')    %Hipotez fonksiyonunu yazdır
  91.  
  92. % Alttaki kısımda, iterasyon sırasında elde edilen teta'lara bağlı J değerleri
  93. subplot(2,2,4);
  94. matrix=fliplr(JveTeta);
  95. tri = delaunay(matrix(:,1),matrix(:,2));
  96. trisurf(tri,matrix(:,1),matrix(:,2),matrix(:,3))
  97. shading interp
  98. title('iterasyon sırasında elde edilen \theta''lar için maliyet')
  99. xlabel('\theta_1'); ylabel('\theta_0'); zlabel('J  maliyet fonksiyonu')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement