Makine Öğrenimi Sınıflandırma Örneği

Merhabalar, bu yazımda makine öğrenmesiyle göğüs kanseri tahmin çalışmasını yapmak istiyorum. Bir makine öğrenimi modeli eğitirken temel olarak birkaç işlem gerçekleştirmemiz gerekiyor. Bunun yanı sıra tek bir sınıflandırma yöntemi yerine birkaç tanesiyle işlem yapacağım. Kodu daha sonra kullanabilirsiniz.

Adım 1: Verisetini hazırlama

Orijinal datayı bu linkten indirebilirsiniz yada kaggle.com üzerinden bu linkten indirebilirsiniz. Ben kaggle’dan aldığım dosyayla işlem yapacağım.

Adım 2: Verileri yüklemek

Pandas kütüphanesini kullanarak veriler değişkenine verisetini yüklüyorum, ardından eğitim ve sınıflandırma için kullanacağım verilerimi x ve y değişkenlerine atıyorum.

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
# kanser teşhisi sınıflandırma örneği

# veri yüklüyorum
veriler = pd.read_csv("cancer.csv")
x = veriler.iloc[:,2:31].values
y = veriler.iloc[:,1].values

Değişkene verimizi yüklediğimizde verisetinin boyutunun 569 satır 33 sütundan oluştuğunu görebilirsiniz. veriler.head(5) diyerek yüklediğiniz verinizi gözden geçirebilirsiniz. Teşhis verisini yani ‘diagnosis’ değerlerini y değişkenine atadım, modelimi eğitmek için kullanacağım sütunları da x değişkenine atadım.

Adım 3: Ön işleme

Sınıflandırmak istediğimiz veriler M ve B harflerinden oluşmaktadır(kötü huylu / iyi huylu), yani bir string ifadesidir. Sınıflandırma yapabilmek için string ifadelerini 0 ve 1 şeklinde ikili değişkenlere çevirmemiz gerekiyor. Bunu da label encoder’la yapıp tekrar değişkene atayalım. Daha sonra verilerimizi eğitim ve test verisi diye ayıralım.

# label encoder uyguluyorum
from sklearn.preprocessing import LabelEncoder
le =  LabelEncoder()
y = le.fit_transform(y)


# eğitim - test için bölünmesi
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=.25,random_state=0)

Adım 4: Sınıflandırma modeli seçimi

Burada birden fazla model kullanıp karmaşıklık matrislerini gözden geçireceğim. Karmaşıklık matrisinde asal köşegendekiler doğru sınıflandırmanın sayısını ve ters köşegendekiler yanlış sınıflandırmanın sayısını belirtmektedir. Sayılara bakarak modelin veriseti üzerindeki başarısını değerlendirebiliriz. Burada KNN, SVM, Naive Bayes, Karar Ağacı ve Rastgele Orman sınıflayıcılarını kütüphanemizden import ederek kullanalım. Modelinizin tahmin başarısını iyileştirmek için parametrelerle oynayabilirsiniz.

İlk olarak logistic regression kullanarak eğittikten sonra sınıflandırma sonuçlarını görmemiz açısından bastırdım.

Daha sonra çıkan sonuçları Tf  Fp Tn Fn değerlerini görmek ve modelin kaç adet doğru/yanlış sınıflandırma yaptığını görmek açısından karmaşıklık matrisi oluşturdum ve her modelden sonra bunu kullandım. Ve bunu her modelden sonra yaptım. Diyagonelde çıkan sayıların toplamı doğru sınıflandırılmış tahmin sayısı; ters diyagonaldekilerin toplamı da yanlış sınıflandırılmış olanların sayısıdır.

[TP  FP]

[FN  TN]

from sklearn.linear_model import LogisticRegression
logr = LogisticRegression(random_state=0)
logr.fit(X_train, y_train)

y_pred = logr.predict(X_test)
print(y_pred)
print(y_test.T)

# Tf Fp Tn Fn değerleri
# Diyagonelde çıkan sayıların toplamı doğru sınıflandırılmış
# tahmin sayısını verir
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)
print(cm)


# KNN algoritması uygulamak istiyorum
from sklearn.neighbors import KNeighborsClassifier

knn = KNeighborsClassifier(n_neighbors=5, metric='minkowski')
knn.fit(X_train,y_train)

y_pred = knn.predict(X_test)
cm = confusion_matrix(y_test, y_pred)
print(cm)


# Support Vector Classifier uygulamak istiyorum
from sklearn.svm import SVC

svc = SVC(kernel='rbf')
svc.fit(X_train, y_train)

y_pred = svc.predict(X_test)
cm = confusion_matrix(y_test, y_pred)
print('SVC confusion matrix: ')
print(cm)



# Naive Bayes uygulamak istiyorum
from sklearn.naive_bayes import GaussianNB

gnb = GaussianNB()
gnb.fit(X_train, y_train)

y_pred = gnb.predict(X_test)
cm = confusion_matrix(y_test, y_pred)
print('GNB confusion matrix: ')
print(cm)



# Decision Tree kullanmak istiyorum
from sklearn.tree import DecisionTreeClassifier

dtc = DecisionTreeClassifier(criterion='entropy')
dtc.fit(X_train, y_train)

y_pred = dtc.predict(X_test)
cm = confusion_matrix(y_test, y_pred)
print('DTC confusion matrix: ')
print(cm)

# Random Forest kullanmak istiyorum
from sklearn.ensemble import RandomForestClassifier
rfc = RandomForestClassifier(n_estimators=15, criterion='entropy')
rfc.fit(X_train, y_train)

y_pred = rfc.predict(X_test)
cm = confusion_matrix(y_test, y_pred)
print('RFC confusion matrix: ')
print(cm)