Aşağıda SVM (Support Vector Machine) adlı makine öğrenmesi modeli ile yapay zeka adlı arkadaşa, mütevazı bir tahmin işlemi yaptıracağız. Bunun için Python ve SkLearn kütüphanesi ile aşağıda gördüğünüz şekildeki bir veri seti kullanıyoruz.

yasegitim_seviyesikredi_odememezlikrenk
5060green
6050green
7060green
5550green
5340green
5060green
5250green
5050green
4960green
5340green
5750green
2511red
3031red
4521red
2231red
3021red
3331red
2641red
2421red
Kredi ödememezlik tablosu

Yaş ve eğitim düzeyi bilgisi elimizdedir. Bu bilgilere göre bir de kredi geri ödeme durumunu biliyoruz.In [102]:

import pandas as pd
df = pd.read_excel('svm_ornek_data_1.xlsx')

In [115]:

import numpy as np
from sklearn import datasets
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import LinearSVC

In [111]:

df.sample(3)

Out[111]:

yasegitim_seviyesikredi_odememezlikrenk
134521red
16050green
65250green

Aşağıdaki grafikte dikkat ettiyseniz kredi geri ödememe durumu 0 olan (yani geri ödeyenler) eğitim düzeyi ve yaş yüksek kişiler. Diğerleri ise tam tersi düşük eğitimli ve genç kişiler.In [112]:

%matplotlib inline
import matplotlib.pyplot as plt
df.plot.scatter(x='yas',y='egitim_seviyesi',c=df['renk'])

Out[112]:

<matplotlib.axes._subplots.AxesSubplot at 0x27a0b7bc0b8>

Şimdi Support Vector Machine ile bu veri setini algoritmaya öğretip, bu veri setindeki bir durumda ortaya çıkacak durumu tahmin ettirelim.In [103]:

X = df.iloc[:,0:2].values.astype(float) #ilk iki kolonu al 0, 1
y = df.iloc[:,2:3].values.astype(float)# sadece 3. kolon 

StandardScaler kullanma nedeni: SVM veri setlerinin tüm kolonlar için benzer aralıkta olduğu durumlarda daha rahat çalışır. LinearSVC kullanma nedenimiz ise bu veri setinin lineer olarak ayrılabilimesi. Elbette bu mümkün olmayabilirdi de.In [131]:

scaler = StandardScaler()
X_std = scaler.fit_transform(X)

In [143]:

# Create support vector classifier
svc = LinearSVC(C=1.0, loss="hinge")

# Train model
model = svc.fit(X_std, y)
model

Out[143]:

LinearSVC(C=1.0, class_weight=None, dual=True, fit_intercept=True,
     intercept_scaling=1, loss='hinge', max_iter=1000, multi_class='ovr',
     penalty='l2', random_state=None, tol=0.0001, verbose=0)

Şimdi tahmin yapalım: 51 yaşıda ve eğitim seviyesi 3 olan biri kredisini geri öder mi (0:öder, 1:Ödemez)In [144]:

model.predict([[51., 3.]])

Out[144]:

array([0.])

Hyperplane (Ayırıcı Sınır) Çizdirelim

In [146]:

# Plot data points and color using their class
color = ['black' if c == 0 else 'lightgrey' for c in y]
plt.scatter(X_std[:,0], X_std[:,1], c=color)

# Create the hyperplane
w = model.coef_[0]
a = -w[0] / w[1]
xx = np.linspace(-2.5, 2.5)
yy = a * xx - (svc.intercept_[0]) / w[1]

# Plot the hyperplane
plt.plot(xx, yy)
plt.axis("off"), plt.show();

Mavi çizgi hyperplane’mizi tanımlıyor

Modeli tanımlama Pipeline Kullanarak da olurdu, ancak grafik çizdirirken sorun yarattığından pipeline kullanmadık.In [ ]:

svm_clf = Pipeline((
("scaler", StandardScaler()),
("linear_svc", LinearSVC(C=1, loss="hinge")),
))
model = svm_clf.fit(X, y.ravel()) 
#ravel dikey array'ı yatay hale getirir. Mecburen böyle Pipeline kabul etmiyor yoksa

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s