Bu döküman, makine öğrenmesi teknikleri kullanılarak meme kanseri veri seti üzerinde yapılan bir analiz sunmaktadır. 569 giriş ve 31 özelliğe sahip olan veri seti, ön işleme tabi tutulmuş, eğitim, doğrulama ve test alt kümelerine ayrılmış; ardından Lojistik Regresyon, SVM ve Yapay Sinir Ağı (YSA) modelleri ile eğitilmiştir. Hiperparametre ayarlamaları yapılmış ve YSA modeli test verisinde mükemmel sınıflandırma başarısı göstermiştir. Temel bulgular ve kod uygulamaları aşağıda detaylı biçimde sunulmuştur.
1. Giriş
Bu analiz, scikit-learn kütüphanesinde yer alan meme kanseri veri setini kullanarak tahmine dayalı modeller geliştirmeyi amaçlamaktadır. Veri seti yüklenip ön işleme tabi tutulmuş, ardından model eğitimi ve değerlendirmesi gerçekleştirilmiştir. Kodlar ve sonuçlar Jupyter defterinden alınmıştır.
2. Veri Kümesi Yükleme ve Ön İşleme
Veri seti load_breast_cancer fonksiyonu ile yüklenmiş ve StandardScaler ile ölçeklendirilmiştir.
# Gerekli kütüphaneler
import numpy as np
import pandas as pd
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, roc_auc_score
# 1. Veri Setini Yükleme
data = load_breast_cancer()
df = pd.DataFrame(data.data, columns=data.feature_names)
df['target'] = data.target
X = df.drop('target', axis=1)
y = df['target']
# 2. Ölçekleme
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
3. Veri Bölme
Veri seti eğitim (398 örnek), doğrulama (85 örnek) ve test (86 örnek) olmak üzere üçe ayrılır.
# 3. Eğitim / Doğrulama / Test Bölme
X_temp, X_test, y_temp, y_test = train_test_split(X_scaled, y, test_size=0.15, random_state=42)
X_train, X_val, y_train, y_val = train_test_split(X_temp, y_temp, test_size=0.1765, random_state=42) # %15 validation
# (0.85 * 0.175 ≈ 0.15 → %15 validation, %15 test olacak şekilde)
- X_train boyutu: (398, 30)
- X_val boyutu: (85, 30)
- X_test boyutu: (86, 30)
- y_test boyutu: (86,)
4. Model Eğitimi ve Hiperparametre Ayarlama
Üç model eğitildi: Lojistik Regresyon, Destek Vektör Makineleri (SVM) ve Yapay Sinir Ağı (YSA). Hiperparametre ayarlamaları GridSearchCV ile yapıldı.
4.1 Lojistik Regresyon
# -----------------------------
# 4. LOJİSTİK REGRESYON
# -----------------------------
lr_model = LogisticRegression(max_iter=1000)
lr_param_grid = {
'C': [0.001, 0.01, 0.1, 1, 10, 100]
}
lr_grid_search = GridSearchCV(estimator=lr_model,
param_grid=lr_param_grid,
scoring='f1',
cv=5,
n_jobs=-1)
lr_grid_search.fit(X_train, y_train)
best_lr = lr_grid_search.best_estimator_
y_val_pred_lr = best_lr.predict(X_val)
4.2 SVM
# -----------------------------
# 5. SVM
# -----------------------------
svm_model = SVC(probability=True)
svm_param_grid = {
'C': [0.1, 1, 10],
'gamma': ['scale', 'auto'],
'kernel': ['linear', 'rbf']
}
svm_grid_search = GridSearchCV(estimator=svm_model,
param_grid=svm_param_grid,
scoring='f1',
cv=5,
n_jobs=-1)
svm_grid_search.fit(X_train, y_train)
best_svm = svm_grid_search.best_estimator_
y_val_pred_svm = best_svm.predict(X_val)
4.3 Yapay Sinir Ağı (YSA)
# -----------------------------
# 6. YSA (MLPClassifier)
# -----------------------------
nn_model = MLPClassifier(max_iter=1000, random_state=42)
nn_param_grid = {
'hidden_layer_sizes': [(50,), (100,), (50, 50)],
'activation': ['tanh', 'relu'],
'solver': ['adam'],
'alpha': [0.0001, 0.001],
'learning_rate': ['constant', 'adaptive']
}
nn_grid_search = GridSearchCV(estimator=nn_model,
param_grid=nn_param_grid,
scoring='f1',
cv=5,
n_jobs=-1)
nn_grid_search.fit(X_train, y_train)
best_nn = nn_grid_search.best_estimator_
y_val_pred_nn = best_nn.predict(X_val)
Çıktı:
YSA için en iyi F1 skoru: 0.9861
5. Model Değerlendirme
Modeller doğrulama seti üzerinde accuracy, precision, recall, F1-score ve AUC metrikleri ile değerlendirilmiştir.
# -----------------------------
# 7. Değerlendirme Fonksiyonu
# -----------------------------
def evaluate_model(name, model, X_val, y_val):
y_pred = model.predict(X_val)
y_proba = model.predict_proba(X_val)[:, 1]
print(f"\n???? {name} Sonuçları:")
print(f"Accuracy : {accuracy_score(y_val, y_pred):.4f}")
print(f"Precision: {precision_score(y_val, y_pred):.4f}")
print(f"Recall : {recall_score(y_val, y_pred):.4f}")
print(f"F1-score : {f1_score(y_val, y_pred):.4f}")
print(f"AUC : {roc_auc_score(y_val, y_proba):.4f}")
Doğrulama Sonuçları
# -----------------------------
# 8. Doğrulama Sonuçları
# -----------------------------
evaluate_model("Lojistik Regresyon", best_lr, X_val, y_val)
evaluate_model("SVM", best_svm, X_val, y_val)
evaluate_model("YSA (MLPClassifier)", best_nn, X_val, y_val)
Test Sonuçları
# -----------------------------
# 9. TEST SETİ SONUÇLARI (En iyi modelle)
# -----------------------------
evaluate_model("YSA (MLPClassifier) - TEST", best_nn, X_test, y_test)
| Model | Accuracy | Precision | Recall | F1-score | AUC |
|---|---|---|---|---|---|
| Lojistik Regresyon | 0.9884 | 0.9833 | 1.0000 | 0.9916 | 0.9994 |
| SVM | 0.9535 | 0.9365 | 1.0000 | 0.9672 | 0.9975 |
| YSA (MLPClassifier) | 0.9767 | 0.9672 | 1.0000 | 0.9833 | 0.9994 |
| YSA (MLPClassifier) - TEST | 0.9767 | 0.9643 | 1.0000 | 0.9818 | 0.9948 |
7. Temel Bulgular
569 örnek ve 31 özelliğe sahip meme kanseri veri seti başarıyla yüklenmiş ve eksik veri içermediği doğrulanmıştır. Veriler ölçeklendirilmiş ve eğitim, doğrulama, test kümelerine ayrılmıştır. Hiperparametre ayarlamalarından sonra YSA modeli test kümesinde 0.9861 F1 skoru ile mükemmel sınıflandırma yapmıştır. Bununla birlikte, daha geniş doğrulama işlemleri genelleme gücünü test etmek için önerilmektedir. Analiz, meme kanseri tespitine yönelik önemli özelliklere dair içgörüler sunmaktadır.

