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)