Ağu 22

Oyun-Bölüm 9

KAOS

Baya uzunca bir bölüm oldu, bölsem iki bölüm olabilirdi ama kaptırmış gidiyorken bölmek istemedim. Bu bölümü yazarken baya keyif aldığımı itiraf etmeliyim, hem aksiyon hem de çok önemli gelişmeleri içeren önemli bir bölüm. Hatta başa dönüp gözden geçirmeyi bile düşündüm ki bugüne kadar böyle bir şey yapmadım hikayelerimde. Sonra üşenip vazgeçtim 🙂

Bölüme gelecek olursak, baya dolu bir bölüm. Kaos, Esat’ın şovu ve mükemmel bir son sizleri bekliyor. En çok sevdiğim kısım bölüm sonu oldu diyebilirim, Salih ve Nisa ile ilgili şok edici gelişmeler karşılayacak sizi. İşte karşınızda Oyun – Bölüm 9 – KAOS

Ağu 19

Windows Java Modbus

Java’da Modbus için uygulama geliştirmek istiyorsanız (Serial-RTU modellerinde) temelinde bunun aslında bir seri iletişim üstüne kurulmuş bir protokol olduğunu bilmeniz gerekiyor öncelikle. Sonrasında sonuçta bu bir seri iletişim uygulaması olduğu için, kullanacağınız kütüphaneler sizden seri iletişim için gerekli kütüphanelere bağlı olduklarını söyleyeceklerdir.

Direkt konuya girdim devam edeyim. Javada modbus için kütüphane aradığımda karşıma jamod diye bir kütüphane çıktı. Windowsta Modbus TCP de denedim sıkıntısız çalışmakta. Ama gel gelelim Modbus RTU,ASCII ye. Bu iki protokol seri iletişim üstüne kurulmuş protokoller, yani bunların çalışıyor olması için sıkıntısız bir seri iletişim yapabiliyor olmanız lazım, yani COM portlarına erişimde sıkıntı çekmemeniz lazım. Ama işte tam bu noktada sıkıntı doğuyor. Javadaki seri iletişim kütüphanesi javax.comm windowstaki desteğini yıllar önce çekmiş ki jamod kütüphanesi de bu kütüphaneye bağımlı çalışıyor. Bu girişin kalanını oku »

Ağu 06

Python k-Nearest Neighbors

Merhabalar,

Bugün yeni bir Machine Learning algoritması ile karşınızdayım. Bugünkü konumuz k-Nearest Neighbors algoritması olacak, kısaca KNN diyelim. Kelime manası olarak k yakın komşu denilebilir.

KNN algoritması supervised learning algoritmalarındandır. Aslında en kolay ve basitlerinden biri denilebilir. Kısaca özetlemek gerekirse, k adet komşudan en çok hangi sınıfa giriyorsa tahmin de odur. Bu kadar basit, ne böyle karışık matematiksel denklemler, ne türevler ne integraller, direkt düz mantık; en çok neye yakınsa odur.

Wikipedia dan örnek bir resim üzerinden kısaca anlatmaya çalışayım :

knn_wiki

Şimdi içteki yeşil nokta test edeceğimiz, sınıfını tahmin etmeye çalışacağımız örnek. Kırmızı üçgenler ve mavi kareler, önceden hazır olan train set teki elemanlar. Biz bu yeşil dairenin, bu ikisinden hangisine ait olduğunu bulmaya çalışacağın KNN ile. İlk başta k yı 3 seçersek, en yakındaki 3 elemanın 2 si üçgen olduğu için üçgendir sonucuna erişiriz. k yı 5 seçersek en yakındaki 5 elemanın 3 ü kare olduğu için karedir sonucunu çıkartırız. Olay bu kadar basit. Bu girişin kalanını oku »

Ağu 05

Optimized Gradient Descent

Merhabalar, dünkü yazımda kullandığımız gradient descent in optimize edilmiş versiyonlarının olduğunu söylemiştim sanırsam. Evet bugünkü yazıda o yollardan birini kullanıp çok daha hızlı bir şekilde gradient descent uygulamayı göreceğiz.

Öncelikle bunun bize kazandıracakları :

  1. Binlerce iterasyon yapmadan,belki de 100 iterasyonda converge olacak ki bu hem CPU dan hem de zamandan kazaç demektir
  2. Alpha seçme derdi ortadan kalkıyor. Optimize edilmiş gradient descent algoritmaları learning rate i kendi içinde otomatik ayarlıyor, muhtemelen her adımda daha uygun bir tane belirliyor.

Bu ikisi bize kazandıracağı en büyük faydalar olarak özetlenebilir. Şimdi gelelim bunu nasıl kullanacağımıza, ben örnek olması için bundan önceki iki regresyonu ele aldım : Logistic Regression ve Polynomial Regression.İki kodu birleştirip birkaç değişiklik yaptım bu sefer.

Kodlara baktıysanız o ikisinde de gradientDescent ya da benzer isimli bir fonksiyon olması lazım. Bu fonksiyonun içinde hatırlarsanız, bir for döngüsünde iterasyon sayısınca dönerek cost düşürülüyor ve converge olmaya çalışılıyordu. Bu yazıda kullanacağımız method Scipy kütüphanesinde implemente edilmiş olan; Conjugate Gradient function minimizer. Bunun bizim için yapacağı iş, yukarda for döngüsünde adım adım yaptığımız işlemi,costu minimize etmeyi, alpha yı kullanmadan çok daha hızlı bir şekilde yapacak. Bunu kullanmak ise oldukça basit şöyle ki :

    options = {'full_output': True, 'maxiter': 1000}        
    theta_grad, cost, _, _, _ =  optimize.fmin_cg(lambda t: costLogs(X, y,t)[0], theta_init, **options)

Kısaca şöyle diyeyim : t’ye bağlı cost fonksiyonunun döndürdüğü değeri theta_init değerinden başlayıp conjugate gradient kullanarak optimize et, max 1000 iterasyonda. Gayet güzel oldu sanki 🙂 . Tam olarak yaptığı da bu. Yani bunu kullanabilmek için hipotezin cost fonksiyonunu yazmış olmanız lazım, bu kısım gradient descent ile ilgileniyor sadece Bu girişin kalanını oku »

Ağu 04

Python Logistic Regression

Merhabalar,

Bugünkü yazının konusu Logistic Regression ile ilgili olacak. Yine gradient descent kullanıp regression yapıp datayı ayıran doğruyu bulmaya çalışacağız ama bu kez çıktımız farklı olacak. Linear Regression da çıktı olarak gerçek değerler vardı, bunda ise sınıflar olacak, 0 ya da 1 gibi mesela. Kullanacağımız datanın nasıl hazırlandığına dair yazıya şuradan erişebilirsiniz :

http://yusuftas.com/python-data-hazirlama/

Şimdi gelelim Logistic Regression’a. Logistic regression da farklı olarak sınıflar bulunuyor dedik, bu sebeple hipotezimizin çıktı olarak 0 ya da 1 veren bir fonksiyon olması lazım. Bunu en güzel sağlayan örneklerden biri Sigmoid Fonksiyonu. Bu fonksiyon sayesinde çıktımız 0 ya da 1 oluyor. Tabi yine 1 tane polynomial ön hipotez ile Desicion Boundary‘i kullanmamız gerekiyor.

sigmoid func

Bu girişin kalanını oku »

Ağu 03

Oyun-Bölüm 8

KARŞILAŞMA

Bu zamana kadar hep bilinmezliklerle geçen bölümlerin ardından artık bir şeylerin çözülmeye başlayacağı bir bölümle karşınızdayım. Adından da anlayacağınız üzere bir karşılaşma olacak ama kimle, ya da kimlerle acaba ? Spoiler vermeyi hiç sevmem okuyunca görürsünüz artık neler olacağını. Gerçi okuyan var mı bilmiyorum ama kanaatimce güzel bir bölüm ve bölüm sonu sizleri bekliyor 🙂

Ağu 03

Python Polynomial Regression ve Normal Equation

Merhabalar,

Bugünkü yazı bir önceki yazının devamı ve tamamlayıcısı niteliğinde olacak. Bir önceki yazımda x^2 den elde edilmiş dataya linear regression uygulayıp, o datayı en iyi kapsayacak doğruya ulaşmaya çalışmıştık. E tabi sonuçta doğru ile ancak bir miktar gerçekci sonuç elde edebiliriz. Sonuçta data x^2 ye benzediği için daha hipotezden sonucumuzun tam doğru olmayacağı aşikar. Linear regression’ın sonuçlarına ve daha fazla teorik bilgiye önceki yazılardan ulaşabilirsiniz:

http://yusuftas.com/python-linear-regression-1/
http://yusuftas.com/python-linear-regression-2/

Şimdi gelelim bu yazının konusu Polynomial Regression’a. Buna linear regression ın multi feature lı hali de diyebiliriz aslında. Yani hipotezimizde x den başka değişkenler de kullanacağız ki datayı daha iyi temsil edebilecek denkleme ulaşabilelim.

polynomial_denklem

İlk denklem polinomların genel gösterimi iken ikincisi burada örnekle göstermeye çalışacağım denklem. Datamız x^2 olduğu için regress etmeye çalışacağımız hipotez max x^2 yi içermeli yoksa çok farklı ve garip sonuçlara ulaşırız. Bu girişin kalanını oku »

Ağu 02

Python Linear Regression-2

Merhabalar bir önceki yazı Linear Regression ve Gradient Descent a giriş olması sebebiyle teorik bir yazı idi. Gerekli fonksiyonlardan, işin ardındaki matematikten, türevden gradient ten bahsetmeye çalıştım, umarım düzgün ve doğru anlatabilmişimdir. Eğer teorik bir giriş ile başlamak isterseniz o yazıdan da başlayabilirsiniz:

[important] Teorik kısmı ile ilgili yazıya ulaşmak için : http://yusuftas.com/python-linear-regression-1/ [/important]

Bu yazıda ise orada anlattıklarımı python ile göstermeye çalışacağım. Linear regression temelinde dataya doğru uydurmaktan öte değil. O yüzden elimizde sayısal bir data olması lazım ki çalışabilelim. Bundan iki önceki yazımda data hazırlama ile ilgili bir şeyler yapmıştım. Oradaki data Logistic Regression ile uyumlu; o yüzden yeni bir data hazırlama scripti yazdım, yine x^2 e yakın random data oluşturuyor, bu kez sınıf yok. Sınıf olayı logistic regression da kullanılıyor, linear regression daki çıkış real valued :


def writeData(X,name, z = []):   
    if not z:
        m = X.shape[0]
        f = open(name, 'w')
        
        for i in range(m):
            x = X[i,0]
            y = X[i,1]
            f.write('%f,%f\n' % (x,y))  
        
        f.close()
    else:    
        m = X.shape[0]
        
        if X.shape[0] != z.shape[0] :
            print 'X and z  are incompatible!!!'
            sys.exit(1)
        
        print m,' elements will be written to file ',name
        
        f = open(name, 'w')
        
        for i in range(m):
            x = X[i]
            y = z[i]
            f.write('%f,%f,%d\n' % (x[0],x[1],y))
        
        f.close()    

#Function to be simulated
def func(x):
    return x**2        #x^2

def prepareNewData(count):
    X = [randrange(0,1000000) / 1000000.0 for i in range(count)]
    Y = []
    out = []
    
    for x in X:
        y = func(x)             #For different sets 
        
        randomness = randrange(0,10000) / 100000.0     # add a random number between 0-0.1
        sgn = randrange(0,2)                #0 or 1 add or substract 
        
        if sgn == 0 : randomness = -randomness
        
        y = y + randomness    #randomnness is between -0.1 - 0.1
        Y.append(y)
        out.append([x,y])
    
    plt.scatter(X,Y)
    plt.show()
    
    return out
    
if __name__ == '__main__':
    
    res = prepareNewData(100)
    res = np.array(res)
    
    writeData(res,name = 'yeni.txt')

    pass

linreg_xkare Bu girişin kalanını oku »

Ağu 02

Python Linear Regression-1

Merhabalar, bugünkü yazı linear regression ile ilgili olacak. Linear Regression machine learning teki en temel uygumalardan biridir. Elimizdeki data sete en çok uyacak doğruyu bulmak olarak da özetlenebilir. ‘Curve fitting’ olarak da nitelendirilebilir, sonuçta dataya en çok uyacak hypotezzz doğrusunu aramaktayız.

[important] Bu yazı Linear regression ve gradient descent ile ilgili teorik bir yazıdır. Uygulama için bir sonraki yazıya bakmanızı tavsiye ederim : http://yusuftas.com/python-linear-regression-2/ [/important]

Peki en çok uyan derken bunu nasıl nitelendireceğiz ? En çok uymaktan kasıt verilen noktalarla en az hatayı sağlayan denklem de denebilir. Bu noktada hatayı tanımlamamız lazım. Genel olarak datamız sayısal noktalardan oluştuğu için, en temel uzaklık hesabı olan ‘square difference error’ kullanılabilir.

cost_function Bu girişin kalanını oku »

Ağu 01

Python Data Hazırlama

Merhabalar, uzunca bir süre Machine Learning ve uygulamalarına yönelmeyi planlıyorum. Taze bir başlangıç olsun diye, yanında Python da öğreneyim, hatta tüm algoritmaları,testleri onunla yapayım diye düşündüm. Bu sebeple bu yazının konusu, hem python a giriş olması hem de machine learning de önemli bir yeri olmasından dolayı data hazırlama üzerine olacak.

Az biraz makine öğrenmesi üzerine bilginiz varsa, data set kavramını da duymuşsunuzdur. Bir algoritma vardır bunu eğiteceğiniz train set ve testini yapacağınız test set vardır. Farklı problemlere yönelik internette halkın kullanımına açılmış setler hali hazırda mevcuttur. Ama bunların nasıl sonuç vereceğini daha denemeden bilirsiniz genelde, o setleri kullanan yüzlerce insan olduğu için. Bu sebeple kendi eğitim setlerimi hazırlamaya karar verdim.

Bunu izleyen yazı Linear Regression ile ilgili olacak. Regression un en güzel testi nasıl bir sonuç olacağını matematiksel tahmin edebileceğiniz bir fonksiyonu kullanmakla olur. Bu sebeple x^2 fonksiyonunu kurban olarak seçtim. Bu yazıda yapmaya çalıştığım x^2 fonksiyonunun grafiğiyle ayrılabilecek bir data set hazırlamak, dosyaya yazdırmak ve grafiğini çizdirmek. İşin içine biraz da randomness ekledim ki her çalıştırdığımda farklı setler elde edebileyim. Bu girişin kalanını oku »

Eski yazılar «