Machine Learning Models | #1 Supervised

w1sd0m

Katılımcı Üye
28 Mar 2020
699
626
/802.1x/
q688b03.png








Merhaba dostlarım,bu makalemde sizlere "Makine öğrenmesi (ML)" alanında karşımıza çıkan ve oldukça popüler olan modelleri,algoritmaları anlatacağım.
Makalede "Makine öğrenmesi (ML)" hakkında detaylı bilgiler edinebileceksiniz, farklı algoritmalar ile karşılaşacaksınız, çeşitli formüller göreceksiniz.
Ayrıca yine makaledeki algoritmalara "
Python3" kullanarak örnekler vereceğim ve bu kodları inceleyeceğiz.
Foruma katkısı ve bu alanda çalışacak arkadaşlara faydalı olması dileğiyle diyerek başlamak istiyorum.

İyi okumalar.


|
|
v





Makine öğrenmesi (ML) nedir?


pny6b6z.png

İnsanlığın geleceğinin, robotların gelişimi ile doğru orantılı olduğunu söylemek sanırım yanlış olmayacaktır. Yakın gelecekte artık robotların, hayatımızın neredeyse her alanında bir hakimiyet kuracağı öngörülüyor. İşte bu robotlar ile tasfir edilen gelecek, yüksek oranda “Yapay Zeka (AI)”nın başarılı bir şekilde dağıtılmasına dayandırılır. Ancak, bu elektronik devrelerin, metallerin, kabloların düşünebilen bir makinelere dönüştürülmesi sanıldığı kadar kolay değildir. Güçlü bir yapaz zeka, ancak ve ancak anlama ve düşünme becerisini onlara kazandıracak olan “Makine Öğrenimi (ML)” ile yaratılabilir.

Çok teknik konuları içerisinde barındıran Makine öğrenimi maalesef kafa karıştırıcı olabiliyor. Daha iyi anlaşılması için farklı tanımlamalar yapacağım.


Peki, nedir bu Makine öğrenimi?

Machine Learning (Makine öğrenimi), sistemlerin açıkça programlanmadan deneyimler ile hem öğrenmesini hem de geliştirmesini sağlayan bir yapay zeka alanıdır. Verilere erişebilen ve yine bu verileri kendi öğrenimleri için kullanabilen programlar geliştirmeyi hedefler.

Bir başka tanım ile Makine öğrenimi, geliştirilen ancak açıkça programlanmamış uygulamaların sonuçları tahmin etmede daha sağlam/doğru veriler sunmasına fayda sağlayan bir tür yapay zekadır. Burada kullanılan algoritmalar, çıktı değerlerini tahmin edebilmek için geçmiş/eski verileri girdi olarak kullanır.


Makine öğrenimi kullanım alanlarından bazıları şunlardır;
Öneri motorları, kötü amaçlı yazılım tespit uygulamaları, iş süreci otomasyonları (BPA), dolandırıcılık tespit sistemleri, istenmeyen e-posta filtreleme ve tahmin sistemi üzerine kurulan bakım uygulamaları.


Makine öğrenimi (ML), günümüz teknolojileri arasında en heyecan ve umut verici teknolojilerden biridir. Sizede heyecan veriyor mu? Yada şöyle sorayım; Robotlar etkileyiciler değil mi?






Neden bu kadar önemli?

g9l89ok.png

Makine öğreniminin (ML) öneminden kısaca bahsedecek olursak;

Makine öğrenimi (ML), müşteri davranışlarındaki ve iş operasyon süreci modellerindeki eğilimler hakkında işletmlere fikirler verebildiği aynı zamanda yeni ürünler için de gelişim desteği sağladığı için oldukça önemlidir. YouTube, Facebook (ve diğer ‘Meta’ şirketleri), Uber, Google, Amazon gibi piyasanın lider şirketleri, bu teknolojiyi operasyonlarında merkezi bir konuma koyuyor.

Diğer taraftan Makine öğrenimi, insan zihninin kopyalayamayacağı bir hızda işlem çözebildiğinden de büyük öneme sahiptir. Ne kadar öğrenirse o kadar hızlanan programlar aslında insan eli ile yapılmış ancak insandan çok daha hızlı düşünebilen makinelere dönüşüyor.





Makine öğrenmesi nasıl çalışır?

l2l0o1w.png

Makine öğrenimi (ML), tıpkı insan beyni gibi varlıkları, alanları ve bunlar arasındaki bağlantıları anlamak ve anlamlandırmak için eğitim verilerine veya grafik girdilerine ihtiyaç duyar.
Diğer bir deyiş ile, geçmiş deneyimlerden ders çıkarır, öğrenir ve geliştirir. Elde edilen verileri keşfeder, kalıplarını tanımlar ve azami insan müdahalesine ihtiyaç duyar.

Makine öğrenimi (ML) iki ana teknik ile sağlanır. (Bazı kaynaklar üçüncü bir teknik daha ekler. Ben size ilerleyen makalelerde onuda anlatırım :))
Bunlar;
Supervised (Denetimli öğrenme) ve Unsupervised (Denetimsiz öğrenme)


Denetimli öğrenme (supevised);
Geçmiş bir ML dağıtımından veri çekmebilmemizi veya bir veri çıktısı üretebilmemizi sağlar. Bu öğrenim tekniği heyecan verici olabiliyor. Çünkü tıpkı bir insan beyni gibi öğrenir.
Denetimli öğrenmede, bilgisayara eğitim seti adı verilen bir etiketlenmiş veri noktaları koleksiyonu sunulur ve bundan bir sonraki adım çıkarımı yapılması beklenir.



Denetimsiz öğrenme (unsupervised);
Eldeki verilerde bilinmeyen modelleri bulmamıza yardım eder. Bu öğrenimde algoritma, yalnızca işlem yapılmamış örnek veriler ile bir yapıyı öğrenmeye çalışır. Kendi göbeğini kendi kesiyor :)


En yaygın iki metod söyleyecek olursak;
Kümeleme; belirli bir küme içindeki öğeleri birbirine benzer ancak diğer kümedekilerden farklı olacak şekilde gruplandırma yönetimidr.
Boyut azaltma; daha etkili yorumlama ve daha etkili model eğitimi için, benzer veya birbiri ile ilişkideki verileri gruplayarak değişken sayısını azaltma yöntemidir.



alez8pa.png


Biz bu makalemizde “Supervised” yani “Denetimli öğrenme” tekniklerini göreceğiz. Diğer teknik ise bir sonraki makalemde olacak. Takipte kalın.


|
|
v



p9a0vk7.png


Yukarıda bahsetmiştim ancak makalenin bu başlığından okumaya başlayan okuyucularımız için farklı bir tanım daha yapalım.


Denetimli öğrenme (supervised); Çıktı vermek için etiketlenmemiş veiler üzerinde bir algoritmanın eğitilmesine yönelik kullanılan bir Yapay zeka (AI) tekniğidir. Modeller, girdi ve çıktı verilerine bakarak bunlar arasındaki kalıpları ve ilişkileri öğrenene kadar eğitilir. Böylelikle öğrenen bir algoritmanın daha önce görülmemiş bir veri seti hakkında daha doğru tahminler yapabilmesi sağlanır.

Denetimli öğrenme, örneğin gazetede yazılan bir köşe yzısının gazetenin hangi sayfasında olması gerektiğini belirlemeye veya bir şirket için satış hacminin önümüzdeki yıl için ortalama tahminini yapmakta probleblemlerinde oldukça başarılıdır.

Bu öğrenmede amaç, bir soru kapsamında verileri anlamlandırabilmektir.



Artık Makine öğrenimi (ML) ve Denetimli öğrenme (Supervised) konularında bilgi sahibi olduğumuza göre hadi bu alanda kullanılan yaygın algoritmalara birlikte bakalım.




kxfcxnk.png

Doğrusal regresyon, temel ve yaygın olarak kullanılan bir tahmine dayalı analiz türüdür. Genel olarak iki fikir incelenir:

1- Bir dizi yordayıcı değişken, bir sonuç (bağımlı) değişkeni tahmin etmede iyi bir iş çıkarır mı?
2- Özellikle hangi değişkenler sonuç değişkeninin önemli yordayıcılarıdır ve bunlar sonuç değişkenini ne şekilde etkiler?

Bu regresyon tahminleri, bir bağımlı değişken ile bir veya daha fazla bağımsız değişken arasındaki ilişkiyi açıklamak için kullanılır. Bir bağımlı ve bir bağımsız değişkenli regresyon denkleminin en basit şekli,
y = b0 + b1 *x1 formülü ile tanımlanır. Burada y = tahmini bağımlı değişken puanı, b0 = sabit, b1 = regresyon katsayısı ve x1 = bağımsız değişkendir.

Değişkenleri adlandırma; Bir regresyonun bağımlı değişkeni için birçok isim kullanılır. Sonuç değişkeni, kriter değişkeni, içsel değişken veya gerileme olarak adlandırılabilir. Bağımsız değişkenler dışsal değişkenler, öngörücü değişkenler veya regresörler olarak adlandırılabilir.

Regresyon analizinin üç ana kullanımından bahsedecek olursak;

Tahmin edicilerin gücünü belirlemek, Bir etkiyi tahmin etmek ve Trend tahmini olarak ayırabiliriz.



Doğrusal Regresyon Türleri

Basit doğrusal regresyon;1 bağımlı değişken (aralık veya oran), 1 bağımsız değişken (aralık veya oran veya ikili)
Çoklu doğrusal gerileme;1 bağımlı değişken (aralık veya oran), 2+ bağımsız değişken (aralık veya oran veya ikili)
Lojistik regresyon;1 bağımlı değişken (ikili), 2+ bağımsız değişken/değişkenler (aralık veya oran veya ikili)
Sıralı regresyon;1 bağımlı değişken (sıralı), 1+ bağımsız değişken/değişkenler (nominal veya ikili)
Çok terimli regresyon;1 bağımlı değişken (nominal), 1+ bağımsız değişken/değişkenler (aralık veya oran veya ikili)
Diskriminant analizi;1 bağımlı değişken (nominal), 1+ bağımsız değişken/değişkenler (aralık veya oran)


Formül;

7f2nem6.png
ovktozh.png


Pyhon3 örneği;

Python:
# Gerekli kütüphanelerin içeri alınması
import numpy as np
import matplotlib.pyplot as plt

def estimating(x, y):
    # gözlem sayısı ayarı
    n = np.size(x)

    # x&y vektörlerinin ortalaması
    m_x = np.mean(x)
    m_y = np.mean(y)

    # x'in çapraz-sapma hesaplanması
    SS_xy = np.sum(y*x) - n*m_y*m_x
    SS_xx = np.sum(x*x) - n*m_x*m_x

    # regresyon katsayılarının hesaplanması
    b_1 = SS_xy / SS_xx
    b_0 = m_y - b_1*m_x

    return (b_0, b_1)

def plot_regression_line(x, y, b):
    # işlem grafiğini çizmek
    plt.scatter(x, y, color = "m",
            marker = "o", s = 30)

    # tahmin
    y_pred = b[0] + b[1]*x

    # regresyon çizgisi
    plt.plot(x, y_pred, color = "g")

    # etiket
    plt.xlabel('x')
    plt.ylabel('y')

    # çizimi göstermek
    plt.show()

def main():
    # gözlem&veri
    x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    y = np.array([1, 3, 2, 5, 7, 8, 8, 9, 10, 12])

    # tahmin katsayısı
    b = estimating(x, y)
    print("Estimated coefficients:\nb_0 = {} \
        \nb_1 = {}".format(b[0], b[1]))

    # regresyon doğrusu
    plot_regression_line(x, y, b)

if __name__ == "__main__":
    main()

Çıktı;

8p9g2wt.png






qtzcz38.png

Lojistik regresyon, bağımlı değişken ikili olduğunda yapılacak uygun regresyon analizidir. Tüm regresyon analizleri gibi, lojistik regresyon da tahmine dayalı bir analizdir.
Lojistik regresyon, verileri tanımlamak ve bir bağımlı ikili değişken ile bir veya daha fazla nominal, sıra, aralık veya oran düzeyinde bağımsız değişken arasındaki ilişkiyi açıklamak için kullanılır.

Formül;


2zj3jb4.png
5wcbfl0.jpg


Python3 örneği;

Python:
# Gerekli kütüphanelerin içeri alıması
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

x, y = load_digits(return_X_y=True)
x_train, x_test, y_train, y_test =\
    train_test_split(x, y, test_size=0.2, random_state=0)

scaler = StandardScaler()
x_train = scaler.fit_transform(x_train)

model = LogisticRegression(solver='liblinear', C=0.05, multi_class='ovr',random_state=0)
model.fit(x_train, y_train)

# regresyon ayarı
LogisticRegression(C=0.05, class_weight=None, dual=False, fit_intercept=True,
                   intercept_scaling=1, l1_ratio=None, max_iter=100,
                   multi_class='ovr', n_jobs=None, penalty='l2', random_state=0,
                   solver='liblinear', tol=0.0001, verbose=0, warm_start=False)

x_test = scaler.transform(x_test)
y_pred = model.predict(x_test)

# çizim ayarları
cm = confusion_matrix(y_test, y_pred)
fig, ax = plt.subplots(figsize=(8, 8))
ax.imshow(cm)
ax.grid(False)
ax.set_xlabel('Predicted outputs', fontsize=12, color='black')
ax.set_ylabel('Actual outputs', fontsize=12, color='black')
ax.xaxis.set(ticks=range(10))
ax.yaxis.set(ticks=range(10))
ax.set_ylim(9.5, -0.5)
for i in range(10):
    for j in range(10):
        ax.text(j, i, cm[i, j], ha='center', va='center', color='white')
plt.show()

Çıktı;

604geg4.png






rlrqwdz.png

Bir sinir ağı, insan beyninin çalışma şeklini taklit eden bir süreç gerçekleştiri. Belirli bir dizi verideki temel ilişkileri tanımaya çalışan algoritmaları içerir. Bu anlamda, sinir ağları, doğada organik veya yapay olan nöron sistemlerine atıfta bulunur.

Sinir ağları değişen girdilere uyum sağlayabilir. Bu sayede ağ, çıktı kriterlerini yeniden tasarlamaya gerek kalmadan mümkün olan en iyi sonucu üretir. Kökleri yapay zekaya dayanan sinir ağları kavramı, ticaret sistemlerinin geliştirilmesi ile hızla popülerlik kazanmıştır ve kazanmaya devam etmektedir.

Formül;


r2ml9iw.png
mf4hsjo.png


Python3 örneği;

Python:
# Gerekli kütüphanenin içeri alınması
import numpy as np

class NeuralNetwork():
    def __init__(self):
        # rastgele sayı üretimi
        np.random.seed(1)
        
        # ağırlıkları -1'den 1'e kadar değerlere ve ortalama 0'a sahip 3'e 1 matris oluşturma
        self.synaptic_weights = 2 * np.random.random((3, 1)) - 1

    def sigmoid(self, x):
        return 1 / (1 + np.exp(-x))

    def sigmoid_derivative(self, x):
        # türev hesabı
        return x * (1 - x)

    def train(self, training_inputs, training_outputs, training_iterations):
        
        # ağırlıkları sürekli olarak ayarlarken doğru tahminler yapmak için modeli eğitmek
        for iteration in range(training_iterations):
            output = self.think(training_inputs)

            # hata oranı hesaplama
            error = training_outputs - output
            
            # ağırlık ayarlama
            adjustments = np.dot(training_inputs.T, error * self.sigmoid_derivative(output))
            self.synaptic_weights += adjustments

    def think(self, inputs):
        # değerleri float'a çevirme
        inputs = inputs.astype(float)
        output = self.sigmoid(np.dot(inputs, self.synaptic_weights))
        return output


if __name__ == "__main__":
    # Nöron sınıfını çağırmak
    neural_network = NeuralNetwork()

    print("Beginning Randomly Generated Weights: ")
    print(neural_network.synaptic_weights)

    # 4 örnekten oluşan eğitim verileri
    training_inputs = np.array([[0,0,1],
                                [1,1,1],
                                [1,0,1],
                                [0,1,1]])

    training_outputs = np.array([[0,1,1,0]]).T

    # eğitim
    neural_network.train(training_inputs, training_outputs, 15000)

    print("Ending Weights After Training: ")
    print(neural_network.synaptic_weights)

    user_input_one = str(input("User Input 1: "))
    user_input_two = str(input("User Input 2: "))
    user_input_three = str(input("User Input 3: "))
    
    print("Considering new situation: ", user_input_one, user_input_two, user_input_three)
    print("New Output data: ")
    print(neural_network.think(np.array([user_input_one, user_input_two, user_input_three])))
    print("Congr!")

Çıktı;

nmzwvqg.png







2nvgi1h.png

Karar Ağaçları (Decision Trees); parametrik olmayan, regresyon ve sınıflandırma işlemleri için kullanılmakta olan bir “Denetimli öğrenme” yöntemidir. Bu yöntem, mevcut sorudan önceki soruların nasıl cevaplandığına bağlı olarak işlemi kategorize eder veya tahminde bulunur.

Karar Ağacı yöntemi, kategorize etme ve tahmin etme için kullanılan hem çok güçlü hem de en popüler yöntemlerden biridir. Ağaç; her düğümünün bir testi, her dalın testin bir sonucunu, her yaprağın (
terminal düğümü) bir sınıfı temsil ettiği bir akış şematiğidir diyebiliriz.

Bu yöntemin amacı ise, verilerden çıkarılacak basit karar kurallarını öğrenmek ve hedefteki bir değişkenin değerini tahmin edebilmektir. Yöntem, istenilen kategorizasyon işlemi için bir dizi veri üzerinde önce eğitilir sonra test edilir.

Karar Ağaçları’nın verdiği cevap veya kararlar her zaman için net olmayabilir. Bu durumlarda veri bilimci için düzgün kararlar verebilmesi adına bir takım seçenekler sunabilir. Bu yöntem bir nevi insan çıkarımlarını taklit ettiğinden dolayı, veri bilimcinin sonuçlar için yorum yapabilmesi kolay olur.



Karar analizinde ise bir karar ağacı, alternatifi olan rakiplerin beklenen faydasının veya değerlerinin hesaplandığı hem görsel hem analitik olan bir
karar-destek aracı pozisyonunda kullanılır.
Bir karar ağacında 3 tür düğüm bulunur:


Decition Node (Karar düğüm) -> Genelde “Kare” şekli ile temsil gösterilir,
Chance Node (Şans düğüm) -> Genelde “Daire” şekli ile temsil gösterilir,
End Node (Uç düğüm) -> Genelde “Üçgen” şekli ile temsil gösterilir.


Yöneylem araştırmaları ve operasyon yönetimi gibi durumlarda yaygın olarak kullanılan Karar Ağaçları, koşullu olasılıkların hesaplanmasında oldukça açıklayıcı olabilmektedir. Ayrıca Karar Ağaçları işletme, sağlık, ekonomi, askeri, araştırma, planlama gibi birçok alanda başvurulan bir mekanizmadır.


Bir Karar Analiz adımları şu maddelerden oluşur:

Karar verme işlemi için sorun alanının tanımlanması.
Olası tüm çözümleri ve bunların sonuçlarını içeren bir Karar Ağacı çizimi.
Değişkenlerin, ilgili olasılık değerleri ile girilmesi.
Olası her sonuç için getirilerin belirlenmesi ve tahsis edilmesi.

Çözümlerden hangisinin en çok değer sağlaması hususunun beklendiğini belirlemek adına tüm şans düğümleri için beklenen parasal değerin hesaplanması.



Karar ağaçlarına özel makale yazdığım için formül, kod ve çıktıyı burada göstermeyeceğim. Aşağıdan ilgili makaleme gidebilirsiniz :)



--------------------------------------------------------------------------------- Karar ağaçları ---------------------------------------------------------------------------------






o0bq0yq.png

Rastgele orman (random forest), denetimli öğrenme tekniğine ait popüler bir makine öğrenme algoritmasıdır. Makine öğrenimide hem sınıflandırma hem de regresyon problemleri için kullanılır. Karmaşık bir problemi çözmek ve modelin performansını iyileştirmek için birden fazla sınıflandırıcıyı birleştirme süreci olan topluluk öğrenme kavramına dayanmaktadır.

Adından da anlaşılacağı gibi
Rastgele orman; verilen veri kümesinin çeşitli alt kümelerinde bir dizi karar ağacı içeren ve bu veri kümesinin tahmin doğruluğunu iyileştirmek için ortalamayı alan bir sınıflandırıcıdır. Rastgele orman, tek bir karar ağacına güvenmek yerine, her ağaçtan (tahminlerin çoğunluk oylarına dayalı olarak) tahmini alır ve nihai çıktıyı tahmin eder.

Ormandaki daha fazla ağaç sayısı, daha yüksek doğruluk sağlar ve fazla uyum sorununu önler.

Formül;


azqsbw3.png
d4oxbiz.png


Python3 örneği;

Python:
# Gerekli kütüphanelerin içeri alınması
from numpy import mean
from numpy import std
from numpy import arange
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from sklearn.ensemble import RandomForestClassifier
from matplotlib import pyplot

# dataset ayarı
def get_dataset():
    X, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=3)
    return X, y

# model listesi ayarı
def get_models():
    models = dict()
    # %10'luk artışlarla %10'dan %100'e kadar olan oranları eklemek
    for i in arange(0.1, 1.1, 0.1):
        key = '%.1f' % i
        # 100% değer almamak için ayar
        if i == 1.0:
            i = None
        models[key] = RandomForestClassifier(max_samples=i)
    return models

# çapraz doğrulama kullanarak belirli bir modeli değerlendirmek
def evaluate_model(model, X, y):
    # değerlendirme prosedürü
    cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
    # modeli değerlendirme&sonuçlar
    scores = cross_val_score(model, X, y, scoring='accuracy', cv=cv, n_jobs=-1)
    return scores

# dataset tanımı
X, y = get_dataset()
# model tanımı
models = get_models()
# model değerlendirmesi&sonuçlar
results, names = list(), list()
for name, model in models.items():
    # model tanımı
    scores = evaluate_model(model, X, y)
    # sonuçların sergilenmesi
    results.append(scores)
    names.append(name)
    # yol boyunca performansı özetlemek
    print('>%s %.3f (%.3f)' % (name, mean(scores), std(scores)))
# karşılaştırma için çizim modeli
pyplot.boxplot(results, labels=names, showmeans=True)
pyplot.show()

Çıktı;

n0e65p9.png







gx6j616.png

Destek Vektör Makinesi (SVM), hem sınıflandırma hem de regresyon zorlukları için kullanılabilen denetimli bir makine öğrenme algoritmasıdır.
Ancak daha çok sınıflandırma problemlerinde kullanılmaktadır.
SVM algoritmasında, her bir veri öğesini, her özelliğin değeri belirli bir koordinatın değeri olacak şekilde n boyutlu uzayda (n,sahip olduğunumuz bir dizi özelliktir) bir nokta olarak çizilir.
Ardından, iki sınıfı çok iyi ayıran hiper düzlemi bularak sınıflandırma yapılır.

Formül;


h50yyip.png
16kde5l.png


Python3 örneği;

Python:
# Gerekli kütüphanelerin içeri alınması
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import os
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import confusion_matrix
from matplotlib.colors import ListedColormap

os.chdir('.')
dataset = pd.read_csv('ornek_data.csv')

X = dataset.iloc[:, [2,3]].values
y = dataset.iloc[:, 4].values

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)

sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.transform(X_test)

classifier = SVC(kernel='linear', random_state = 0)
classifier.fit(X_train, y_train)

y_pred = classifier.predict(X_test)

cm = confusion_matrix(y_test, y_pred)
print(cm)

X_set, y_set = X_train, y_train
X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),
         np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))
plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),
             alpha = 0.75, cmap = ListedColormap(('blue', 'green')))
plt.xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max())
for i, j in enumerate(np.unique(y_set)):
     plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],
                 c = ListedColormap(('yellow', 'green'))(i), label = j)
plt.title('SVM')
plt.xlabel('Age')
plt.ylabel('Salary')
plt.legend()
plt.show()

Çıktı;

i9alu8z.png








5hmnxoc.png

Tahminciler arasında bağımsızlık varsayımı ile Bayes Teoremine dayalı bir sınıflandırma tekniğidir. Basit bir ifadeyle, bir Naive Bayes sınıflandırıcısı, bir sınıftaki belirli bir özelliğin varlığının başka herhangi bir özelliğin varlığıyla ilgisi olmadığını varsayar.

Örneğin, kırmızı, yuvarlak ve çapı yaklaşık 3 inç olan bir meyve elma olarak kabul edilebilir. Bu özellikler birbirine veya diğer özelliklerin varlığına bağlı olsa bile, tüm bu özellikler bağımsız olarak bu meyvenin bir elma olma olasılığına katkıda bulunur ve bu nedenle '
Naive' olarak bilinir.

Naive Bayes modelinin oluşturulması kolaydır ve özellikle çok büyük veri kümeleri için kullanışlıdır. Sadeliğin yanı sıra, Naive Bayes'in son derece karmaşık sınıflandırma yöntemlerinden bile daha iyi performans gösterdiği bilinmektedir.

Formül;


lzxchgr.jpg
a9txoa2.png


Python3 örneği;

Python:
# Gerekli kütüphanelerin içer alınması
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score

# Data setini ayarlama
data = load_breast_cancer()
label_names = data['target_names']
labels = data['target']
feature_names = data['feature_names']
features = data['data']

#print(features[0])
#print(feature_names[0])

# Data'yı ayırma
train, test, train_labels, test_labels = train_test_split(features,labels,test_size = 0.40, random_state = 42)

gauss = GaussianNB()
model = gauss.fit(train, train_labels)
predict = gauss.predict(test)

#print(predict)
print(accuracy_score(test_labels,predict))

Çıktı;

hykwzqb.png




|
|
v



NOT: Denetimli öğrenme algoritması seçerken dikkat edilmesi gereken birkaç husus var. Birincisi, yeterince esnek olmakla çok esnek olmak arasında ince bir çizgi olduğundan, algoritma içinde var olan önyargı ve varyanstır. Bir diğeri, sistemin öğrenmeye çalıştığı modelin veya işlevin karmaşıklığıdır. Belirtildiği gibi, bir algoritma seçmeden önce verilerin heterojenliği, doğruluğu, fazlalığı ve doğrusallığı da analiz edilmelidir.


|
|
v



Avantaj & Dezavantaj



Denetimli öğrenmenin
avantajları şunlardır:

Makine Öğrenimi'nde denetimli öğrenme, veri toplamanıza veya önceki deneyimden veri çıktısı üretmenize olanak tanır.
Denetimli makine öğrenimi, çeşitli gerçek dünya hesaplama problemlerini çözmenize yardımcı olur.
Deneyim yardımıyla performans kriterlerini optimize etmeye yardımcı olur.





Denetimli öğrenmenin
dezavantajları şunlardır:

Bir sınıfta sahip olmak istediğiniz örnekleri içermeyen eğitim setiniz varsa, karar sınırı fazla eğitilmiş olabilir.
Sınıflandırıcıyı eğitirken her sınıftan çok sayıda iyi örnek seçmeniz gerekir.
Denetimli öğrenme için eğitim, çok fazla hesaplama süresi gerektirir.
Büyük verileri sınıflandırmak zor olabilir.



^
|
|


jx3vvgm.png


|
|
v



Değerli dostlarım, güzel kardeşlerim;
Bu makalemde kısaca "Makine öğrenmesi modelleri" konusuna değindim.
Ardından "
En popüler algoritmalar" konusunda örnekler yaptık.
Kaynak niteliğinde bu forumda kalması temennisi ile diyerek sözlerimi bitiriyorum.

Sağlıcakla kalın.






eyruvyp.png
 

Helmsys

Yazılım Ekibi Kıdemli
16 Mar 2022
1,481
1,640
Yapay zeka bambaşka bir evren. Tek başına öğrenilmesi en zor konudur diye düşünüyorum. Üniversite ve ingilizce şart. Zira kalkülüs gibi koskoca bir bilimden fırlayıp yapay zeka ile uğraşmak insanı bi tık aşıyor :) (bi tık değilde...)

Çok güzel anlatım olmuş formüllere uydurulan kod ve sonuçları güzel bir anlatım sergilemişsiniz.
 

icehead

Uzman üye
19 Şub 2022
1,137
833
Yapay zeka bambaşka bir evren. Tek başına öğrenilmesi en zor konudur diye düşünüyorum. Üniversite ve ingilizce şart. Zira kalkülüs gibi koskoca bir bilimden fırlayıp yapay zeka ile uğraşmak insanı bi tık aşıyor :)(bi tık değilde...)

Çok güzel anlatım olmuş formüllere uydurulan kod ve sonuçları güzel bir anlatım sergilemişsiniz.
Yapay zeka lisans üstü konudur bizim bölüm başkanı ilgileniyor bu alan ile bir ara sormuştu sende gelmek ister misin dedim aman hocam zaten bin tane derdim var birde bana bunu yapmayın. :cautious:
 

w1sd0m

Katılımcı Üye
28 Mar 2020
699
626
/802.1x/
Eline Koluna sağlık

Yapay zeka bambaşka bir evren. Tek başına öğrenilmesi en zor konudur diye düşünüyorum. Üniversite ve ingilizce şart. Zira kalkülüs gibi koskoca bir bilimden fırlayıp yapay zeka ile uğraşmak insanı bi tık aşıyor :)(bi tık değilde...)

Çok güzel anlatım olmuş formüllere uydurulan kod ve sonuçları güzel bir anlatım sergilemişsiniz.

Elinize Sağlık.

Eline emeğine sağlık kardeşim keyifli konu :)

Eline emeğine sağlık faydalı bir konu olmuş 👍

Eline emeğine sağlık faydalı bir konu

Yapay zeka lisans üstü konudur bizim bölüm başkanı ilgileniyor bu alan ile bir ara sormuştu sende gelmek ister misin dedim aman hocam zaten bin tane derdim var birde bana bunu yapmayın. :cautious:

Ellerine sağlık süper birkonu olmuş

Var olun <3
 

w1sd0m

Katılımcı Üye
28 Mar 2020
699
626
/802.1x/
Yapay zeka bambaşka bir evren. Tek başına öğrenilmesi en zor konudur diye düşünüyorum. Üniversite ve ingilizce şart. Zira kalkülüs gibi koskoca bir bilimden fırlayıp yapay zeka ile uğraşmak insanı bi tık aşıyor :)(bi tık değilde...)

Çok güzel anlatım olmuş formüllere uydurulan kod ve sonuçları güzel bir anlatım sergilemişsiniz.
Makalede ingilizce terimlere daha çok yer vermek istiyorum lakin okuyucularımızın ingilizce seviyelerini düşündüğümde maalesef fazla ileri gidemiyorum.
Tek başına öğrenme meselesine de katılıyorum bu arada :)


1*KBobA-DaVtQ8Px6P_-tNqQ.jpeg
 

JohnWick51

Uzman üye
20 Mar 2022
1,865
770
28
q688b03.png








Merhaba dostlarım,bu makalemde sizlere "Makine öğrenmesi (ML)" alanında karşımıza çıkan ve oldukça popüler olan modelleri,algoritmaları anlatacağım.
Makalede "Makine öğrenmesi (ML)" hakkında detaylı bilgiler edinebileceksiniz, farklı algoritmalar ile karşılaşacaksınız, çeşitli formüller göreceksiniz.
Ayrıca yine makaledeki algoritmalara "
Python3" kullanarak örnekler vereceğim ve bu kodları inceleyeceğiz.
Foruma katkısı ve bu alanda çalışacak arkadaşlara faydalı olması dileğiyle diyerek başlamak istiyorum.

İyi okumalar.


|
|
v





Makine öğrenmesi (ML) nedir?


pny6b6z.png

İnsanlığın geleceğinin, robotların gelişimi ile doğru orantılı olduğunu söylemek sanırım yanlış olmayacaktır. Yakın gelecekte artık robotların, hayatımızın neredeyse her alanında bir hakimiyet kuracağı öngörülüyor. İşte bu robotlar ile tasfir edilen gelecek, yüksek oranda “Yapay Zeka (AI)”nın başarılı bir şekilde dağıtılmasına dayandırılır. Ancak, bu elektronik devrelerin, metallerin, kabloların düşünebilen bir makinelere dönüştürülmesi sanıldığı kadar kolay değildir. Güçlü bir yapaz zeka, ancak ve ancak anlama ve düşünme becerisini onlara kazandıracak olan “Makine Öğrenimi (ML)” ile yaratılabilir.

Çok teknik konuları içerisinde barındıran Makine öğrenimi maalesef kafa karıştırıcı olabiliyor. Daha iyi anlaşılması için farklı tanımlamalar yapacağım.


Peki, nedir bu Makine öğrenimi?

Machine Learning (Makine öğrenimi), sistemlerin açıkça programlanmadan deneyimler ile hem öğrenmesini hem de geliştirmesini sağlayan bir yapay zeka alanıdır. Verilere erişebilen ve yine bu verileri kendi öğrenimleri için kullanabilen programlar geliştirmeyi hedefler.

Bir başka tanım ile Makine öğrenimi, geliştirilen ancak açıkça programlanmamış uygulamaların sonuçları tahmin etmede daha sağlam/doğru veriler sunmasına fayda sağlayan bir tür yapay zekadır. Burada kullanılan algoritmalar, çıktı değerlerini tahmin edebilmek için geçmiş/eski verileri girdi olarak kullanır.



Makine öğrenimi kullanım alanlarından bazıları şunlardır;
Öneri motorları, kötü amaçlı yazılım tespit uygulamaları, iş süreci otomasyonları (BPA), dolandırıcılık tespit sistemleri, istenmeyen e-posta filtreleme ve tahmin sistemi üzerine kurulan bakım uygulamaları.



Makine öğrenimi (ML), günümüz teknolojileri arasında en heyecan ve umut verici teknolojilerden biridir. Sizede heyecan veriyor mu? Yada şöyle sorayım; Robotlar etkileyiciler değil mi?






Neden bu kadar önemli?

g9l89ok.png

Makine öğreniminin (ML) öneminden kısaca bahsedecek olursak;

Makine öğrenimi (ML), müşteri davranışlarındaki ve iş operasyon süreci modellerindeki eğilimler hakkında işletmlere fikirler verebildiği aynı zamanda yeni ürünler için de gelişim desteği sağladığı için oldukça önemlidir. YouTube, Facebook (ve diğer ‘Meta’ şirketleri), Uber, Google, Amazon gibi piyasanın lider şirketleri, bu teknolojiyi operasyonlarında merkezi bir konuma koyuyor.

Diğer taraftan Makine öğrenimi, insan zihninin kopyalayamayacağı bir hızda işlem çözebildiğinden de büyük öneme sahiptir. Ne kadar öğrenirse o kadar hızlanan programlar aslında insan eli ile yapılmış ancak insandan çok daha hızlı düşünebilen makinelere dönüşüyor.





Makine öğrenmesi nasıl çalışır?

l2l0o1w.png

Makine öğrenimi (ML), tıpkı insan beyni gibi varlıkları, alanları ve bunlar arasındaki bağlantıları anlamak ve anlamlandırmak için eğitim verilerine veya grafik girdilerine ihtiyaç duyar.
Diğer bir deyiş ile, geçmiş deneyimlerden ders çıkarır, öğrenir ve geliştirir. Elde edilen verileri keşfeder, kalıplarını tanımlar ve azami insan müdahalesine ihtiyaç duyar.

Makine öğrenimi (ML) iki ana teknik ile sağlanır. (Bazı kaynaklar üçüncü bir teknik daha ekler. Ben size ilerleyen makalelerde onuda anlatırım :))
Bunlar;
Supervised (Denetimli öğrenme) ve Unsupervised (Denetimsiz öğrenme)


Denetimli öğrenme (supevised);
Geçmiş bir ML dağıtımından veri çekmebilmemizi veya bir veri çıktısı üretebilmemizi sağlar. Bu öğrenim tekniği heyecan verici olabiliyor. Çünkü tıpkı bir insan beyni gibi öğrenir.
Denetimli öğrenmede, bilgisayara eğitim seti adı verilen bir etiketlenmiş veri noktaları koleksiyonu sunulur ve bundan bir sonraki adım çıkarımı yapılması beklenir.



Denetimsiz öğrenme (unsupervised);
Eldeki verilerde bilinmeyen modelleri bulmamıza yardım eder. Bu öğrenimde algoritma, yalnızca işlem yapılmamış örnek veriler ile bir yapıyı öğrenmeye çalışır. Kendi göbeğini kendi kesiyor :)


En yaygın iki metod söyleyecek olursak;
Kümeleme; belirli bir küme içindeki öğeleri birbirine benzer ancak diğer kümedekilerden farklı olacak şekilde gruplandırma yönetimidr.
Boyut azaltma; daha etkili yorumlama ve daha etkili model eğitimi için, benzer veya birbiri ile ilişkideki verileri gruplayarak değişken sayısını azaltma yöntemidir.



alez8pa.png


Biz bu makalemizde “Supervised” yani “Denetimli öğrenme” tekniklerini göreceğiz. Diğer teknik ise bir sonraki makalemde olacak. Takipte kalın.


|
|
v



p9a0vk7.png


Yukarıda bahsetmiştim ancak makalenin bu başlığından okumaya başlayan okuyucularımız için farklı bir tanım daha yapalım.


Denetimli öğrenme (supervised); Çıktı vermek için etiketlenmemiş veiler üzerinde bir algoritmanın eğitilmesine yönelik kullanılan bir Yapay zeka (AI) tekniğidir. Modeller, girdi ve çıktı verilerine bakarak bunlar arasındaki kalıpları ve ilişkileri öğrenene kadar eğitilir. Böylelikle öğrenen bir algoritmanın daha önce görülmemiş bir veri seti hakkında daha doğru tahminler yapabilmesi sağlanır.

Denetimli öğrenme, örneğin gazetede yazılan bir köşe yzısının gazetenin hangi sayfasında olması gerektiğini belirlemeye veya bir şirket için satış hacminin önümüzdeki yıl için ortalama tahminini yapmakta probleblemlerinde oldukça başarılıdır.

Bu öğrenmede amaç, bir soru kapsamında verileri anlamlandırabilmektir.




Artık Makine öğrenimi (ML) ve Denetimli öğrenme (Supervised) konularında bilgi sahibi olduğumuza göre hadi bu alanda kullanılan yaygın algoritmalara birlikte bakalım.




kxfcxnk.png

Doğrusal regresyon, temel ve yaygın olarak kullanılan bir tahmine dayalı analiz türüdür. Genel olarak iki fikir incelenir:

1- Bir dizi yordayıcı değişken, bir sonuç (bağımlı) değişkeni tahmin etmede iyi bir iş çıkarır mı?
2- Özellikle hangi değişkenler sonuç değişkeninin önemli yordayıcılarıdır ve bunlar sonuç değişkenini ne şekilde etkiler?

Bu regresyon tahminleri, bir bağımlı değişken ile bir veya daha fazla bağımsız değişken arasındaki ilişkiyi açıklamak için kullanılır. Bir bağımlı ve bir bağımsız değişkenli regresyon denkleminin en basit şekli, y = b0 + b1 *x1 formülü ile tanımlanır. Burada y = tahmini bağımlı değişken puanı, b0 = sabit, b1 = regresyon katsayısı ve x1 = bağımsız değişkendir.

Değişkenleri adlandırma; Bir regresyonun bağımlı değişkeni için birçok isim kullanılır. Sonuç değişkeni, kriter değişkeni, içsel değişken veya gerileme olarak adlandırılabilir. Bağımsız değişkenler dışsal değişkenler, öngörücü değişkenler veya regresörler olarak adlandırılabilir.

Regresyon analizinin üç ana kullanımından bahsedecek olursak;

Tahmin edicilerin gücünü belirlemek, Bir etkiyi tahmin etmek ve Trend tahmini olarak ayırabiliriz.



Doğrusal Regresyon Türleri

Basit doğrusal regresyon;1 bağımlı değişken (aralık veya oran), 1 bağımsız değişken (aralık veya oran veya ikili)
Çoklu doğrusal gerileme;1 bağımlı değişken (aralık veya oran), 2+ bağımsız değişken (aralık veya oran veya ikili)
Lojistik regresyon;1 bağımlı değişken (ikili), 2+ bağımsız değişken/değişkenler (aralık veya oran veya ikili)
Sıralı regresyon;1 bağımlı değişken (sıralı), 1+ bağımsız değişken/değişkenler (nominal veya ikili)
Çok terimli regresyon;1 bağımlı değişken (nominal), 1+ bağımsız değişken/değişkenler (aralık veya oran veya ikili)
Diskriminant analizi;1 bağımlı değişken (nominal), 1+ bağımsız değişken/değişkenler (aralık veya oran)


Formül;

7f2nem6.png
ovktozh.png


Pyhon3 örneği;

Python:
# Gerekli kütüphanelerin içeri alınması
import numpy as np
import matplotlib.pyplot as plt

def estimating(x, y):
    # gözlem sayısı ayarı
    n = np.size(x)

    # x&y vektörlerinin ortalaması
    m_x = np.mean(x)
    m_y = np.mean(y)

    # x'in çapraz-sapma hesaplanması
    SS_xy = np.sum(y*x) - n*m_y*m_x
    SS_xx = np.sum(x*x) - n*m_x*m_x

    # regresyon katsayılarının hesaplanması
    b_1 = SS_xy / SS_xx
    b_0 = m_y - b_1*m_x

    return (b_0, b_1)

def plot_regression_line(x, y, b):
    # işlem grafiğini çizmek
    plt.scatter(x, y, color = "m",
            marker = "o", s = 30)

    # tahmin
    y_pred = b[0] + b[1]*x

    # regresyon çizgisi
    plt.plot(x, y_pred, color = "g")

    # etiket
    plt.xlabel('x')
    plt.ylabel('y')

    # çizimi göstermek
    plt.show()

def main():
    # gözlem&veri
    x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    y = np.array([1, 3, 2, 5, 7, 8, 8, 9, 10, 12])

    # tahmin katsayısı
    b = estimating(x, y)
    print("Estimated coefficients:\nb_0 = {} \
        \nb_1 = {}".format(b[0], b[1]))

    # regresyon doğrusu
    plot_regression_line(x, y, b)

if __name__ == "__main__":
    main()

Çıktı;

8p9g2wt.png






qtzcz38.png

Lojistik regresyon, bağımlı değişken ikili olduğunda yapılacak uygun regresyon analizidir. Tüm regresyon analizleri gibi, lojistik regresyon da tahmine dayalı bir analizdir.
Lojistik regresyon, verileri tanımlamak ve bir bağımlı ikili değişken ile bir veya daha fazla nominal, sıra, aralık veya oran düzeyinde bağımsız değişken arasındaki ilişkiyi açıklamak için kullanılır.

Formül;


2zj3jb4.png
5wcbfl0.jpg


Python3 örneği;

Python:
# Gerekli kütüphanelerin içeri alıması
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

x, y = load_digits(return_X_y=True)
x_train, x_test, y_train, y_test =\
    train_test_split(x, y, test_size=0.2, random_state=0)

scaler = StandardScaler()
x_train = scaler.fit_transform(x_train)

model = LogisticRegression(solver='liblinear', C=0.05, multi_class='ovr',random_state=0)
model.fit(x_train, y_train)

# regresyon ayarı
LogisticRegression(C=0.05, class_weight=None, dual=False, fit_intercept=True,
                   intercept_scaling=1, l1_ratio=None, max_iter=100,
                   multi_class='ovr', n_jobs=None, penalty='l2', random_state=0,
                   solver='liblinear', tol=0.0001, verbose=0, warm_start=False)

x_test = scaler.transform(x_test)
y_pred = model.predict(x_test)

# çizim ayarları
cm = confusion_matrix(y_test, y_pred)
fig, ax = plt.subplots(figsize=(8, 8))
ax.imshow(cm)
ax.grid(False)
ax.set_xlabel('Predicted outputs', fontsize=12, color='black')
ax.set_ylabel('Actual outputs', fontsize=12, color='black')
ax.xaxis.set(ticks=range(10))
ax.yaxis.set(ticks=range(10))
ax.set_ylim(9.5, -0.5)
for i in range(10):
    for j in range(10):
        ax.text(j, i, cm[i, j], ha='center', va='center', color='white')
plt.show()

Çıktı;

604geg4.png






rlrqwdz.png

Bir sinir ağı, insan beyninin çalışma şeklini taklit eden bir süreç gerçekleştiri. Belirli bir dizi verideki temel ilişkileri tanımaya çalışan algoritmaları içerir. Bu anlamda, sinir ağları, doğada organik veya yapay olan nöron sistemlerine atıfta bulunur.

Sinir ağları değişen girdilere uyum sağlayabilir. Bu sayede ağ, çıktı kriterlerini yeniden tasarlamaya gerek kalmadan mümkün olan en iyi sonucu üretir. Kökleri yapay zekaya dayanan sinir ağları kavramı, ticaret sistemlerinin geliştirilmesi ile hızla popülerlik kazanmıştır ve kazanmaya devam etmektedir.

Formül;


r2ml9iw.png
mf4hsjo.png


Python3 örneği;

Python:
# Gerekli kütüphanenin içeri alınması
import numpy as np

class NeuralNetwork():
    def __init__(self):
        # rastgele sayı üretimi
        np.random.seed(1)
       
        # ağırlıkları -1'den 1'e kadar değerlere ve ortalama 0'a sahip 3'e 1 matris oluşturma
        self.synaptic_weights = 2 * np.random.random((3, 1)) - 1

    def sigmoid(self, x):
        return 1 / (1 + np.exp(-x))

    def sigmoid_derivative(self, x):
        # türev hesabı
        return x * (1 - x)

    def train(self, training_inputs, training_outputs, training_iterations):
       
        # ağırlıkları sürekli olarak ayarlarken doğru tahminler yapmak için modeli eğitmek
        for iteration in range(training_iterations):
            output = self.think(training_inputs)

            # hata oranı hesaplama
            error = training_outputs - output
           
            # ağırlık ayarlama
            adjustments = np.dot(training_inputs.T, error * self.sigmoid_derivative(output))
            self.synaptic_weights += adjustments

    def think(self, inputs):
        # değerleri float'a çevirme
        inputs = inputs.astype(float)
        output = self.sigmoid(np.dot(inputs, self.synaptic_weights))
        return output


if __name__ == "__main__":
    # Nöron sınıfını çağırmak
    neural_network = NeuralNetwork()

    print("Beginning Randomly Generated Weights: ")
    print(neural_network.synaptic_weights)

    # 4 örnekten oluşan eğitim verileri
    training_inputs = np.array([[0,0,1],
                                [1,1,1],
                                [1,0,1],
                                [0,1,1]])

    training_outputs = np.array([[0,1,1,0]]).T

    # eğitim
    neural_network.train(training_inputs, training_outputs, 15000)

    print("Ending Weights After Training: ")
    print(neural_network.synaptic_weights)

    user_input_one = str(input("User Input 1: "))
    user_input_two = str(input("User Input 2: "))
    user_input_three = str(input("User Input 3: "))
   
    print("Considering new situation: ", user_input_one, user_input_two, user_input_three)
    print("New Output data: ")
    print(neural_network.think(np.array([user_input_one, user_input_two, user_input_three])))
    print("Congr!")

Çıktı;

nmzwvqg.png







2nvgi1h.png

Karar Ağaçları (Decision Trees); parametrik olmayan, regresyon ve sınıflandırma işlemleri için kullanılmakta olan bir “Denetimli öğrenme” yöntemidir. Bu yöntem, mevcut sorudan önceki soruların nasıl cevaplandığına bağlı olarak işlemi kategorize eder veya tahminde bulunur.

Karar Ağacı yöntemi, kategorize etme ve tahmin etme için kullanılan hem çok güçlü hem de en popüler yöntemlerden biridir. Ağaç; her düğümünün bir testi, her dalın testin bir sonucunu, her yaprağın (
terminal düğümü) bir sınıfı temsil ettiği bir akış şematiğidir diyebiliriz.

Bu yöntemin amacı ise, verilerden çıkarılacak basit karar kurallarını öğrenmek ve hedefteki bir değişkenin değerini tahmin edebilmektir. Yöntem, istenilen kategorizasyon işlemi için bir dizi veri üzerinde önce eğitilir sonra test edilir.

Karar Ağaçları’nın verdiği cevap veya kararlar her zaman için net olmayabilir. Bu durumlarda veri bilimci için düzgün kararlar verebilmesi adına bir takım seçenekler sunabilir. Bu yöntem bir nevi insan çıkarımlarını taklit ettiğinden dolayı, veri bilimcinin sonuçlar için yorum yapabilmesi kolay olur.



Karar analizinde ise bir karar ağacı, alternatifi olan rakiplerin beklenen faydasının veya değerlerinin hesaplandığı hem görsel hem analitik olan bir
karar-destek aracı pozisyonunda kullanılır.
Bir karar ağacında 3 tür düğüm bulunur:


Decition Node (Karar düğüm) -> Genelde “Kare” şekli ile temsil gösterilir,
Chance Node (Şans düğüm) -> Genelde “Daire” şekli ile temsil gösterilir,
End Node (Uç düğüm) -> Genelde “Üçgen” şekli ile temsil gösterilir.


Yöneylem araştırmaları ve operasyon yönetimi gibi durumlarda yaygın olarak kullanılan Karar Ağaçları, koşullu olasılıkların hesaplanmasında oldukça açıklayıcı olabilmektedir. Ayrıca Karar Ağaçları işletme, sağlık, ekonomi, askeri, araştırma, planlama gibi birçok alanda başvurulan bir mekanizmadır.


Bir Karar Analiz adımları şu maddelerden oluşur:

Karar verme işlemi için sorun alanının tanımlanması.
Olası tüm çözümleri ve bunların sonuçlarını içeren bir Karar Ağacı çizimi.
Değişkenlerin, ilgili olasılık değerleri ile girilmesi.
Olası her sonuç için getirilerin belirlenmesi ve tahsis edilmesi.

Çözümlerden hangisinin en çok değer sağlaması hususunun beklendiğini belirlemek adına tüm şans düğümleri için beklenen parasal değerin hesaplanması.



Karar ağaçlarına özel makale yazdığım için formül, kod ve çıktıyı burada göstermeyeceğim. Aşağıdan ilgili makaleme gidebilirsiniz :)



--------------------------------------------------------------------------------- Karar ağaçları ---------------------------------------------------------------------------------






o0bq0yq.png

Rastgele orman (random forest), denetimli öğrenme tekniğine ait popüler bir makine öğrenme algoritmasıdır. Makine öğrenimide hem sınıflandırma hem de regresyon problemleri için kullanılır. Karmaşık bir problemi çözmek ve modelin performansını iyileştirmek için birden fazla sınıflandırıcıyı birleştirme süreci olan topluluk öğrenme kavramına dayanmaktadır.

Adından da anlaşılacağı gibi Rastgele orman; verilen veri kümesinin çeşitli alt kümelerinde bir dizi karar ağacı içeren ve bu veri kümesinin tahmin doğruluğunu iyileştirmek için ortalamayı alan bir sınıflandırıcıdır. Rastgele orman, tek bir karar ağacına güvenmek yerine, her ağaçtan (tahminlerin çoğunluk oylarına dayalı olarak) tahmini alır ve nihai çıktıyı tahmin eder.

Ormandaki daha fazla ağaç sayısı, daha yüksek doğruluk sağlar ve fazla uyum sorununu önler.

Formül;


azqsbw3.png
d4oxbiz.png


Python3 örneği;

Python:
# Gerekli kütüphanelerin içeri alınması
from numpy import mean
from numpy import std
from numpy import arange
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from sklearn.ensemble import RandomForestClassifier
from matplotlib import pyplot

# dataset ayarı
def get_dataset():
    X, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=3)
    return X, y

# model listesi ayarı
def get_models():
    models = dict()
    # %10'luk artışlarla %10'dan %100'e kadar olan oranları eklemek
    for i in arange(0.1, 1.1, 0.1):
        key = '%.1f' % i
        # 100% değer almamak için ayar
        if i == 1.0:
            i = None
        models[key] = RandomForestClassifier(max_samples=i)
    return models

# çapraz doğrulama kullanarak belirli bir modeli değerlendirmek
def evaluate_model(model, X, y):
    # değerlendirme prosedürü
    cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
    # modeli değerlendirme&sonuçlar
    scores = cross_val_score(model, X, y, scoring='accuracy', cv=cv, n_jobs=-1)
    return scores

# dataset tanımı
X, y = get_dataset()
# model tanımı
models = get_models()
# model değerlendirmesi&sonuçlar
results, names = list(), list()
for name, model in models.items():
    # model tanımı
    scores = evaluate_model(model, X, y)
    # sonuçların sergilenmesi
    results.append(scores)
    names.append(name)
    # yol boyunca performansı özetlemek
    print('>%s %.3f (%.3f)' % (name, mean(scores), std(scores)))
# karşılaştırma için çizim modeli
pyplot.boxplot(results, labels=names, showmeans=True)
pyplot.show()

Çıktı;

n0e65p9.png







gx6j616.png

Destek Vektör Makinesi (SVM), hem sınıflandırma hem de regresyon zorlukları için kullanılabilen denetimli bir makine öğrenme algoritmasıdır.
Ancak daha çok sınıflandırma problemlerinde kullanılmaktadır.
SVM algoritmasında, her bir veri öğesini, her özelliğin değeri belirli bir koordinatın değeri olacak şekilde n boyutlu uzayda (n,sahip olduğunumuz bir dizi özelliktir) bir nokta olarak çizilir.
Ardından, iki sınıfı çok iyi ayıran hiper düzlemi bularak sınıflandırma yapılır.

Formül;


h50yyip.png
16kde5l.png


Python3 örneği;

Python:
# Gerekli kütüphanelerin içeri alınması
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import os
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import confusion_matrix
from matplotlib.colors import ListedColormap

os.chdir('.')
dataset = pd.read_csv('ornek_data.csv')

X = dataset.iloc[:, [2,3]].values
y = dataset.iloc[:, 4].values

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)

sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.transform(X_test)

classifier = SVC(kernel='linear', random_state = 0)
classifier.fit(X_train, y_train)

y_pred = classifier.predict(X_test)

cm = confusion_matrix(y_test, y_pred)
print(cm)

X_set, y_set = X_train, y_train
X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),
         np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))
plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),
             alpha = 0.75, cmap = ListedColormap(('blue', 'green')))
plt.xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max())
for i, j in enumerate(np.unique(y_set)):
     plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],
                 c = ListedColormap(('yellow', 'green'))(i), label = j)
plt.title('SVM')
plt.xlabel('Age')
plt.ylabel('Salary')
plt.legend()
plt.show()

Çıktı;

i9alu8z.png








5hmnxoc.png

Tahminciler arasında bağımsızlık varsayımı ile Bayes Teoremine dayalı bir sınıflandırma tekniğidir. Basit bir ifadeyle, bir Naive Bayes sınıflandırıcısı, bir sınıftaki belirli bir özelliğin varlığının başka herhangi bir özelliğin varlığıyla ilgisi olmadığını varsayar.

Örneğin, kırmızı, yuvarlak ve çapı yaklaşık 3 inç olan bir meyve elma olarak kabul edilebilir. Bu özellikler birbirine veya diğer özelliklerin varlığına bağlı olsa bile, tüm bu özellikler bağımsız olarak bu meyvenin bir elma olma olasılığına katkıda bulunur ve bu nedenle '
Naive' olarak bilinir.

Naive Bayes modelinin oluşturulması kolaydır ve özellikle çok büyük veri kümeleri için kullanışlıdır. Sadeliğin yanı sıra, Naive Bayes'in son derece karmaşık sınıflandırma yöntemlerinden bile daha iyi performans gösterdiği bilinmektedir.

Formül;


lzxchgr.jpg
a9txoa2.png


Python3 örneği;

Python:
# Gerekli kütüphanelerin içer alınması
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score

# Data setini ayarlama
data = load_breast_cancer()
label_names = data['target_names']
labels = data['target']
feature_names = data['feature_names']
features = data['data']

#print(features[0])
#print(feature_names[0])

# Data'yı ayırma
train, test, train_labels, test_labels = train_test_split(features,labels,test_size = 0.40, random_state = 42)

gauss = GaussianNB()
model = gauss.fit(train, train_labels)
predict = gauss.predict(test)

#print(predict)
print(accuracy_score(test_labels,predict))

Çıktı;

hykwzqb.png




|
|
v



NOT: Denetimli öğrenme algoritması seçerken dikkat edilmesi gereken birkaç husus var. Birincisi, yeterince esnek olmakla çok esnek olmak arasında ince bir çizgi olduğundan, algoritma içinde var olan önyargı ve varyanstır. Bir diğeri, sistemin öğrenmeye çalıştığı modelin veya işlevin karmaşıklığıdır. Belirtildiği gibi, bir algoritma seçmeden önce verilerin heterojenliği, doğruluğu, fazlalığı ve doğrusallığı da analiz edilmelidir.


|
|
v



Avantaj & Dezavantaj



Denetimli öğrenmenin avantajları şunlardır:

Makine Öğrenimi'nde denetimli öğrenme, veri toplamanıza veya önceki deneyimden veri çıktısı üretmenize olanak tanır.
Denetimli makine öğrenimi, çeşitli gerçek dünya hesaplama problemlerini çözmenize yardımcı olur.
Deneyim yardımıyla performans kriterlerini optimize etmeye yardımcı olur.





Denetimli öğrenmenin dezavantajları şunlardır:

Bir sınıfta sahip olmak istediğiniz örnekleri içermeyen eğitim setiniz varsa, karar sınırı fazla eğitilmiş olabilir.
Sınıflandırıcıyı eğitirken her sınıftan çok sayıda iyi örnek seçmeniz gerekir.
Denetimli öğrenme için eğitim, çok fazla hesaplama süresi gerektirir.
Büyük verileri sınıflandırmak zor olabilir.



^
|
|


jx3vvgm.png


|
|
v



Değerli dostlarım, güzel kardeşlerim;
Bu makalemde kısaca "Makine öğrenmesi modelleri" konusuna değindim.
Ardından "
En popüler algoritmalar" konusunda örnekler yaptık.
Kaynak niteliğinde bu forumda kalması temennisi ile diyerek sözlerimi bitiriyorum.

Sağlıcakla kalın.






eyruvyp.png
Ellerine saglik
 

deltaturk

Moderasyon Ekibi Lider Yardımcısı
26 Kas 2020
922
970
Green Team Mersin Daire Bşk.
q688b03.png








Merhaba dostlarım,bu makalemde sizlere "Makine öğrenmesi (ML)" alanında karşımıza çıkan ve oldukça popüler olan modelleri,algoritmaları anlatacağım.
Makalede "Makine öğrenmesi (ML)" hakkında detaylı bilgiler edinebileceksiniz, farklı algoritmalar ile karşılaşacaksınız, çeşitli formüller göreceksiniz.
Ayrıca yine makaledeki algoritmalara "
Python3" kullanarak örnekler vereceğim ve bu kodları inceleyeceğiz.
Foruma katkısı ve bu alanda çalışacak arkadaşlara faydalı olması dileğiyle diyerek başlamak istiyorum.

İyi okumalar.


|
|
v





Makine öğrenmesi (ML) nedir?


pny6b6z.png

İnsanlığın geleceğinin, robotların gelişimi ile doğru orantılı olduğunu söylemek sanırım yanlış olmayacaktır. Yakın gelecekte artık robotların, hayatımızın neredeyse her alanında bir hakimiyet kuracağı öngörülüyor. İşte bu robotlar ile tasfir edilen gelecek, yüksek oranda “Yapay Zeka (AI)”nın başarılı bir şekilde dağıtılmasına dayandırılır. Ancak, bu elektronik devrelerin, metallerin, kabloların düşünebilen bir makinelere dönüştürülmesi sanıldığı kadar kolay değildir. Güçlü bir yapaz zeka, ancak ve ancak anlama ve düşünme becerisini onlara kazandıracak olan “Makine Öğrenimi (ML)” ile yaratılabilir.

Çok teknik konuları içerisinde barındıran Makine öğrenimi maalesef kafa karıştırıcı olabiliyor. Daha iyi anlaşılması için farklı tanımlamalar yapacağım.


Peki, nedir bu Makine öğrenimi?

Machine Learning (Makine öğrenimi), sistemlerin açıkça programlanmadan deneyimler ile hem öğrenmesini hem de geliştirmesini sağlayan bir yapay zeka alanıdır. Verilere erişebilen ve yine bu verileri kendi öğrenimleri için kullanabilen programlar geliştirmeyi hedefler.

Bir başka tanım ile Makine öğrenimi, geliştirilen ancak açıkça programlanmamış uygulamaların sonuçları tahmin etmede daha sağlam/doğru veriler sunmasına fayda sağlayan bir tür yapay zekadır. Burada kullanılan algoritmalar, çıktı değerlerini tahmin edebilmek için geçmiş/eski verileri girdi olarak kullanır.



Makine öğrenimi kullanım alanlarından bazıları şunlardır;
Öneri motorları, kötü amaçlı yazılım tespit uygulamaları, iş süreci otomasyonları (BPA), dolandırıcılık tespit sistemleri, istenmeyen e-posta filtreleme ve tahmin sistemi üzerine kurulan bakım uygulamaları.



Makine öğrenimi (ML), günümüz teknolojileri arasında en heyecan ve umut verici teknolojilerden biridir. Sizede heyecan veriyor mu? Yada şöyle sorayım; Robotlar etkileyiciler değil mi?






Neden bu kadar önemli?

g9l89ok.png

Makine öğreniminin (ML) öneminden kısaca bahsedecek olursak;

Makine öğrenimi (ML), müşteri davranışlarındaki ve iş operasyon süreci modellerindeki eğilimler hakkında işletmlere fikirler verebildiği aynı zamanda yeni ürünler için de gelişim desteği sağladığı için oldukça önemlidir. YouTube, Facebook (ve diğer ‘Meta’ şirketleri), Uber, Google, Amazon gibi piyasanın lider şirketleri, bu teknolojiyi operasyonlarında merkezi bir konuma koyuyor.

Diğer taraftan Makine öğrenimi, insan zihninin kopyalayamayacağı bir hızda işlem çözebildiğinden de büyük öneme sahiptir. Ne kadar öğrenirse o kadar hızlanan programlar aslında insan eli ile yapılmış ancak insandan çok daha hızlı düşünebilen makinelere dönüşüyor.





Makine öğrenmesi nasıl çalışır?

l2l0o1w.png

Makine öğrenimi (ML), tıpkı insan beyni gibi varlıkları, alanları ve bunlar arasındaki bağlantıları anlamak ve anlamlandırmak için eğitim verilerine veya grafik girdilerine ihtiyaç duyar.
Diğer bir deyiş ile, geçmiş deneyimlerden ders çıkarır, öğrenir ve geliştirir. Elde edilen verileri keşfeder, kalıplarını tanımlar ve azami insan müdahalesine ihtiyaç duyar.

Makine öğrenimi (ML) iki ana teknik ile sağlanır. (Bazı kaynaklar üçüncü bir teknik daha ekler. Ben size ilerleyen makalelerde onuda anlatırım :))
Bunlar;
Supervised (Denetimli öğrenme) ve Unsupervised (Denetimsiz öğrenme)


Denetimli öğrenme (supevised);
Geçmiş bir ML dağıtımından veri çekmebilmemizi veya bir veri çıktısı üretebilmemizi sağlar. Bu öğrenim tekniği heyecan verici olabiliyor. Çünkü tıpkı bir insan beyni gibi öğrenir.
Denetimli öğrenmede, bilgisayara eğitim seti adı verilen bir etiketlenmiş veri noktaları koleksiyonu sunulur ve bundan bir sonraki adım çıkarımı yapılması beklenir.



Denetimsiz öğrenme (unsupervised);
Eldeki verilerde bilinmeyen modelleri bulmamıza yardım eder. Bu öğrenimde algoritma, yalnızca işlem yapılmamış örnek veriler ile bir yapıyı öğrenmeye çalışır. Kendi göbeğini kendi kesiyor :)


En yaygın iki metod söyleyecek olursak;
Kümeleme; belirli bir küme içindeki öğeleri birbirine benzer ancak diğer kümedekilerden farklı olacak şekilde gruplandırma yönetimidr.
Boyut azaltma; daha etkili yorumlama ve daha etkili model eğitimi için, benzer veya birbiri ile ilişkideki verileri gruplayarak değişken sayısını azaltma yöntemidir.



alez8pa.png


Biz bu makalemizde “Supervised” yani “Denetimli öğrenme” tekniklerini göreceğiz. Diğer teknik ise bir sonraki makalemde olacak. Takipte kalın.


|
|
v



p9a0vk7.png


Yukarıda bahsetmiştim ancak makalenin bu başlığından okumaya başlayan okuyucularımız için farklı bir tanım daha yapalım.


Denetimli öğrenme (supervised); Çıktı vermek için etiketlenmemiş veiler üzerinde bir algoritmanın eğitilmesine yönelik kullanılan bir Yapay zeka (AI) tekniğidir. Modeller, girdi ve çıktı verilerine bakarak bunlar arasındaki kalıpları ve ilişkileri öğrenene kadar eğitilir. Böylelikle öğrenen bir algoritmanın daha önce görülmemiş bir veri seti hakkında daha doğru tahminler yapabilmesi sağlanır.

Denetimli öğrenme, örneğin gazetede yazılan bir köşe yzısının gazetenin hangi sayfasında olması gerektiğini belirlemeye veya bir şirket için satış hacminin önümüzdeki yıl için ortalama tahminini yapmakta probleblemlerinde oldukça başarılıdır.

Bu öğrenmede amaç, bir soru kapsamında verileri anlamlandırabilmektir.




Artık Makine öğrenimi (ML) ve Denetimli öğrenme (Supervised) konularında bilgi sahibi olduğumuza göre hadi bu alanda kullanılan yaygın algoritmalara birlikte bakalım.




kxfcxnk.png

Doğrusal regresyon, temel ve yaygın olarak kullanılan bir tahmine dayalı analiz türüdür. Genel olarak iki fikir incelenir:

1- Bir dizi yordayıcı değişken, bir sonuç (bağımlı) değişkeni tahmin etmede iyi bir iş çıkarır mı?
2- Özellikle hangi değişkenler sonuç değişkeninin önemli yordayıcılarıdır ve bunlar sonuç değişkenini ne şekilde etkiler?

Bu regresyon tahminleri, bir bağımlı değişken ile bir veya daha fazla bağımsız değişken arasındaki ilişkiyi açıklamak için kullanılır. Bir bağımlı ve bir bağımsız değişkenli regresyon denkleminin en basit şekli, y = b0 + b1 *x1 formülü ile tanımlanır. Burada y = tahmini bağımlı değişken puanı, b0 = sabit, b1 = regresyon katsayısı ve x1 = bağımsız değişkendir.

Değişkenleri adlandırma; Bir regresyonun bağımlı değişkeni için birçok isim kullanılır. Sonuç değişkeni, kriter değişkeni, içsel değişken veya gerileme olarak adlandırılabilir. Bağımsız değişkenler dışsal değişkenler, öngörücü değişkenler veya regresörler olarak adlandırılabilir.

Regresyon analizinin üç ana kullanımından bahsedecek olursak;

Tahmin edicilerin gücünü belirlemek, Bir etkiyi tahmin etmek ve Trend tahmini olarak ayırabiliriz.



Doğrusal Regresyon Türleri

Basit doğrusal regresyon;1 bağımlı değişken (aralık veya oran), 1 bağımsız değişken (aralık veya oran veya ikili)
Çoklu doğrusal gerileme;1 bağımlı değişken (aralık veya oran), 2+ bağımsız değişken (aralık veya oran veya ikili)
Lojistik regresyon;1 bağımlı değişken (ikili), 2+ bağımsız değişken/değişkenler (aralık veya oran veya ikili)
Sıralı regresyon;1 bağımlı değişken (sıralı), 1+ bağımsız değişken/değişkenler (nominal veya ikili)
Çok terimli regresyon;1 bağımlı değişken (nominal), 1+ bağımsız değişken/değişkenler (aralık veya oran veya ikili)
Diskriminant analizi;1 bağımlı değişken (nominal), 1+ bağımsız değişken/değişkenler (aralık veya oran)


Formül;

7f2nem6.png
ovktozh.png


Pyhon3 örneği;

Python:
# Gerekli kütüphanelerin içeri alınması
import numpy as np
import matplotlib.pyplot as plt

def estimating(x, y):
    # gözlem sayısı ayarı
    n = np.size(x)

    # x&y vektörlerinin ortalaması
    m_x = np.mean(x)
    m_y = np.mean(y)

    # x'in çapraz-sapma hesaplanması
    SS_xy = np.sum(y*x) - n*m_y*m_x
    SS_xx = np.sum(x*x) - n*m_x*m_x

    # regresyon katsayılarının hesaplanması
    b_1 = SS_xy / SS_xx
    b_0 = m_y - b_1*m_x

    return (b_0, b_1)

def plot_regression_line(x, y, b):
    # işlem grafiğini çizmek
    plt.scatter(x, y, color = "m",
            marker = "o", s = 30)

    # tahmin
    y_pred = b[0] + b[1]*x

    # regresyon çizgisi
    plt.plot(x, y_pred, color = "g")

    # etiket
    plt.xlabel('x')
    plt.ylabel('y')

    # çizimi göstermek
    plt.show()

def main():
    # gözlem&veri
    x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    y = np.array([1, 3, 2, 5, 7, 8, 8, 9, 10, 12])

    # tahmin katsayısı
    b = estimating(x, y)
    print("Estimated coefficients:\nb_0 = {} \
        \nb_1 = {}".format(b[0], b[1]))

    # regresyon doğrusu
    plot_regression_line(x, y, b)

if __name__ == "__main__":
    main()

Çıktı;

8p9g2wt.png






qtzcz38.png

Lojistik regresyon, bağımlı değişken ikili olduğunda yapılacak uygun regresyon analizidir. Tüm regresyon analizleri gibi, lojistik regresyon da tahmine dayalı bir analizdir.
Lojistik regresyon, verileri tanımlamak ve bir bağımlı ikili değişken ile bir veya daha fazla nominal, sıra, aralık veya oran düzeyinde bağımsız değişken arasındaki ilişkiyi açıklamak için kullanılır.

Formül;


2zj3jb4.png
5wcbfl0.jpg


Python3 örneği;

Python:
# Gerekli kütüphanelerin içeri alıması
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

x, y = load_digits(return_X_y=True)
x_train, x_test, y_train, y_test =\
    train_test_split(x, y, test_size=0.2, random_state=0)

scaler = StandardScaler()
x_train = scaler.fit_transform(x_train)

model = LogisticRegression(solver='liblinear', C=0.05, multi_class='ovr',random_state=0)
model.fit(x_train, y_train)

# regresyon ayarı
LogisticRegression(C=0.05, class_weight=None, dual=False, fit_intercept=True,
                   intercept_scaling=1, l1_ratio=None, max_iter=100,
                   multi_class='ovr', n_jobs=None, penalty='l2', random_state=0,
                   solver='liblinear', tol=0.0001, verbose=0, warm_start=False)

x_test = scaler.transform(x_test)
y_pred = model.predict(x_test)

# çizim ayarları
cm = confusion_matrix(y_test, y_pred)
fig, ax = plt.subplots(figsize=(8, 8))
ax.imshow(cm)
ax.grid(False)
ax.set_xlabel('Predicted outputs', fontsize=12, color='black')
ax.set_ylabel('Actual outputs', fontsize=12, color='black')
ax.xaxis.set(ticks=range(10))
ax.yaxis.set(ticks=range(10))
ax.set_ylim(9.5, -0.5)
for i in range(10):
    for j in range(10):
        ax.text(j, i, cm[i, j], ha='center', va='center', color='white')
plt.show()

Çıktı;

604geg4.png






rlrqwdz.png

Bir sinir ağı, insan beyninin çalışma şeklini taklit eden bir süreç gerçekleştiri. Belirli bir dizi verideki temel ilişkileri tanımaya çalışan algoritmaları içerir. Bu anlamda, sinir ağları, doğada organik veya yapay olan nöron sistemlerine atıfta bulunur.

Sinir ağları değişen girdilere uyum sağlayabilir. Bu sayede ağ, çıktı kriterlerini yeniden tasarlamaya gerek kalmadan mümkün olan en iyi sonucu üretir. Kökleri yapay zekaya dayanan sinir ağları kavramı, ticaret sistemlerinin geliştirilmesi ile hızla popülerlik kazanmıştır ve kazanmaya devam etmektedir.

Formül;


r2ml9iw.png
mf4hsjo.png


Python3 örneği;

Python:
# Gerekli kütüphanenin içeri alınması
import numpy as np

class NeuralNetwork():
    def __init__(self):
        # rastgele sayı üretimi
        np.random.seed(1)
       
        # ağırlıkları -1'den 1'e kadar değerlere ve ortalama 0'a sahip 3'e 1 matris oluşturma
        self.synaptic_weights = 2 * np.random.random((3, 1)) - 1

    def sigmoid(self, x):
        return 1 / (1 + np.exp(-x))

    def sigmoid_derivative(self, x):
        # türev hesabı
        return x * (1 - x)

    def train(self, training_inputs, training_outputs, training_iterations):
       
        # ağırlıkları sürekli olarak ayarlarken doğru tahminler yapmak için modeli eğitmek
        for iteration in range(training_iterations):
            output = self.think(training_inputs)

            # hata oranı hesaplama
            error = training_outputs - output
           
            # ağırlık ayarlama
            adjustments = np.dot(training_inputs.T, error * self.sigmoid_derivative(output))
            self.synaptic_weights += adjustments

    def think(self, inputs):
        # değerleri float'a çevirme
        inputs = inputs.astype(float)
        output = self.sigmoid(np.dot(inputs, self.synaptic_weights))
        return output


if __name__ == "__main__":
    # Nöron sınıfını çağırmak
    neural_network = NeuralNetwork()

    print("Beginning Randomly Generated Weights: ")
    print(neural_network.synaptic_weights)

    # 4 örnekten oluşan eğitim verileri
    training_inputs = np.array([[0,0,1],
                                [1,1,1],
                                [1,0,1],
                                [0,1,1]])

    training_outputs = np.array([[0,1,1,0]]).T

    # eğitim
    neural_network.train(training_inputs, training_outputs, 15000)

    print("Ending Weights After Training: ")
    print(neural_network.synaptic_weights)

    user_input_one = str(input("User Input 1: "))
    user_input_two = str(input("User Input 2: "))
    user_input_three = str(input("User Input 3: "))
   
    print("Considering new situation: ", user_input_one, user_input_two, user_input_three)
    print("New Output data: ")
    print(neural_network.think(np.array([user_input_one, user_input_two, user_input_three])))
    print("Congr!")

Çıktı;

nmzwvqg.png







2nvgi1h.png

Karar Ağaçları (Decision Trees); parametrik olmayan, regresyon ve sınıflandırma işlemleri için kullanılmakta olan bir “Denetimli öğrenme” yöntemidir. Bu yöntem, mevcut sorudan önceki soruların nasıl cevaplandığına bağlı olarak işlemi kategorize eder veya tahminde bulunur.

Karar Ağacı yöntemi, kategorize etme ve tahmin etme için kullanılan hem çok güçlü hem de en popüler yöntemlerden biridir. Ağaç; her düğümünün bir testi, her dalın testin bir sonucunu, her yaprağın (
terminal düğümü) bir sınıfı temsil ettiği bir akış şematiğidir diyebiliriz.

Bu yöntemin amacı ise, verilerden çıkarılacak basit karar kurallarını öğrenmek ve hedefteki bir değişkenin değerini tahmin edebilmektir. Yöntem, istenilen kategorizasyon işlemi için bir dizi veri üzerinde önce eğitilir sonra test edilir.

Karar Ağaçları’nın verdiği cevap veya kararlar her zaman için net olmayabilir. Bu durumlarda veri bilimci için düzgün kararlar verebilmesi adına bir takım seçenekler sunabilir. Bu yöntem bir nevi insan çıkarımlarını taklit ettiğinden dolayı, veri bilimcinin sonuçlar için yorum yapabilmesi kolay olur.



Karar analizinde ise bir karar ağacı, alternatifi olan rakiplerin beklenen faydasının veya değerlerinin hesaplandığı hem görsel hem analitik olan bir
karar-destek aracı pozisyonunda kullanılır.
Bir karar ağacında 3 tür düğüm bulunur:


Decition Node (Karar düğüm) -> Genelde “Kare” şekli ile temsil gösterilir,
Chance Node (Şans düğüm) -> Genelde “Daire” şekli ile temsil gösterilir,
End Node (Uç düğüm) -> Genelde “Üçgen” şekli ile temsil gösterilir.


Yöneylem araştırmaları ve operasyon yönetimi gibi durumlarda yaygın olarak kullanılan Karar Ağaçları, koşullu olasılıkların hesaplanmasında oldukça açıklayıcı olabilmektedir. Ayrıca Karar Ağaçları işletme, sağlık, ekonomi, askeri, araştırma, planlama gibi birçok alanda başvurulan bir mekanizmadır.


Bir Karar Analiz adımları şu maddelerden oluşur:

Karar verme işlemi için sorun alanının tanımlanması.
Olası tüm çözümleri ve bunların sonuçlarını içeren bir Karar Ağacı çizimi.
Değişkenlerin, ilgili olasılık değerleri ile girilmesi.
Olası her sonuç için getirilerin belirlenmesi ve tahsis edilmesi.

Çözümlerden hangisinin en çok değer sağlaması hususunun beklendiğini belirlemek adına tüm şans düğümleri için beklenen parasal değerin hesaplanması.



Karar ağaçlarına özel makale yazdığım için formül, kod ve çıktıyı burada göstermeyeceğim. Aşağıdan ilgili makaleme gidebilirsiniz :)



--------------------------------------------------------------------------------- Karar ağaçları ---------------------------------------------------------------------------------






o0bq0yq.png

Rastgele orman (random forest), denetimli öğrenme tekniğine ait popüler bir makine öğrenme algoritmasıdır. Makine öğrenimide hem sınıflandırma hem de regresyon problemleri için kullanılır. Karmaşık bir problemi çözmek ve modelin performansını iyileştirmek için birden fazla sınıflandırıcıyı birleştirme süreci olan topluluk öğrenme kavramına dayanmaktadır.

Adından da anlaşılacağı gibi Rastgele orman; verilen veri kümesinin çeşitli alt kümelerinde bir dizi karar ağacı içeren ve bu veri kümesinin tahmin doğruluğunu iyileştirmek için ortalamayı alan bir sınıflandırıcıdır. Rastgele orman, tek bir karar ağacına güvenmek yerine, her ağaçtan (tahminlerin çoğunluk oylarına dayalı olarak) tahmini alır ve nihai çıktıyı tahmin eder.

Ormandaki daha fazla ağaç sayısı, daha yüksek doğruluk sağlar ve fazla uyum sorununu önler.

Formül;


azqsbw3.png
d4oxbiz.png


Python3 örneği;

Python:
# Gerekli kütüphanelerin içeri alınması
from numpy import mean
from numpy import std
from numpy import arange
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from sklearn.ensemble import RandomForestClassifier
from matplotlib import pyplot

# dataset ayarı
def get_dataset():
    X, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=3)
    return X, y

# model listesi ayarı
def get_models():
    models = dict()
    # %10'luk artışlarla %10'dan %100'e kadar olan oranları eklemek
    for i in arange(0.1, 1.1, 0.1):
        key = '%.1f' % i
        # 100% değer almamak için ayar
        if i == 1.0:
            i = None
        models[key] = RandomForestClassifier(max_samples=i)
    return models

# çapraz doğrulama kullanarak belirli bir modeli değerlendirmek
def evaluate_model(model, X, y):
    # değerlendirme prosedürü
    cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
    # modeli değerlendirme&sonuçlar
    scores = cross_val_score(model, X, y, scoring='accuracy', cv=cv, n_jobs=-1)
    return scores

# dataset tanımı
X, y = get_dataset()
# model tanımı
models = get_models()
# model değerlendirmesi&sonuçlar
results, names = list(), list()
for name, model in models.items():
    # model tanımı
    scores = evaluate_model(model, X, y)
    # sonuçların sergilenmesi
    results.append(scores)
    names.append(name)
    # yol boyunca performansı özetlemek
    print('>%s %.3f (%.3f)' % (name, mean(scores), std(scores)))
# karşılaştırma için çizim modeli
pyplot.boxplot(results, labels=names, showmeans=True)
pyplot.show()

Çıktı;

n0e65p9.png







gx6j616.png

Destek Vektör Makinesi (SVM), hem sınıflandırma hem de regresyon zorlukları için kullanılabilen denetimli bir makine öğrenme algoritmasıdır.
Ancak daha çok sınıflandırma problemlerinde kullanılmaktadır.
SVM algoritmasında, her bir veri öğesini, her özelliğin değeri belirli bir koordinatın değeri olacak şekilde n boyutlu uzayda (n,sahip olduğunumuz bir dizi özelliktir) bir nokta olarak çizilir.
Ardından, iki sınıfı çok iyi ayıran hiper düzlemi bularak sınıflandırma yapılır.

Formül;


h50yyip.png
16kde5l.png


Python3 örneği;

Python:
# Gerekli kütüphanelerin içeri alınması
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import os
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import confusion_matrix
from matplotlib.colors import ListedColormap

os.chdir('.')
dataset = pd.read_csv('ornek_data.csv')

X = dataset.iloc[:, [2,3]].values
y = dataset.iloc[:, 4].values

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)

sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.transform(X_test)

classifier = SVC(kernel='linear', random_state = 0)
classifier.fit(X_train, y_train)

y_pred = classifier.predict(X_test)

cm = confusion_matrix(y_test, y_pred)
print(cm)

X_set, y_set = X_train, y_train
X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),
         np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))
plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),
             alpha = 0.75, cmap = ListedColormap(('blue', 'green')))
plt.xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max())
for i, j in enumerate(np.unique(y_set)):
     plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],
                 c = ListedColormap(('yellow', 'green'))(i), label = j)
plt.title('SVM')
plt.xlabel('Age')
plt.ylabel('Salary')
plt.legend()
plt.show()

Çıktı;

i9alu8z.png








5hmnxoc.png

Tahminciler arasında bağımsızlık varsayımı ile Bayes Teoremine dayalı bir sınıflandırma tekniğidir. Basit bir ifadeyle, bir Naive Bayes sınıflandırıcısı, bir sınıftaki belirli bir özelliğin varlığının başka herhangi bir özelliğin varlığıyla ilgisi olmadığını varsayar.

Örneğin, kırmızı, yuvarlak ve çapı yaklaşık 3 inç olan bir meyve elma olarak kabul edilebilir. Bu özellikler birbirine veya diğer özelliklerin varlığına bağlı olsa bile, tüm bu özellikler bağımsız olarak bu meyvenin bir elma olma olasılığına katkıda bulunur ve bu nedenle '
Naive' olarak bilinir.

Naive Bayes modelinin oluşturulması kolaydır ve özellikle çok büyük veri kümeleri için kullanışlıdır. Sadeliğin yanı sıra, Naive Bayes'in son derece karmaşık sınıflandırma yöntemlerinden bile daha iyi performans gösterdiği bilinmektedir.

Formül;


lzxchgr.jpg
a9txoa2.png


Python3 örneği;

Python:
# Gerekli kütüphanelerin içer alınması
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score

# Data setini ayarlama
data = load_breast_cancer()
label_names = data['target_names']
labels = data['target']
feature_names = data['feature_names']
features = data['data']

#print(features[0])
#print(feature_names[0])

# Data'yı ayırma
train, test, train_labels, test_labels = train_test_split(features,labels,test_size = 0.40, random_state = 42)

gauss = GaussianNB()
model = gauss.fit(train, train_labels)
predict = gauss.predict(test)

#print(predict)
print(accuracy_score(test_labels,predict))

Çıktı;

hykwzqb.png




|
|
v



NOT: Denetimli öğrenme algoritması seçerken dikkat edilmesi gereken birkaç husus var. Birincisi, yeterince esnek olmakla çok esnek olmak arasında ince bir çizgi olduğundan, algoritma içinde var olan önyargı ve varyanstır. Bir diğeri, sistemin öğrenmeye çalıştığı modelin veya işlevin karmaşıklığıdır. Belirtildiği gibi, bir algoritma seçmeden önce verilerin heterojenliği, doğruluğu, fazlalığı ve doğrusallığı da analiz edilmelidir.


|
|
v



Avantaj & Dezavantaj



Denetimli öğrenmenin avantajları şunlardır:

Makine Öğrenimi'nde denetimli öğrenme, veri toplamanıza veya önceki deneyimden veri çıktısı üretmenize olanak tanır.
Denetimli makine öğrenimi, çeşitli gerçek dünya hesaplama problemlerini çözmenize yardımcı olur.
Deneyim yardımıyla performans kriterlerini optimize etmeye yardımcı olur.





Denetimli öğrenmenin dezavantajları şunlardır:

Bir sınıfta sahip olmak istediğiniz örnekleri içermeyen eğitim setiniz varsa, karar sınırı fazla eğitilmiş olabilir.
Sınıflandırıcıyı eğitirken her sınıftan çok sayıda iyi örnek seçmeniz gerekir.
Denetimli öğrenme için eğitim, çok fazla hesaplama süresi gerektirir.
Büyük verileri sınıflandırmak zor olabilir.



^
|
|


jx3vvgm.png


|
|
v



Değerli dostlarım, güzel kardeşlerim;
Bu makalemde kısaca "Makine öğrenmesi modelleri" konusuna değindim.
Ardından "
En popüler algoritmalar" konusunda örnekler yaptık.
Kaynak niteliğinde bu forumda kalması temennisi ile diyerek sözlerimi bitiriyorum.

Sağlıcakla kalın.






eyruvyp.png
Eline Sağlık :)
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.