Takip et

Python ve Scikit-learn ile Makine Öğrenimi Sınıflandırıcısı Nasıl Oluşturulur?

Python ve Scikit-learn ile Makine Öğrenimi Sınıflandırıcısı Nasıl Oluşturulur? Giriş Makine öğrenimi, günümüz teknolojisinin en hızl

Python ve Scikit-learn ile Makine Öğrenimi Sınıflandırıcısı Nasıl Oluşturulur?

Giriş

Makine öğrenimi, günümüz teknolojisinin en hızlı gelişen ve en dönüştürücü alanlarından biridir. Verilerden anlamlı bilgiler çıkararak gelecekteki olayları tahmin etme veya kararlar alma yeteneği, sağlık, finans, pazarlama ve daha birçok sektörde devrim yaratmıştır. Bu alanın temel taşlarından biri de “sınıflandırma”dır. Sınıflandırma, bir veri noktasının önceden tanımlanmış kategorilerden (sınıflardan) hangisine ait olduğunu tahmin etme sürecidir. Örneğin, bir e-postanın spam olup olmadığını, bir müşterinin ürünü satın alıp almayacağını veya bir tümörün iyi huylu mu kötü huylu mu olduğunu belirlemek sınıflandırma problemlerine örnek teşkil eder.

Python, makine öğrenimi için en popüler dillerden biridir ve bu popülerliğin önemli bir nedeni, zengin kütüphane ekosistemidir. Bu kütüphaneler arasında Scikit-learn (sklearn), basit ve tutarlı bir API ile çeşitli makine öğrenimi algoritmalarını sunarak sınıflandırma modelleri oluşturmayı ve değerlendirmeyi son derece kolaylaştırmaktadır. Bu makale, Python ve Scikit-learn kullanarak sıfırdan bir makine öğrenimi sınıflandırıcısı inşa etme sürecini adım adım açıklamayı hedeflemektedir. Veri hazırlığından model seçimine, eğitimden değerlendirmeye ve optimizasyona kadar tüm süreçleri detaylı bir şekilde inceleyerek, okuyuculara sağlam bir temel sunmayı amaçlamaktayız.

Makine Öğrenimi Sınıflandırmasına Genel Bakış

Sınıflandırma Nedir?

Sınıflandırma, denetimli öğrenme paradigmalarından biridir. Denetimli öğrenmede, modelin öğrenmesi için hem girdi özellikleri (bağımsız değişkenler) hem de karşılık gelen çıktı etiketleri (bağımlı değişkenler) içeren etiketli bir veri kümesi kullanılır. Sınıflandırma probleminde, çıktı değişkeni kategoriktir; yani sınırlı sayıda, ayrık değer alır. Örneğin, “evet/hayır”, “kırmızı/mavi/yeşil”, “kategori A/kategori B/kategori C” gibi. Modelin amacı, yeni, etiketlenmemiş veri noktaları verildiğinde, bu noktaların hangi kategoriye ait olduğunu doğru bir şekilde tahmin etmektir.

Sınıflandırma Algoritmaları

Makine öğreniminde birçok farklı sınıflandırma algoritması bulunmaktadır ve her birinin kendine özgü avantajları ve dezavantajları vardır. En yaygın kullanılanlardan bazıları şunlardır:
* Lojistik Regresyon (Logistic Regression): Adı regresyon olsa da, ikili sınıflandırma problemleri için yaygın olarak kullanılan doğrusal bir modeldir. Olasılıkları tahmin eder ve bir eşik değeri kullanarak sınıflandırma yapar.
* Destek Vektör Makineleri (Support Vector Machines – SVM): Veri noktaları arasında en geniş marjini sağlayan bir hiperdüzlem bularak sınıflandırma yapar. Hem doğrusal hem de doğrusal olmayan sınıflandırma için çekirdek (kernel) hileleri ile kullanılabilir.
* Karar Ağaçları (Decision Trees): Veri kümesini bir dizi kurala göre bölerek sınıflandırma yapar. Yorumlanabilirliği yüksek modellerdir.
* Rastgele Orman (Random Forest): Birden fazla karar ağacının bir araya gelmesiyle oluşan bir topluluk öğrenme (ensemble learning) algoritmasıdır. Her bir ağaç farklı bir veri alt kümesi üzerinde eğitilir ve nihai tahmin, ağaçların çoğunluk oyu ile belirlenir. Bu, aşırı uyumu azaltır ve daha sağlam sonuçlar verir.
* K-En Yakın Komşu (K-Nearest Neighbors – KNN): Bir veri noktasını, eğitim veri kümesindeki kendisine en yakın K adet noktanın çoğunluk sınıfına göre sınıflandırır. Ezberci bir algoritmadır ve hesaplama yoğunluğu yüksek olabilir.
* Genişletme (Gradient Boosting) Algoritmaları (örn. XGBoost, LightGBM, CatBoost): Zayıf öğrenicileri (genellikle karar ağaçları) bir araya getirerek güçlü bir model oluşturan topluluk öğrenme yöntemleridir. Genellikle yüksek performans gösterirler.

Denetimli Öğrenme ve Etiketli Veri

Sınıflandırma, denetimli öğrenmenin bir alt kümesidir. Bu, modelin “gözetim altında” öğrendiği anlamına gelir. Gözetim, her bir girdi örneği için doğru çıktının (etiketin) mevcut olduğu etiketli veri kümeleri aracılığıyla sağlanır. Model, bu etiketli verileri kullanarak girdi özellikleri ile çıktı etiketleri arasındaki ilişkiyi öğrenir. Eğitim sırasında model, tahminlerini gerçek etiketlerle karşılaştırır ve hatalarını minimize etmek için ağırlıklarını ve yanlılıklarını (bias) ayarlar. Etiketli veri olmaksızın sınıflandırma yapmak mümkün değildir; bu nedenle, kaliteli ve yeterli miktarda etiketli veri, başarılı bir sınıflandırma modelinin temelini oluşturur.

Scikit-learn’e Giriş

Scikit-learn Neden Tercih Edilmeli?

Scikit-learn, Python için açık kaynaklı, ticari olarak kullanılabilen BSD lisanslı bir makine öğrenimi kütüphanesidir. Makine öğrenimi uzmanları ve veri bilimcileri arasında bu kadar popüler olmasının birçok nedeni vardır:
* Kapsamlı Algoritma Koleksiyonu: Sınıflandırma, regresyon, kümeleme, boyut indirgeme, model seçimi ve ön işleme gibi birçok makine öğrenimi görevini kapsayan geniş bir algoritma yelpazesine sahiptir.
* Tutarlı API: Tüm algoritmalar benzer bir API (Application Programming Interface) yapısını takip eder. Bu, bir algoritmadan diğerine geçişi kolaylaştırır ve öğrenme eğrisini düşürür. Temel olarak, tüm modellerin fit() ve predict() metodları bulunur.
* Kullanım Kolaylığı: İyi belgelenmiş, anlaşılır ve kullanımı kolaydır. Yeni başlayanlar için harika bir başlangıç noktasıdır.
* Performans: Çoğu algoritma, C veya Cython’da optimize edilmiş çekirdek kodları kullanır, bu da iyi performans sağlar.
* Entegrasyon: NumPy, SciPy ve Matplotlib gibi diğer popüler Python kütüphaneleriyle sorunsuz bir şekilde entegre olur.

Kurulum

Scikit-learn’i kurmak oldukça basittir. Python’un yüklü olduğu bir ortamda, genellikle pip veya conda paket yöneticileri kullanılarak yapılabilir:
* Pip ile kurulum: pip install scikit-learn
* Conda ile kurulum (Anaconda veya Miniconda kullanıyorsanız): conda install scikit-learn
Kurulumdan sonra, kütüphaneyi Python kodunuzda import sklearn şeklinde çağırarak kullanmaya başlayabilirsiniz.

Temel Yapı Taşları: Estimators ve Transformers

Scikit-learn’in tutarlı API’sinin arkasında iki ana kavram yatar:
* Estimators (Tahminciler): Bir modelin veya algoritmanın kendisidir. fit(X, y) metodu ile eğitim verileri üzerinde öğrenir ve predict(X) metodu ile yeni veriler üzerinde tahminler yapar. Sınıflandırıcılar (örneğin LogisticRegression, RandomForestClassifier) ve regresörler (örneğin LinearRegression, SVR) birer tahmincidir.
* Transformers (Dönüştürücüler): Veri ön işleme ve özellik mühendisliği için kullanılırlar. fit(X, y) metodu ile veriler üzerinde öğrenirler (örneğin, bir ölçekleyicinin ortalamayı ve standart sapmayı öğrenmesi) ve transform(X) metodu ile verileri dönüştürürler. fit_transform(X, y) metodu ise hem öğrenme hem de dönüştürme işlemini tek adımda yapar. Örneğin, StandardScaler, MinMaxScaler, OneHotEncoder birer dönüştürücüdür.

Bu iki yapı taşı, Scikit-learn’de makine öğrenimi iş akışlarını tasarlarken büyük esneklik ve modülerlik sağlar.

Uygulamalı Örnek: Bir Sınıflandırıcı Oluşturma Adımları

Şimdi, Python ve Scikit-learn kullanarak bir sınıflandırma modeli oluşturmanın pratik adımlarını detaylı bir şekilde inceleyelim. Bu örnekte, popüler “Iris” çiçek veri kümesini kullanacağız. Bu veri kümesi, üç farklı Iris çiçeği türünü (setosa, versicolor, virginica) dört özellik (çanak yaprağı uzunluğu, çanak yaprağı genişliği, taç yaprağı uzunluğu, taç yaprağı genişliği) üzerinden sınıflandırmayı amaçlar.

Adım 1: Veri Kümesi Seçimi ve Hazırlığı

Bir makine öğrenimi projesinin ilk ve belki de en kritik adımı, uygun bir veri kümesi seçmek ve onu modele hazır hale getirmektir.

Veri Kümesi Seçimi

Iris veri kümesi, Scikit-learn’de yerleşik olarak bulunur ve sınıflandırma problemlerini öğrenmek için mükemmel bir başlangıç noktasıdır. Basit, temiz ve iyi anlaşılmış bir veri kümesidir.

Veri Yükleme

Veri kümesini Scikit-learn’den doğrudan yükleyebiliriz. Genellikle veri analizleri için Pandas kütüphanesi de kullanılır.

import pandas as pd
from sklearn.datasets import load_iris

Iris veri kümesini yükle

iris = load_iris() X = iris.data # Özellikler y = iris.target # Hedef değişken (sınıflar)

Özellik isimleri ve hedef sınıf isimleri

feature_names = iris.feature_names target_names = iris.target_names

Veriyi bir DataFrame'e dönüştürerek daha kolay inceleyebiliriz

df = pd.DataFrame(X, columns=feature_names) df['target'] = y df['target_name'] = df['target'].apply(lambda x: target_names[x])

Bu kod parçacığı, Iris veri kümesini yükler ve özellikler (X) ile hedef değişkeni (y) ayırır. Ardından, veriyi bir Pandas DataFrame’ine dönüştürerek daha kolay incelenmesini sağlar.

Veriyi Anlama ve Keşfetme (EDA – Exploratory Data Analysis)

Veri kümesini yükledikten sonra, yapısını, istatistiksel özetlerini ve dağılımlarını anlamak çok önemlidir.
* df.head(): Veri kümesinin ilk birkaç satırını gösterir.
* df.info(): Sütun tipleri, eksik değerler ve bellek kullanımı hakkında bilgi verir.
* df.describe(): Sayısal sütunların istatistiksel özetini (ortalama, standart sapma, min, max vb.) sunar.
* df['target_name'].value_counts(): Her bir sınıfın kaçar adet örneği olduğunu gösterir (sınıf dengesizliğini kontrol etmek için önemlidir).
* Görselleştirmeler (Matplotlib, Seaborn ile): Özellik dağılımlarını, özellikler arası ilişkileri ve özelliklerin hedef sınıfla ilişkisini anlamak için histogramlar, saçılım grafikleri ve kutu grafikleri çizilebilir. Örneğin, sns.pairplot(df, hue='target_name') tüm özellikler arası ilişkileri ve sınıf ayrımını görselleştirmek için güçlü bir araçtır.

Eksik Veri İşleme

Gerçek dünya veri kümelerinde sıklıkla eksik değerler bulunur. Iris veri kümesi temiz olduğu için eksik değeri yoktur, ancak genel olarak:
* Eksik değerleri içeren satırları veya sütunları silmek (df.dropna()).
* Eksik değerleri ortalama, medyan veya mod gibi istatistiksel değerlerle doldurmak (df.fillna()).
* Makine öğrenimi algoritmaları (örn. SimpleImputer) kullanarak eksik değerleri tahmin etmek.

Kategorik Veri İşleme

Eğer veri kümenizde sayısal olmayan kategorik özellikler olsaydı (örneğin, “renk”: “kırmızı”, “mavi”, “yeşil”), bunları sayısal formatlara dönüştürmeniz gerekirdi.
* Label Encoding: Kategorik değerleri ardışık sayılarla kodlar (örn. kırmızı=0, mavi=1, yeşil=2). Sıralı kategoriler için uygun olabilir, ancak sıralama olmayan kategorilerde modelin yanlış bir sıra algılamasına neden olabilir.
* One-Hot Encoding: Her kategorik değer için yeni bir ikili (0 veya 1) sütun oluşturur. Bu, sıralama ilişkisi olmayan kategorik veriler için daha güvenlidir. Scikit-learn’deki OneHotEncoder veya Pandas’taki pd.get_dummies() kullanılabilir. Iris veri kümesinde tüm özellikler sayısal olduğundan bu adıma gerek yoktur.

Özellik Ölçeklendirme

Birçok makine öğrenimi algoritması (özellikle mesafe tabanlı algoritmalar gibi KNN, SVM veya gradyan iniş kullananlar gibi Lojistik Regresyon), farklı ölçeklerdeki özelliklerden olumsuz etkilenebilir. Özellik ölçeklendirme, tüm özelliklerin benzer bir aralığa getirilmesini sağlar.
* StandardScaler: Özellikleri ortalama 0 ve standart sapma 1 olacak şekilde ölçeklendirir (standart normal dağılım).
* MinMaxScaler: Özellikleri belirli bir aralığa (genellikle 0 ile 1 arasına) ölçeklendirir.

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
X_scaled = scaler.fit_transform(X) # X'i ölçeklendir

Bu adım, modelin daha hızlı ve daha kararlı bir şekilde yakınsamasını sağlayabilir.

Adım 2: Veriyi Eğitim ve Test Kümelerine Ayırma

Modelin genelleme yeteneğini değerlendirmek için veri kümesini eğitim (training) ve test (testing) kümelerine ayırmak zorunludur. Model eğitim kümesi üzerinde öğrenir ve test kümesi üzerinde değerlendirilir. Test kümesi, modelin daha önce görmediği veriler üzerindeki performansını ölçmek için kullanılır.

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.3, random_state=42, stratify=y)

* test_size=0.3: Verinin %30’unun test kümesi için ayrıldığını belirtir.
* random_state=42: Rastgele bölme işleminin her seferinde aynı sonuçları vermesini sağlar, bu da tekrarlanabilirliği artırır.
* stratify=y: Özellikle dengesiz sınıf dağılımına sahip veri kümelerinde önemlidir. Eğitim ve test kümelerinde hedef sınıfların oranının orijinal veri kümesindeki oranla aynı kalmasını sağlar. Iris veri kümesinde sınıflar dengeli olsa da, iyi bir pratik olarak kullanılması önerilir.

Adım 3: Model Seçimi

Hangi sınıflandırma algoritmasının kullanılacağı, veri kümesinin özelliklerine, problem türüne ve performans gereksinimlerine bağlıdır. Başlangıçta, farklı algoritmaları denemek iyi bir yaklaşımdır. Bu örnekte, popüler ve güçlü bir algoritma olan Rastgele Orman Sınıflandırıcısını (RandomForestClassifier) kullanacağız.

from sklearn.ensemble import RandomForestClassifier

Bir Rastgele Orman Sınıflandırıcısı modeli oluştur

model = RandomForestClassifier(random_state=42)

random_state parametresi, modelin içindeki rastgelelik unsurlarının tekrarlanabilir olmasını sağlar.

Adım 4: Modeli Eğitme

Modeli eğitmek, seçilen algoritmanın eğitim veri kümesindeki örüntüleri öğrenmesini sağlamaktır. Scikit-learn’de bu, fit() metodu ile yapılır.

# Modeli eğitim verileri üzerinde eğit
model.fit(X_train, y_train)

Bu adımda, RandomForestClassifier algoritması, X_train özelliklerini kullanarak y_train etiketlerini tahmin etmeyi öğrenir.

Adım 5: Tahmin Yapma

Model eğitildikten sonra, test kümesindeki veya yeni, daha önce görülmemiş verilerdeki etiketleri tahmin etmek için kullanılabilir. Bu, predict() metodu ile gerçekleştirilir.

# Eğitilmiş model ile test verileri üzerinde tahmin yap
y_pred = model.predict(X_test)

y_pred değişkeni, modelin X_test üzerindeki tahminlerini içeren bir dizidir.

Adım 6: Model Değerlendirme

Modelin ne kadar iyi performans gösterdiğini anlamak için tahminlerin gerçek etiketlerle karşılaştırılması gerekir. Sınıflandırma modellerini değerlendirmek için çeşitli metrikler kullanılır.

Doğruluk (Accuracy)

En basit ve yaygın metriklerden biridir. Doğru tahmin edilen örneklerin toplam örnek sayısına oranıdır.

from sklearn.metrics import accuracy_score

accuracy = accuracy_score(y_test, y_pred)
print(f"Model Doğruluğu: {accuracy:.2f}")

Doğruluk, dengeli veri kümeleri için iyi bir gösterge olabilir, ancak dengesiz veri kümelerinde yanıltıcı olabilir.

Karmaşıklık Matrisi (Confusion Matrix)

Modelin hangi sınıfları doğru, hangi sınıfları yanlış tahmin ettiğini gösteren bir tablodur. İkili sınıflandırma için:
* True Positive (TP): Gerçek pozitif, tahmin pozitif.
* True Negative (TN): Gerçek negatif, tahmin negatif.
* False Positive (FP): Gerçek negatif, tahmin pozitif (Tip I hata).
* False Negative (FN): Gerçek pozitif, tahmin negatif (Tip II hata).
Çok sınıflı sınıflandırmada, matrisin her bir satırı gerçek sınıfı, her bir sütunu ise tahmin edilen sınıfı temsil eder.

from sklearn.metrics import confusion_matrix
import seaborn as sns
import matplotlib.pyplot as plt

cm = confusion_matrix(y_test, y_pred)
print("Karmaşıklık Matrisi:\n", cm)

Görselleştirme

plt.figure(figsize=(8, 6)) sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=target_names, yticklabels=target_names) plt.xlabel('Tahmin Edilen Sınıf') plt.ylabel('Gerçek Sınıf') plt.title('Karmaşıklık Matrisi') plt.show()
Hassasiyet (Precision), Duyarlılık (Recall) ve F1-Skor (F1-Score)

Bu metrikler, özellikle dengesiz veri kümeleri veya belirli hata türlerinin (FP veya FN) daha maliyetli olduğu durumlarda daha bilgilendirici olabilir.
* Hassasiyet (Precision): Pozitif olarak tahmin edilen örnekler arasında gerçekten pozitif olanların oranıdır (TP / (TP + FP)). Yanlış pozitiflerin maliyetli olduğu durumlarda önemlidir (örn. spam algılama).
* Duyarlılık (Recall / Sensitivity): Gerçekten pozitif olan tüm örnekler arasında doğru tahmin edilen pozitiflerin oranıdır (TP / (TP + FN)). Yanlış negatiflerin maliyetli olduğu durumlarda önemlidir (örn. hastalık teşhisi).
F1-Skor: Hassasiyet ve duyarlılığın harmonik ortalamasıdır (2 (Precision * Recall) / (Precision + Recall)). Her iki metriğin de önemli olduğu durumlarda iyi bir dengeleyici metrik sunar.

Scikit-learn, bu metrikleri ve daha fazlasını içeren kapsamlı bir sınıflandırma raporu sunar:

from sklearn.metrics import classification_report

report = classification_report(y_test, y_pred, target_names=target_names)
print("Sınıflandırma Raporu:\n", report)
ROC Eğrisi ve AUC (Area Under the Curve)

ROC (Receiver Operating Characteristic) eğrisi ve AUC, ikili sınıflandırma modellerinin performansını farklı sınıflandırma eşiklerinde değerlendirmek için kullanılır. ROC eğrisi, True Positive Rate (Duyarlılık) ile False Positive Rate (1 – Özgüllük) arasındaki ilişkiyi gösterir. AUC değeri, eğrinin altında kalan alanı temsil eder; 1’e yakın bir AUC, modelin sınıfları çok iyi ayırdığını gösterir. Çok sınıflı sınıflandırma için genellikle her sınıf için ayrı ayrı ROC/AUC hesaplanır (one-vs-rest yaklaşımıyla).

Adım 7: Hiperparametre Ayarlama ve Model Optimizasyonu

Makine öğrenimi modellerinin performansı, modelin mimarisini ve öğrenme sürecini kontrol eden “hiperparametreler” tarafından büyük ölçüde etkilenebilir. Örneğin, RandomForestClassifier için n_estimators (ağaç sayısı) veya max_depth (her ağacın maksimum derinliği) gibi hiperparametreler vardır. En iyi hiperparametre kombinasyonunu bulmak için “hiperparametre ayarlama” (hyperparameter tuning) teknikleri kullanılır.

Grid Search (Izgara Araması)

GridSearchCV, belirtilen hiperparametre değerlerinin tüm olası kombinasyonlarını sistematik olarak dener ve çapraz doğrulama (cross-validation) kullanarak en iyi performansı veren kombinasyonu bulur.

from sklearn.model_selection import GridSearchCV

Ayarlanacak hiperparametreler ve değer aralıkları

param_grid = { 'n_estimators': [50, 100, 200], 'max_depth': [None, 10, 20, 30], 'min_samples_split': [2, 5, 10] }

GridSearchCV nesnesini oluştur

grid_search = GridSearchCV(estimator=RandomForestClassifier(random_state=42), param_grid=param_grid, cv=5, # 5 katlı çapraz doğrulama scoring='accuracy', # Değerlendirme metriği n_jobs=-1) # Tüm çekirdekleri kullan

Grid Search'ü eğitim verileri üzerinde çalıştır

grid_search.fit(X_train, y_train)

En iyi parametreleri ve skoru yazdır

print(f"En iyi parametreler: {grid_search.best_params_}") print(f"En iyi çapraz doğrulama skoru: {grid_search.best_score_:.2f}")

En iyi modeli al

best_model = grid_search.best_estimator_

Test kümesi üzerinde en iyi modelin performansını değerlendir

y_pred_best = best_model.predict(X_test) accuracy_best = accuracy_score(y_test, y_pred_best) print(f"Ayarlanmış Model Doğruluğu (Test Kümesi): {accuracy_best:.2f}")
Random Search (Rastgele Arama)

RandomizedSearchCV, GridSearchCV‘ye benzer, ancak tüm kombinasyonları denemek yerine, belirtilen dağılımlardan rastgele örneklenen belirli sayıda kombinasyonu dener. Geniş hiperparametre uzaylarında daha verimli olabilir.

Çapraz Doğrulama (Cross-validation)

Çapraz doğrulama, modelin genelleme yeteneğini daha sağlam bir şekilde tahmin etmek için kullanılır. Veri kümesini birden fazla eğitim/doğrulama katına böler ve her katta modeli farklı bir alt küme üzerinde eğitip kalan üzerinde değerlendirir. GridSearchCV ve RandomizedSearchCV dahili olarak çapraz doğrulama kullanır.

Pipeline Kullanımı

Scikit-learn Pipeline‘ları, veri ön işleme adımlarını (ölçeklendirme, kategorik kodlama vb.) ve model eğitimini tek bir akışta birleştirmek için güçlü bir araçtır. Bu, kodun daha düzenli olmasını, hataların azalmasını ve özellikle çapraz doğrulama ve hiperparametre ayarlama sırasında veri sızıntısını (data leakage) önlemesini sağlar.

from sklearn.pipeline import Pipeline

Pipeline oluştur

pipeline = Pipeline([ ('scaler', StandardScaler()), # İlk adım: ölçeklendirme ('classifier', RandomForestClassifier(random_state=42)) # İkinci adım: sınıflandırıcı ])

Pipeline'ı eğit

pipeline.fit(X_train, y_train)

Tahmin yap

y_pred_pipeline = pipeline.predict(X_test)

Değerlendir

accuracy_pipeline = accuracy_score(y_test, y_pred_pipeline) print(f"Pipeline ile Model Doğruluğu: {accuracy_pipeline:.2f}")

Pipeline ile hiperparametre ayarlama da yapılabilir

param_grid_pipeline = { 'classifier__n_estimators': [50, 100], 'classifier__max_depth': [None, 10] } grid_search_pipeline = GridSearchCV(pipeline, param_grid_pipeline, cv=5) grid_search_pipeline.fit(X_train, y_train) print(f"Pipeline ile en iyi parametreler: {grid_search_pipeline.best_params_}")

Pipeline kullanımı, özellikle karmaşık ön işleme adımları olan projelerde iş akışını büyük ölçüde basitleştirir.

Gelişmiş Konular ve En İyi Uygulamalar

Dengesiz Veri Kümeleriyle Başa Çıkma

Bir sınıfın diğerlerine göre çok daha az örneğe sahip olduğu veri kümeleri “dengesiz” olarak adlandırılır. Bu durumda, model azınlık sınıfını göz ardı etme eğiliminde olabilir. Çözümler:
* Aşırı Örnekleme (Oversampling): Azınlık sınıfından daha fazla örnek oluşturma (örn. SMOTE – Synthetic Minority Over-sampling Technique).
* Az Örnekleme (Undersampling): Çoğunluk sınıfından örnekleri azaltma.
* Sınıf Ağırlıkları (Class Weights): Model eğitiminde azınlık sınıfına daha yüksek ağırlıklar atama (Scikit-learn sınıflandırıcılarının çoğunda class_weight parametresi bulunur).
* F1-Skor, Duyarlılık, Hassasiyet gibi metrikleri kullanma, doğruluk yerine.

Model Yorumlanabilirliği

Modelin neden belirli bir tahmin yaptığını anlamak, özellikle kritik kararların alındığı alanlarda (sağlık, finans) önemlidir.
* Özellik Önem Dereceleri (Feature Importances): Karar ağacı tabanlı modeller (Rastgele Orman gibi), her bir özelliğin tahmin üzerindeki göreceli önemini gösterir.
* SHAP (SHapley Additive exPlanations) ve LIME (Local Interpretable Model-agnostic Explanations): Bu kütüphaneler, karmaşık modellerin tahminlerini yerel veya genel olarak yorumlamaya yardımcı olur.

Modeli Üretime Alma

Eğitilmiş ve optimize edilmiş bir modelin gerçek dünya uygulamalarında kullanılabilmesi için “üretime alınması” gerekir. Bu, modelin bir API aracılığıyla erişilebilir hale getirilmesi, bulut platformlarına dağıtılması veya bir uygulamaya entegre edilmesi anlamına gelebilir. Scikit-learn modelleri genellikle joblib veya pickle kütüphaneleri kullanılarak kaydedilir ve daha sonra yüklenerek tahminler yapmak için kullanılır.

Sonuç

Bu makalede, Python ve Scikit-learn kullanarak bir makine öğrenimi sınıflandırıcısı oluşturmanın temel adımlarını detaylı bir şekilde inceledik. Veri kümesi seçimi ve hazırlığından, model seçimi, eğitim, değerlendirme ve hiperparametre ayarlamasına kadar tüm süreci ele aldık. Scikit-learn’in tutarlı API yapısı, zengin algoritma kütüphanesi ve güçlü ön işleme araçları sayesinde, bu adımların ne kadar kolay ve etkili bir şekilde gerçekleştirilebileceğini gördük.

Makine öğrenimi yolculuğu, sadece bir modeli eğitmekle bitmez. Sürekli veri toplama, modelin performansını izleme, gerektiğinde yeniden eğitim ve yeni algoritmaları keşfetme gibi süreçleri içerir. Bu makalede sunulan bilgiler, sınıflandırma problemlerine yaklaşımınız için sağlam bir temel oluşturacaktır. Unutmayın ki, başarılı bir makine öğrenimi projesi, sadece teknik bilgiye değil, aynı zamanda problem alanını derinlemesine anlamaya ve iteratif bir yaklaşıma da dayanır. Bu adımları uygulayarak ve farklı veri kümeleri ile deneyler yaparak makine öğrenimi becerilerinizi geliştirmeye devam edebilirsiniz.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Exit mobile version