top of page

Java'da Karar Agaclari - Linear Regression

  • Writer: Sevdanur GENC
    Sevdanur GENC
  • Jan 23, 2012
  • 4 min read

Surekli degiskenlerin ongorusu regrasyon yani egri uydurma olarak adlandirilan bir istatistiksel yontemle tespit edilebilir. Regrasyon analizinin amaclari degisik girdi degiskenlerini cikti degiskeni ile iliskilendirecek en iyi modelin cikarilmasidir. Bir Y degiskeninin diger bir veya daha cok X1, X2, ... Xn, gibi degiskenleri ile iliskisinin belirlenmesi surecidir. Y , yanit ciktisi veya bagimli degisken olarak adlandirilir. Xi degiskenleri girdi ve bagimsiz degiskenler olarak adlandirilacaktir. Bir veri kumesinde bulunan iliski bu model ile karakterize edilebilir. Regrasyon Model Denklemi ise ;

Kaynak Kodlar ;

DosyaGirisi.javaDosyaGirisi.java

import java.io.*; public class DosyaGirisi { private BufferedReader bin; public StreamTokenizer tokenizer = null; public DosyaGirisi(String DosyaAdi) throws Exception { bin = new BufferedReader(new FileReader(DosyaAdi)); tokenizer = new StreamTokenizer(bin); tokenizer.wordChars('_', '_'); tokenizer.slashStarComments(true); tokenizer.slashSlashComments (true); tokenizer.parseNumbers(); } public double DosyaOkuma() throws Exception { double deger = 0; if (tokenizer == null) throw new Exception("Dosya okunmak icin acilmis degil..."); if (tokenizer.nextToken()  == StreamTokenizer.TT_EOF) throw new Exception("Dosya sonuna ulasildi..."); switch(tokenizer.ttype) { case StreamTokenizer.TT_NUMBER: deger = tokenizer.nval; break; case StreamTokenizer.TT_EOL: case StreamTokenizer.TT_WORD: default: throw new Exception( "Dosya icerisinde yanlis veri turu bulundu... Numarasi bekleniyior..." ); } return deger; } public void DosyaKapama() throws Exception { bin.close(); bin = null; tokenizer = null; } }

Regression.javaRegression.java

public class Regression { public static boolean DogrusalEsZamanliDenklemCozumu(double []A, double []Y, double []X) { int i,j,k; double toplam, fact; int n = Y.length; for (i=0; i< n; i++) { for (j=i+1; j< n; j++) { if ( A

== 0) continue; fact = A

/ A

; for (k=i+1; k< n; k++) A

= A

*fact - A

; Y

= Y

*fact - Y

; } } for (i=n-1; i>=0; i--) { if (A

== 0) return false; toplam = Y

; for (k=i+1; k< n; k++) toplam = toplam - A

*X

; X

= toplam/A

; } return true; } static void MatrisHali(int n, int m, int p, double []A, double []B, double []C) { int i, j, k; for (i=0; i< n; i++) { for (j=0; j< p; j++) { C

= 0; for (k=0; k< m; k++) C

+= A

*B

; } } return; } static void  MatrisinTranspozeHali(int m, int n, double []A, double []B) { int i, j; for (i=0; i< n; i++) for (j=0; j< m; j++) B

= A

; return ; } static double Ortalama(int n, double []x) { int i; double toplam; toplam = 0; if (n == 0) return 0; for (i=0; i< n; i++) toplam += x

; return toplam/n; } public static boolean linearRegression(int m, int n, double []X, double []Y,double []A, double []kolerasyon) { double []XTX; double []XTY; double []XT; int i, j; double ybar, ycap, sumr, sumt; boolean stat; if (m < 1 || n < 1) return false; XT  = new double

; XTX =  new double

; XTY =  new double

; MatrisinTranspozeHali(m,n,X,XT); MatrisHali(n,m,n, XT, X,XTX); MatrisHali(n,m,1, XT, Y,XTY); stat = DogrusalEsZamanliDenklemCozumu(XTX, XTY, A); if (!stat) return false; { ybar = Ortalama(n, Y); sumr = 0; sumt = 0; for (i=0; i< m; i++) { ycap = 0; for (j=0; j< n; j++) ycap += A

*X

; sumr += (ycap - ybar)*(ycap - ybar); sumt += (Y

- ybar)*(Y

- ybar); /* printf("\t%8.2f\t%8.2f\n", ycap, Y

); */ } if (sumt == 0) kolerasyon<0>

=0; else kolerasyon<0>

= sumr/sumt; } return true; } }

TestRegression.JavaTestRegression.Java

public class TestRegression { int veri; int degiskenler; public double []X; public double []Y; public double []A; public int VeriOkuma(String DosyaAdi)  throws Exception { DosyaGirisi input = new DosyaGirisi(DosyaAdi); int nn = (int)input.DosyaOkuma(); if (nn <= 0) { System.err.println(" Ilk veri dosyası sayısı değişkenlerinin sayı olmalıdır "); return -1; } degiskenler = nn; int mm = (int)input.DosyaOkuma(); if (mm < nn) { System.err.println(" ikinci veri dosyası sayısı, veri noktalarının sayısı olmalıdır. Veri numarası olmalıdır> = değişkenlerin sayısı "); return -1; } veri = mm; X = new double

; Y = new double

; A = new double

; for (int i=0; i< mm; i++) {                 // Aşağıdaki döngü bir veri satırı okur for (int j=0; j< nn; j++) { X

= input.DosyaOkuma(); } Y

= input.DosyaOkuma(); } input.DosyaKapama(); return nn; } public void testRegression(String DosyaAdi)  throws Exception { int durum = VeriOkuma(DosyaAdi); if (durum <= 0) return; MatrisYazdir(  "X matrix verileri ; ", veri, degiskenler, X); MatrisYazdir(  "Y matrix verileri ; ", veri, 1, Y); double []kolerasyon = new double<1>

; long BaslangicZamani = System.currentTimeMillis(); boolean sonuc = Regression.linearRegression(veri, degiskenler, X, Y, A, kolerasyon); if (sonuc == false) { System.out.println(" Verilen veri kümesi regresyon ile çözülemez. "); return; } long BitisZamani = System.currentTimeMillis(); long ToplamZaman = (BitisZamani-BaslangicZamani)/1000; System.out.println( ToplamZaman + " saniye surdu..."); System.out.println("çözüm = \n"); for (int i=0; i< A.length; i++) { System.out.println("\t" + A

); } System.out.println("korelasyon sonucu =" + kolerasyon<0>

); } static void MatrisYazdir(String isim, int m, int n, double []A) { int i,j; System.out.println(isim); for (i=0; i< m; i++) { for (j=0; j< n; j++) { System.out.print( "\t" +  A

); } System.out.println(""); } System.out.println(""); } public static void main(String []args)  throws Exception { int num = args.length; if (num != 1) { System.out.println("Komut satırından veri dosyası adını belirtmeniz gerekir..." ); return; } TestRegression cozucu = new TestRegression(); cozucu.testRegression(args<0>

); } }

LineerRegressionTest.JavaLineerRegressionTest.Java

public class LineerRegressionTest { public static void main(String []args)  throws Exception { TestRegression.main(new String[]{"c:/nano.txt"}); // dosyanin ismini bu main ile calistiriyoruz... } }

Nano.Txt ' de ki ornek veriler ;Nano.Txt ' de ki ornek veriler ;

Ekran Ciktisi ;Ekran Ciktisi ;

Recent Posts

See All
Ado.Net Entity Framework Ogreniyorum Serisi 00

Ado.Net Entity Framework (EF) verileri ile etkilesim uygulamalari gelistirmek icin kullanilan Ado.Net nesne iliskisel modelleme yazilimi olarak iliskisel veritabani semalarini ve nesneler arasinda ki

 
 
 
LINQ Ogreniyorum Serisi 05

Linq To Sql’de tablolarimizdaki verileri silebilmemiz icin; DataContext icerisinde ki DeleteOnSubmit ve DeleteAllOnSubmit metodlari kullanilmaktadir. Beraberinde SubmitChanges metodu da kodlari eklen

 
 
 
LINQ Ogreniyorum Serisi 04

Linq To Sql’de tablolarimiza verileri guncelleyebilmemiz icin; DataContext icerisinde ki SubmitChanges metodu kullanilmaktadir. Bu komutlari kullanarak DataContext sinifinin yapisina da ihtiyac duyu

 
 
 

Comments


©2035 by Sevdanur Genc. Powered and secured by Wix

bottom of page