Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %% Ayarlamalar:
- MaxIter=5000; %Azami iterasyon sayısı
- alfa=0.01; %Öğrenme katsayısı (ilerleme adımı)
- MinDescent=0.000001; %Asgari azalma miktarı 0.00000001 değerinden daha küçültünce, program bitiminde teta değerleri sapıtıyor
- 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.
- y=[0;2;4;6];
- printf('En fazla %d iterasyon yapılacak, asgari azalma %e altına düşerse bitirilecek\n',MaxIter,MinDescent)
- m=length(x);
- teta=[0;0];
- J=(1/(2*m))*sum((x*teta-y).^2); % J=7
- hata=x*teta-y;
- teta_gecici(1,1)=teta(1)-(alfa/m)*sum(hata); % teta0=0.3
- teta_gecici(2,1)=teta(2)-(alfa/m)*(x(:,2)'*hata); % teta1=0.7
- teta=teta_gecici; % eşzamanlı güncellemek için geçici değişken kullanıyoruz.
- %Elde ettiğimiz yeni değişkenleri bir matrise kaydet, belki çizdiririz.
- JveTeta=[J teta(1) teta(2)];
- printf('1. iterasyon ---> J=%f teta0=%f teta1=%f\n\n', J, teta(1,1), teta(2,1))
- % Buraya kadar sadece 1 iterasyon yapıldı. Bunun tamamen döngüye sokulmuş hali ayrıca aşağıda var.
- for i=2:MaxIter % ilk satır yukarıda yazıldı zaten
- % hesaplara başla
- J=(1/(2*m))*sum((x*teta-y).^2); % J=7
- hata=x*teta-y;
- teta_gecici(1,1)=teta(1)-(alfa/m)*sum(hata); % teta0=0.3
- teta_gecici(2,1)=teta(2)-(alfa/m)*(x(:,2)'*hata); % teta1=0.7
- teta=teta_gecici; % eşzamanlı güncellemek için geçici değişken kullanıyoruz.
- % Değişkenleri matrise ekle
- JveTeta(i,1)=J; JveTeta(i,2)=teta(1); JveTeta(i,3)=teta(2);
- % Her iterasyonu yazdırması için alttaki kısmı aç
- %printf('%d. iterasyon ---> J=%f teta0=%f teta1=%f\n', i, J, teta(1,1), teta(2,1))
- % Azalma miktarını hesapla (Jnin son değeri ile önceki arasındaki fark):
- Azalma=JveTeta(i-1,1)-JveTeta(i,1);
- yaklasim=false;
- if (Azalma<MinDescent);
- disp('Asgari azalma değerine ulaşıldı, iterasyon bitiriliyor')
- printf('%d iterasyon sonucunda işlem tamamlandı. Azalma miktarı %e değerine düştü.\n', i, Azalma)
- printf('Bulunan hipotez fonksiyonu ---> h(teta) = %f + %f x\n',teta(1),teta(2))
- yaklasim=true;
- break
- endif
- endfor
- if (yaklasim==false)
- disp('Azami iterasyon değerine ulaşıldı, iterasyon bitiriliyor')
- printf('%d iterasyon sonucunda işlem tamamlandı. Azalma miktarı %e değerine düştü.\n', i, Azalma)
- printf('Bulunan hipotez fonksiyonu ---> h(teta) = %f + %f x\n',teta(1),teta(2))
- endif
- % BURADA PROGRAM BİTTİ ASLINDA, GRAFİKLER BAŞLIYOR
- % Alttaki kısımda olası tüm teta değerleri için J yüzeyi hesaplanıp çiziliyor.
- % http://openclassroom.stanford.edu/MainFolder/DocumentPage.php?course=MachineLearning&doc=exercises/ex2/ex2.html
- J_vals = zeros(100, 100); % initialize Jvals to 100x100 matrix of 0's
- theta0_vals = linspace(0, 3, 100);
- theta1_vals = linspace(0, 3, 100);
- for i = 1:length(theta0_vals)
- for j = 1:length(theta1_vals)
- t = [theta0_vals(i); theta1_vals(j)];
- J_vals(i,j) = (1/(2*m))*sum((x*t-y).^2); %% YOUR CODE HERE %%
- end
- end
- J_vals = J_vals';
- subplot(2,2,1);
- surf(theta0_vals, theta1_vals, J_vals)
- xlabel('\theta_0'); ylabel('\theta_1'); zlabel('J maliyet fonksiyonu')
- title('Olası tüm \theta değerleri için J maliyetleri')
- %% Alttaki kısımda her iterasyon için J'nin değeri çizdiriliyor.
- subplot(2,2,2); plot (JveTeta(:,1)); % İterasyona bağlı maliyet eğirisi
- title ('J maliyet fonksiyonu, iterasyona bağlı')
- xlabel ('iterasyon sayısı')
- ylabel ('J maliyet (hata) değeri')
- %% Alttaki kısımda, iki grafik var:
- % 1) verilen x ve y değerleri scatterplot olarak
- % 2) olası tüm x değerlerine karşılık tahmin edilen y değerleri (çizgi)
- subplot(2,2,3); scatter(x(:,2),y) % Giriş ve çıkış eğrğsi (x,y)
- hold on
- test_x=linspace(0,max(x(:,2))); %Tahmin edilecek verileri lineer skalada bol miktarda oluştur:
- test_y=polyval(flipud(teta),test_x); %Hipotez fonksiyonunu her bir test_x için hesapla
- plot(test_x,test_y) %Uydurulan fonksiyonu çiz
- title ('X''ler (verilen ve uydurulan) ile uydurulan y''ler')
- xlabel ('x (girişler) ekseni')
- ylabel ('y (çıkışlar)')
- %%polyout(flipud(teta),'x') %Hipotez fonksiyonunu yazdır
- % Alttaki kısımda, iterasyon sırasında elde edilen teta'lara bağlı J değerleri
- subplot(2,2,4);
- matrix=fliplr(JveTeta);
- tri = delaunay(matrix(:,1),matrix(:,2));
- trisurf(tri,matrix(:,1),matrix(:,2),matrix(:,3))
- shading interp
- title('iterasyon sırasında elde edilen \theta''lar için maliyet')
- xlabel('\theta_1'); ylabel('\theta_0'); zlabel('J maliyet fonksiyonu')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement