2016 - Elektrik Elektronik Projeleri

Post Top Ad

15 Nisan 2016 Cuma

Lineer Regresyon

4/15/2016 0
Lineer regresyon, makine öğrenmesinin en eski yöntemlerinden olup, bir bağımlı değişken ile bir veya birden çok bağımsız değişken arasında ki ilişkiyi formülize etmek için kullanılan bir yöntemdir. Burada ki amacımız, minimum hataya sahip, bağımsız değişkenlerin bağımlı değişkenler üzerinde ki etkisini bulmaktır. Gerçek verilerden oluşan eğitim verisi kullanılarak, her bir değişkenin sonuç üzerindeki ağırlığı belirlenir ve daha sonra yeni gelen verilerle bir sonraki durum tahmin edilebilir. Örneğin, marketler zincirinizin olduğunu ve birçok şehirde şubelerinizin olduğunu düşünün. Yeni bir şube açacaksınız ama hangi şehirde? Karınızın o şehrin nüfusu ile bağlantılı olduğunu varsayarsak, elinizdeki eğitim verisini (şubelerinizin olduğu şehirlerin nüfusu ve kar oranlarının olduğu bir liste) regresyon metodundan geçirerek nüfusun kar üzerindeki ağırlığını bulabilirsiniz. Daha sonra şube açmak istediğiniz şehrin nüfusuna bağlı olarak o şehirde kar mı, yoksa zarar mı edeceğinizi kestirebilirsiniz.

Şimdi bu eğitim verisini Python da nasıl göstereceğimize bakalım. Bunun için Python da numpy ve matplotlib kütüphanesini kullanacağız. Eğer gerekli kütüphaneleri indirmediyseniz aşağı linklerden indirip kurabilirsiniz. Kurulum ile ilgili kütüphanelerin kendi dökümantasyonu içerisinde anlatımları mevcuttur.

Yukarıdaki kütüphaneleri kurduysanız Python ile veri kümesini aşağıdaki gibi görselleştirebilirsiniz:
1:  import numpy as np  
2:  import matplotlib.pyplot as plt  
3:  import random  
4:  def f(x): return 2*x + 4  
5:  trainX=[]  
6:  trainY=[]  
7:  for i in range(0, 50):  
8:    y = f(i)  
9:    x = random.choice([i+2, i+1, i, i-0, i-2])  
10:    trainX.append(x)  
11:    trainY.append(y)  
12:    print str(x) + " " + str(y)  
13:  fig, ax = plt.subplots()  
14:  ax.plot(trainX, trainY, "r*")  
15:  plt.show()  

Lineer regresyona iki çeşit yaklaşım vardır: Tek Değişkenli Lineer Regresyon ve Çok Değişkenli Lineer Regresyon. Biz burada tek değişkenli lineer regresyondan bahsedeceğiz. Tek değişkenli lineer regresyon aşağıdaki gibi ifade edebiliriz:


Çok değişkenli lineer bir denklemi aşağıdaki gibi ifade edebiliriz:

Burada:

              : Bağımlı değişken
             : Bağımsız değişken
          : Sabit
           : ’nin  üzerindeki ağırlığı 
           : Değişken sayısı

  Olmak şartı ile yukarıdaki denklemi kısaca:

Lineer regresyonda ki amacımız,  değerlerini hesaplamak.  Değerleri öyle bir seçilmeli ki   fonksiyonun da hesaplanan tahmin ile gerçek değer olan   arasında ki fark(hata) minimum olmalı. Daha teknik bir deyim ile  ve   rasındaki farkı gösterecek maliyet fonksiyonunu(cost function) minimum olmalıdır. Maliyet fonksiyonu, şu şekilde ifade edilebilir:


Burada:
            : ’inci satırdaki özellik listesi. Yani, 
          : ’inci satırdaki gerçek değer.
          : ’inci satırdaki tahmin edilen değer.

Yukarıdaki maliyet fonksiyonunu  kodlayacak olursak şu şekilde olacaktır:
1:  def compute_cost(X, y, theta):  
2:        m = y.size  
3:        hx = (X.dot(theta).flatten() - y)**2  
4:        J = ( 1.0 / (2*m)) * hx.sum()  
5:        return J  
Maliyet fonksiyonu ile seçtiğimiz  değerinin sonuç üzerindeki hatasını bulduk. Ancak amacımız minimum hataya sahip  değerlerini belirlemek. Bunun için Gradient Descent metodunu kullanarak fonksiyondaki minimum değeri bulabiliriz. GradientDescent, belirlenen oransal adım büyüklüğü (biz buna öğrenme oranı diyeceğiz.) ile yerel minimum ya da maksimum noktayı hızlı bir şekilde elde etmeye yarayan bir yöntemdir. Genel olarak gradient descent fonksiyonu aşağıdaki gibidir:
Gradient descent metodunu maliyet fonksiyonuna uyarladığımızda aşağıdaki fonksiyonu elde ederiz:
Gradient Descent algoritmasını python ile kodladığımızda aşağıdaki sonucu elde edeceğiz:

1:  def gradient_descent(X, y, alpha, theta, iter):  
2:        m = y.size  
3:        J_history = np.zeros(shape= (iter, 1))  
4:        for i in range(iter):  
5:              hx0 = (X.dot(theta).flatten() - y)  
6:              hx1 = (X.dot(theta).flatten() - y) * X[:, 1]  
7:              theta[0,0] = theta[0,0] - alpha * (1.0 / m) * hx0.sum()  
8:              theta[1,0] = theta[1,0] - alpha * (1.0 / m) * hx1.sum()  
9:              J_history[i, 0] = compute_cost(X, y, theta)  
10:        return theta, J_history  

  Çok küçük  belirlendiğinde   Gradient Descent algoritması yavaş çalışacaktır.


Eğer ki değerini çok büyük belirlersek, algoritma hedeflenen minimum değeri atlayabilir. Bu sebepten minimum noktaya yakınsamak yerine uzaklaşabilir.


Eğitim verisinin okunması ve başlangıç parametreleri verilerek Regresyonun çalışması aşağıda verilmiştir:
1:  data_set = np.loadtxt('x01.txt')  
2:  X = data_set[:, 0]  
3:  y = data_set[:, 1]  
4:  m = y.size  
5:  XX = np.ones(shape=(m,2))  
6:  XX[:, 1] = X  
7:  alpha = 0.01  
8:  theta = np.zeros(shape = (2,1))  
9:  iter = 2000  
10:  theta, J = gradient_descent(XX, y, alpha, theta, iter)  
11:  result = XX.dot(theta).flatten()  
12:  py.scatter(X, y, marker= 'x', c='r')  
13:  py.plot(X, result)  
14:  py.show()  

Kodu çalıştırdığımızda minimum hataya sahip denklemimiz aşağıda ki gibi olacak:





Kodların tamamını https://github.com/sahinmustafa/makinaogrenmesi linkinden indirebilirsiniz.

Devamı

23 Mart 2016 Çarşamba

Makine Öğrenmesi Nedir?

3/23/2016 1


Öğrenme, canlının yaşantıları sonucu hayatın da meydana gelen sürdürülebilir değişikliklerdir. Çevreye uyum sürecidir. Makine öğrenmesi (Machine Learning) ise geçmişteki verileri inceleyerek gelecek için tahminlerde bulunma ve olası problemlere çözümler üretme amacıyla ortaya çıkmış, otomatik olarak kendisini geliştiren bilgisayar programlarını nasıl elde ederiz sorusuyla ilgilenen, bilgisayarın öğrenme işlemini gerçekleşmesini sağlayacak algoritma ve tekniklerin gelişmesini sağlayan bir çalışma alanıdır. Makine öğrenmesi, bir çok alanda kullanımı mevcuttur. Örneğin, Spam/Spam değil, Youtube video önerisi, el yazısı tanıma, tıbbi tanı, borsa çözümleyicisi, DNA dizileri sınıflandırılması, bilgisayarla görme gibi ...
Devamı

22 Şubat 2016 Pazartesi

Arduino & Android - Bluetooth Üzerinden Sesli Komutlarla Led Kontrolü

2/22/2016 9
Bu uygulamamızda MIT APP INVENTOR 2 ile hazırladığımız Android uygulama ve HC-06 (veya HC-05) bluetooth modülü ile sesle komut vererek led yakıp söndüreceğiz. Uygulamamızda “yak” dediğimizde led yanmakta, “söndür” dediğimizde led sönmektedir.

Tasarladığımız Android uygulama ses çözümleyerek,  sesi yazıya dökmektedir. Eğer “yak” demişsek uygulamamız Arduinoya 1 sayısını göndermekte, “söndür demişsek 0 sayısını göndermektedir. Arduinomuz ise bluetooth modülden 1 sayısı geldiğinde ledi yakmakta, 0 sayısı geldiğinde ledi söndürmektedir.

Devre:

Devamı

20 Şubat 2016 Cumartesi

Raspberry Pi Görsel Masaüstüne Erişim

Raspberry Pi’a SSH ile Bağlanma

15 Şubat 2016 Pazartesi

Raspberry Pi’a İşletim Sisteminin Kurulması

2/15/2016 0
Raspberry Pi kartlarında dahili veri depolama alanı bulunmamaktadır. Bu yüzden Raspberry Pi için işletim sistemi, önce bir microSD karta kurulmalı ve bu microSD kart üzerinden çalıştırılmalıdır.
Devamı

13 Şubat 2016 Cumartesi

Raspberry Pi 2 Model B

2/13/2016 0
Raspberri Pi 2 Model B kartı, Broadcom BCM2836 ARMv7 Quad Core 900MHz işlemciye sahiptir. Kartta 1GB LPDDR2 RAM ve VideoCore IV GPU bulunmaktadır. Ayrıca kamera modülü ve dokunmatik ekran modülü için bağlantı soketleri mevcuttur.
Devamı

RASPBERRY Pİ

2/13/2016 0
Raspberry Pi Birleşik Krallık'ta Raspberry Pi Vakfı tarafından okullarda bilgisayar bilimini öğretmek amacıyla geliştirilmiş kredi kartı büyüklüğünde tek kartlı bir bilgisayardır[1].
Devamı

Arduino Ethernet Shield

2/13/2016 1
Bu shield, Arduino kartlarına Ethernet desteği sağlamaktadır. Bu sayede Arduino kartımız RJ45 kablosu ile ağa bağlanabilmekte ve internete açılabilmektedir.
Devamı

Post Top Ad