Scikit-learn: Python ile Makine Öğrenimine Başlangıç Rehberi
Makine öğrenimi (Machine Learning), günümüzün en hızlı gelişen ve en etkili teknoloji alanlarından biridir. Verilerden öğrenerek kararlar alabilen veya tahminlerde bulunabilen sistemler geliştirmeyi amaçlar. Spam e-postaları filtrelemekten, kanser hücrelerini tespit etmeye, borsa tahminleri yapmaktan, otonom araçları yönlendirmeye kadar geniş bir yelpazede uygulamaları bulunur. Python, sadeliği, geniş kütüphane desteği ve güçlü topluluğu sayesinde makine öğrenimi için en popüler dillerden biri haline gelmiştir. Bu ekosistemin kalbinde yer alan kütüphanelerden biri ise Scikit-learn’dir.
Makine Öğrenimi Nedir ve Neden Scikit-learn?
Makine öğrenimi, bilgisayar sistemlerinin açıkça programlanmadan verilerden öğrenmesini sağlayan yapay zeka alanının bir alt dalıdır. Temel olarak, bir algoritma büyük miktarda veri ile beslenir ve bu verilerdeki desenleri ve ilişkileri öğrenerek gelecekteki veriler hakkında tahminler yapma veya kararlar alma yeteneği kazanır. Bu, geleneksel programlamanın aksine, her senaryo için belirli kurallar yazmak yerine, sistemin kendi kendine öğrenmesini sağlar.
Python’ın makine öğrenimi alanındaki popülaritesi, özellikle bilimsel hesaplama ve veri analizi için geliştirilmiş güçlü kütüphanelerinden kaynaklanmaktadır. NumPy, veri üzerinde sayısal işlemler için temel sağlar; Pandas, veri manipülasyonu ve analizi için güçlü araçlar sunar; Matplotlib ve Seaborn ise veri görselleştirme konusunda vazgeçilmezdir. Scikit-learn, bu kütüphanelerin üzerine inşa edilmiş, makine öğrenimi algoritmaları için kapsamlı ve kullanımı kolay bir kütüphanedir.
Scikit-learn (genellikle sklearn olarak adlandırılır), makine öğrenimi modellerini oluşturmak, eğitmek ve değerlendirmek için basit ve tutarlı bir arayüz sunar. Başlangıç seviyesindeki kullanıcılar için ideal olmasının başlıca nedenleri şunlardır:
* Tutarlı API: Tüm algoritmalar benzer bir fit(), predict(), transform() arayüzünü takip eder, bu da farklı modeller arasında geçiş yapmayı kolaylaştırır.
* Geniş Algoritma Yelpazesi: Sınıflandırma, regresyon, kümeleme, boyut azaltma ve model seçimi gibi makine öğrenimi görevleri için yüzlerce algoritma içerir.
* Performans: Çoğu algoritma, verimli NumPy ve SciPy kod tabanları üzerine inşa edilmiştir, bu da iyi performans sağlar.
* Açık Kaynak ve Topluluk Desteği: Geniş bir geliştirici ve kullanıcı topluluğu tarafından desteklenir, sürekli güncellenir ve belgelendirmesi mükemmeldir.
* Eğitim ve Test Veri Setleri: Örnek veri setleri ve veri ön işleme araçları ile birlikte gelir, bu da öğrenmeyi ve deney yapmayı kolaylaştırır.
Bu rehberde, Scikit-learn’ün temel kavramlarını, kurulumunu, ana API’sini ve yaygın makine öğrenimi görevlerinde nasıl kullanılacağını adım adım inceleyeceğiz.
Scikit-learn’ü Kurulumu ve Ortam Ayarları
Scikit-learn’ü kullanmaya başlamadan önce, Python ve gerekli bağımlılıkları sisteminize kurmanız gerekir. En kolay yol, Anaconda veya Miniconda gibi bir Python dağıtımı kullanmaktır. Bu dağıtımlar, Scikit-learn’ün yanı sıra NumPy, SciPy, Pandas ve Matplotlib gibi temel veri bilimi kütüphanelerini önceden yüklenmiş olarak getirir.
Anaconda/Miniconda Kurulumu:
Resmi web sitesinden (anaconda.com veya docs.conda.io/en/latest/miniconda.html) işletim sisteminize uygun sürümü indirip kurun.
Scikit-learn ve Diğer Kütüphanelerin Kurulumu (Conda ile):
Anaconda Prompt (Windows) veya terminal (macOS/Linux) açın ve aşağıdaki komutu çalıştırın:
conda install scikit-learn pandas numpy matplotlib scipy
Bu komut, Scikit-learn ve onun temel bağımlılıklarını kuracaktır.
Scikit-learn ve Diğer Kütüphanelerin Kurulumu (Pip ile):
Eğer sadece Python kuruluysa, pip paket yöneticisini kullanabilirsiniz:
pip install scikit-learn pandas numpy matplotlib scipy
Kurulumun başarılı olup olmadığını kontrol etmek için Python yorumlayıcısını açıp aşağıdaki kodları çalıştırabilirsiniz:
import sklearn
print(sklearn.__version__)
Eğer bir sürüm numarası çıktısı alıyorsanız, kurulum başarılı demektir.
Makine Öğreniminin Temel Kavramları
Scikit-learn’ü etkili bir şekilde kullanmak için, makine öğreniminin bazı temel kavramlarını anlamak önemlidir.
Denetimli Öğrenme (Supervised Learning)
Denetimli öğrenme, hem girdi verileri (özellikler) hem de karşılık gelen çıktı etiketleri (hedefler) ile eğitilen modelleri ifade eder. Model, girdi ile çıktı arasındaki ilişkiyi öğrenir ve yeni, görünmeyen girdiler için doğru çıktıları tahmin etmeye çalışır.
* Sınıflandırma (Classification): Çıktı değişkeninin kategorik olduğu durumlarda kullanılır. Model, bir girdiyi belirli bir sınıfa atar.
Örnekler:* E-postanın spam olup olmadığını belirlemek (spam/değil), bir görüntünün kedi mi köpek mi olduğunu tanımak (kedi/köpek), bir müşterinin ürünü satın alıp almayacağını tahmin etmek (evet/hayır).
Scikit-learn Algoritmaları:* LogisticRegression, KNeighborsClassifier, SVC (Support Vector Classifier), DecisionTreeClassifier, RandomForestClassifier.
* Regresyon (Regression): Çıktı değişkeninin sürekli sayısal bir değer olduğu durumlarda kullanılır. Model, girdi özelliklerine dayanarak sürekli bir değer tahmin eder.
Örnekler:* Ev fiyatlarını tahmin etmek, hisse senedi fiyatlarını tahmin etmek, bir kişinin yaşını tahmin etmek.
Scikit-learn Algoritmaları:* LinearRegression, Ridge, Lasso, SVR (Support Vector Regressor), DecisionTreeRegressor, RandomForestRegressor.
Denetimsiz Öğrenme (Unsupervised Learning)
Denetimsiz öğrenme, yalnızca girdi verileriyle eğitilen modelleri ifade eder. Bu durumda, çıktı etiketleri yoktur. Modelin amacı, verilerdeki gizli yapıları, desenleri veya ilişkileri kendi başına keşfetmektir.
* Kümeleme (Clustering): Veri noktalarını benzerliklerine göre gruplara ayırır. Her grup (küme) içindeki noktalar birbirine benzerken, farklı kümelerdeki noktalar birbirinden farklıdır.
Örnekler:* Müşteri segmentasyonu, genetik veri analizi, sosyal ağ analizi.
Scikit-learn Algoritmları:* KMeans, DBSCAN, AgglomerativeClustering.
* Boyut Azaltma (Dimensionality Reduction): Yüksek boyutlu verileri (çok sayıda özellik içeren) daha az boyutlu bir temsiline dönüştürürken, verinin önemli bilgilerini korumaya çalışır. Bu, görselleştirmeyi kolaylaştırır, depolama alanını azaltır ve bazı algoritmaların performansını artırabilir.
Örnekler:* Görselleştirme için verileri 2D veya 3D’ye indirgeme, gürültüyü azaltma.
Scikit-learn Algoritmaları:* PCA (Principal Component Analysis), TSNE (t-Distributed Stochastic Neighbor Embedding).
Diğer Temel Kavramlar
* Özellikler (Features): Bir veri noktasını tanımlayan girdi değişkenleri. Genellikle X matrisi olarak gösterilir.
* Hedef (Target): Modelin tahmin etmeye çalıştığı çıktı değişkeni. Genellikle y vektörü olarak gösterilir.
* Eğitim Verisi (Training Data): Modelin öğrenmek için kullandığı veri seti.
* Test Verisi (Test Data): Modelin performansını değerlendirmek için kullanılan, eğitim sürecinde hiç görmediği veri seti.
* Aşırı Uyum (Overfitting): Modelin eğitim verisine çok iyi uyum sağlaması ancak yeni, görünmeyen verilere genelleme yapamaması durumu.
* Yetersiz Uyum (Underfitting): Modelin eğitim verisindeki temel desenleri bile öğrenememesi durumu, hem eğitim hem de test verisinde kötü performans gösterir.
Scikit-learn’ün API’si: Beş Adım
Scikit-learn’de bir makine öğrenimi modelini kullanmanın tutarlı bir beş adımlık süreci vardır. Bu süreç, farklı algoritmalar ve görevler arasında büyük ölçüde aynı kalır.
1. Veri Yükleme ve Hazırlama
Makine öğrenimi projelerinin ilk adımı, verileri yüklemek ve modeli eğitmeye uygun bir formata getirmektir. Scikit-learn, genellikle özellik matrisi X (iki boyutlu bir NumPy dizisi veya Pandas DataFrame) ve hedef vektörü y (tek boyutlu bir NumPy dizisi veya Pandas Serisi) bekler.
import pandas as pd
from sklearn.datasets import load_iris
Örnek: Iris veri setini yükleme
iris = load_iris()
X = iris.data # Özellikler (sepal length, sepal width, petal length, petal width)
y = iris.target # Hedef (çiçek türü: setosa, versicolor, virginica)
Veya bir CSV dosyasından yükleme
data = pd.read_csv('your_data.csv')
X = data.drop('target_column', axis=1)
y = data['target_column']
Veri setini eğitim ve test kümelerine ayırmak, modelin genelleme yeteneğini değerlendirmek için kritik öneme sahiptir.
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
test_size: Test kümesi için ayrılacak verinin oranı (örneğin %20)
random_state: Sonuçların tekrarlanabilirliğini sağlar
2. Model Seçimi
Yapmak istediğiniz makine öğrenimi görevine (sınıflandırma, regresyon, kümeleme vb.) ve veri setinizin özelliklerine göre uygun bir model seçmelisiniz. Scikit-learn’de her model bir “tahminci” (estimator) olarak adlandırılır.
from sklearn.neighbors import KNeighborsClassifier # Sınıflandırma için
from sklearn.linear_model import LinearRegression # Regresyon için
from sklearn.cluster import KMeans # Kümeleme için
Model nesnesini oluşturma (hiperparametreler burada ayarlanabilir)
model = KNeighborsClassifier(n_neighbors=3) # K-NN için komşu sayısı 3 olarak belirlendi
3. Model Eğitimi (fit)
Model seçildikten sonra, eğitim verisi (X_train, y_train) kullanılarak eğitilir. Bu adımda model, verilerdeki desenleri ve ilişkileri öğrenir.
model.fit(X_train, y_train)
fit() metodu, modelin eğitim verisinden öğrenmesini sağlar.
4. Tahmin Yapma (predict)
Eğitilmiş model, yeni, görünmeyen veriler (X_test) üzerinde tahminler yapmak için kullanılır.
y_pred = model.predict(X_test)
predict() metodu, test verisi için tahminler üretir.
5. Model Değerlendirme
Modelin ne kadar iyi performans gösterdiğini anlamak için tahminler (y_pred) gerçek değerlerle (y_test) karşılaştırılır. Değerlendirme metrikleri, görev türüne göre değişir.
* Sınıflandırma Metrikleri:
* accuracy_score: Doğru tahminlerin oranı.
* precision_score, recall_score, f1_score: Sınıf dengesizliği olan durumlar için daha bilgilendirici olabilir.
* confusion_matrix: Modelin hangi sınıfları doğru/yanlış tahmin ettiğini gösterir.
* Regresyon Metrikleri:
* mean_squared_error (MSE): Tahminler ile gerçek değerler arasındaki kare farklarının ortalaması.
* r2_score: Modelin bağımlı değişkendeki varyansı ne kadar iyi açıkladığını gösterir (0 ile 1 arası).
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
accuracy = accuracy_score(y_test, y_pred)
print(f"Model Doğruluğu: {accuracy:.2f}")
conf_matrix = confusion_matrix(y_test, y_pred)
print("Karmaşıklık Matrisi:\n", conf_matrix)
class_report = classification_report(y_test, y_pred, target_names=iris.target_names)
print("Sınıflandırma Raporu:\n", class_report)
Pratik Örnekler ile Scikit-learn
Yukarıdaki beş adımı kullanarak farklı makine öğrenimi görevlerini nasıl gerçekleştirebileceğimize dair örnekler inceleyelim.
Sınıflandırma Örneği: Iris Veri Seti ile K-En Yakın Komşu (K-NN)
Iris veri seti, Scikit-learn ile sınıflandırma algoritmalarını öğrenmek için klasik bir örnektir.
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score, classification_report
1. Veri Yükleme ve Hazırlama
iris = load_iris()
X = iris.data
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
2. Model Seçimi
knn = KNeighborsClassifier(n_neighbors=5) # 5 komşu ile K-NN sınıflandırıcı
3. Model Eğitimi
knn.fit(X_train, y_train)
4. Tahmin Yapma
y_pred = knn.predict(X_test)
5. Model Değerlendirme
print("K-NN Sınıflandırma Sonuçları:")
print(f"Doğruluk: {accuracy_score(y_test, y_pred):.2f}")
print("Sınıflandırma Raporu:\n", classification_report(y_test, y_pred, target_names=iris.target_names))
Bu örnekte, K-NN algoritması çiçeklerin sepal ve petal ölçülerine göre hangi Iris türüne ait olduğunu tahmin etmek için kullanıldı.
Regresyon Örneği: Basit Doğrusal Regresyon
Sentetik veri kullanarak basit bir doğrusal regresyon modeli oluşturalım.
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
import matplotlib.pyplot as plt
1. Veri Yükleme ve Hazırlama (Sentetik Veri Oluşturma)
np.random.seed(0)
X = 2 * np.random.rand(100, 1) # 100 rastgele sayıdan oluşan özellik
y = 4 + 3 X + np.random.randn(100, 1) # Hedef = 4 + 3X + gürültü
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
2. Model Seçimi
lin_reg = LinearRegression()
3. Model Eğitimi
lin_reg.fit(X_train, y_train)
4. Tahmin Yapma
y_pred = lin_reg.predict(X_test)
5. Model Değerlendirme
print("Doğrusal Regresyon Sonuçları:")
print(f"Ortalama Kare Hata (MSE): {mean_squared_error(y_test, y_pred):.2f}")
print(f"R-kare (R2): {r2_score(y_test, y_pred):.2f}")
print(f"Model Katsayısı (Eğim): {lin_reg.coef_[0][0]:.2f}")
print(f"Model Kesme Noktası (Y-eksenini Kestiği Nokta): {lin_reg.intercept_[0]:.2f}")
Sonuçları görselleştirme
plt.scatter(X_test, y_test, label='Gerçek Değerler')
plt.plot(X_test, y_pred, color='red', label='Tahminler')
plt.xlabel('X')
plt.ylabel('y')
plt.title('Doğrusal Regresyon')
plt.legend()
plt.show()
Bu örnekte, LinearRegression modeli, X özelliklerinden y hedefini tahmin etmek için eğitildi ve sonuçlar MSE ve R-kare metrikleri ile değerlendirildi.
Kümeleme Örneği: K-Means
make_blobs fonksiyonu ile sentetik kümeleme verileri oluşturup K-Means algoritmasını uygulayalım.
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
1. Veri Yükleme ve Hazırlama (Sentetik Veri Oluşturma)
X, y_true = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)
n_samples: Veri noktası sayısı
centers: Küme sayısı
cluster_std: Kümelerin standart sapması (dağılımı)
2. Model Seçimi
kmeans = KMeans(n_clusters=4, random_state=0, n_init=10) # 4 küme arıyoruz, n_init=10 tavsiye edilir
3. Model Eğitimi (Denetimsiz öğrenmede y_train yoktur)
kmeans.fit(X)
4. Tahmin Yapma (Küme atamaları)
y_kmeans = kmeans.predict(X)
5. Model Değerlendirme (Görselleştirme ile)
plt.scatter(X[:, 0], X[:, 1], c=y_kmeans, s=50, cmap='viridis')
centers = kmeans.cluster_centers_
plt.scatter(centers[:, 0], centers[:, 1], c='black', s=200, alpha=0.5, label='Merkezler')
plt.title('K-Means Kümeleme')
plt.xlabel('Özellik 1')
plt.ylabel('Özellik 2')
plt.legend()
plt.show()
K-Means, veri noktalarını 4 farklı kümeye ayırdı ve her kümenin merkezini (centroid) belirledi.
Veri Ön İşleme ve Özellik Mühendisliği
Gerçek dünya verileri nadiren temiz ve modele doğrudan beslenmeye uygundur. Scikit-learn, veri ön işleme (preprocessing) ve özellik mühendisliği (feature engineering) için güçlü araçlar sunar.
Veri Ölçekleme (Data Scaling)
Birçok makine öğrenimi algoritması (özellikle mesafe tabanlı olanlar gibi K-NN, SVM, sinir ağları), özelliklerin farklı ölçeklerde olması durumunda kötü performans gösterebilir. Ölçekleme, tüm özelliklerin benzer bir aralığa getirilmesini sağlar.
* StandardScaler: Özellikleri ortalaması 0 ve standart sapması 1 olacak şekilde ölçekler (standardizasyon).
* MinMaxScaler: Özellikleri belirli bir aralığa (genellikle 0 ile 1 arasına) ölçekler (normalizasyon).
from sklearn.preprocessing import StandardScaler, MinMaxScaler
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
data = load_breast_cancer()
X, y = data.data, data.target
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
StandardScaler örneği
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test) # Test setini eğitim setinin scaler'ı ile dönüştürüyoruz
print("Ölçeklenmiş veri örneği (StandardScaler):", X_train_scaled[0, :5])
MinMaxScaler örneği
minmax_scaler = MinMaxScaler()
X_train_minmax = minmax_scaler.fit_transform(X_train)
X_test_minmax = minmax_scaler.transform(X_test)
print("Ölçeklenmiş veri örneği (MinMaxScaler):", X_train_minmax[0, :5])
Kategorik Veri İşleme
Makine öğrenimi algoritmaları genellikle sayısal verilerle çalışır. Kategorik verileri (örneğin, “kırmızı”, “mavi”, “yeşil”) sayısal formata dönüştürmek gerekir.
* LabelEncoder: Kategorik etiketleri 0’dan başlayarak ardışık tam sayılara dönüştürür. Hedef değişken (y) için kullanışlıdır.
* OneHotEncoder: Kategorik özellikleri “one-hot” kodlamaya dönüştürür. Her kategori için yeni bir ikili özellik (0 veya 1) oluşturur. Özellik matrisi (X) için tercih edilir.
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
import numpy as np
LabelEncoder örneği (Hedef için)
data = ['kırmızı', 'mavi', 'yeşil', 'kırmızı']
le = LabelEncoder()
encoded_labels = le.fit_transform(data)
print("LabelEncoder sonuçları:", encoded_labels) # [0 1 2 0]
print("Orijinal etiketler:", le.inverse_transform(encoded_labels))
OneHotEncoder örneği (Özellikler için)
categories = np.array([['tek', 'kare'], ['çift', 'daire'], ['tek', 'üçgen'], ['çift', 'kare']])
ohe = OneHotEncoder(handle_unknown='ignore', sparse_output=False) # sparse_output=False ile dense array döner
encoded_features = ohe.fit_transform(categories)
print("OneHotEncoder sonuçları:\n", encoded_features)
Eksik Veri İşleme
Gerçek dünya veri setlerinde eksik değerler (NaN) yaygındır. Scikit-learn, bu eksik değerleri doldurmak (imputation) için SimpleImputer sağlar.
from sklearn.impute import SimpleImputer
import numpy as np
data = np.array([[1, 2], [np.nan, 3], [7, 6], [np.nan, 8]])
Ortalama ile doldurma
imputer_mean = SimpleImputer(strategy='mean')
imputed_data_mean = imputer_mean.fit_transform(data)
print("Ortalama ile doldurulan:\n", imputed_data_mean)
Medyan ile doldurma
imputer_median = SimpleImputer(strategy='median')
imputed_data_median = imputer_median.fit_transform(data)
print("Medyan ile doldurulan:\n", imputed_data_median)
En sık görülen değer ile doldurma
imputer_most_frequent = SimpleImputer(strategy='most_frequent')
imputed_data_most_frequent = imputer_most_frequent.fit_transform(data)
print("En sık görülen ile doldurulan:\n", imputed_data_most_frequent)
Model Seçimi ve Hiperparametre Ayarlama
Bir modelin performansını optimize etmek için doğru modeli seçmek ve hiperparametrelerini ayarlamak önemlidir.
Çapraz Doğrulama (Cross-Validation)
Modelin genelleme yeteneğini daha güvenilir bir şekilde değerlendirmek için çapraz doğrulama kullanılır. Veri setini birden çok eğitim/test katına (fold) böler ve her katta modeli eğitip test eder.
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
iris = load_iris()
X, y = iris.data, iris.target
log_reg = LogisticRegression(max_iter=200) # Yakınsama için max_iter artırıldı
5 katlı çapraz doğrulama ile doğruluk puanlarını hesapla
scores = cross_val_score(log_reg, X, y, cv=5)
print("Her bir kat için doğruluk puanları:", scores)
print(f"Ortalama doğruluk: {scores.mean():.2f} (+/- {scores.std() * 2:.2f})")
cross_val_score ile modelin farklı veri alt kümelerinde nasıl performans gösterdiğini görebiliriz.
Hiperparametre Optimizasyonu
Hiperparametreler, modelin öğrenme sürecini kontrol eden parametrelerdir (örneğin, K-NN’deki n_neighbors veya Lojistik Regresyon’daki C). En iyi hiperparametre kombinasyonunu bulmak için arama stratejileri kullanılır.
* GridSearchCV: Belirtilen hiperparametreler ızgarasındaki tüm olası kombinasyonları dener ve çapraz doğrulama kullanarak en iyisini bulur.
* RandomizedSearchCV: Belirtilen bir dağılımdan rastgele hiperparametre kombinasyonları dener, daha büyük arama alanları için daha verimli olabilir.
from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC
from sklearn.datasets import load_iris
iris = load_iris()
X, y = iris.data, iris.target
SVM modeli için hiperparametre ızgarası
param_grid = {
'C': [0.1, 1, 10, 100],
'gamma': [1, 0.1, 0.01, 0.001],
'kernel': ['rbf', 'linear']
}
grid_search = GridSearchCV(SVC(), param_grid, refit=True, verbose=2, cv=5)
grid_search.fit(X, y)
print("En iyi parametreler:", grid_search.best_params_)
print(f"En iyi çapraz doğrulama skoru: {grid_search.best_score_:.2f}")
En iyi model ile tahmin yapma
best_model = grid_search.best_estimator_
y_pred = best_model.predict(X_test)
GridSearchCV, her bir parametre kombinasyonunu test ederek en iyi performansı veren modeli bulur.
Pipeline ve İş Akışı
Veri ön işleme adımları ve model eğitimi genellikle sıralı bir iş akışı oluşturur. Scikit-learn’ün Pipeline özelliği, bu adımları tek bir nesnede birleştirerek kodun daha düzenli ve hataya daha az açık olmasını sağlar. Ayrıca, veri sızıntısını (data leakage) önlemeye yardımcı olur.
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_breast_cancer
from sklearn.metrics import accuracy_score
data = load_breast_cancer()
X, y = data.data, data.target
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
Ölçekleme ve Lojistik Regresyonu birleştiren bir pipeline oluşturma
pipeline = Pipeline([
('scaler', StandardScaler()), # İlk adım: Veri ölçekleme
('log_reg', LogisticRegression(max_iter=500)) # İkinci adım: Lojistik Regresyon modeli
])
Pipeline'ı eğitme (hem ölçekleme hem de model eğitimi tek adımda gerçekleşir)
pipeline.fit(X_train, y_train)
Tahmin yapma
y_pred = pipeline.predict(X_test)
Model değerlendirme
print(f"Pipeline ile Model Doğruluğu: {accuracy_score(y_test, y_pred):.2f}")
Pipeline kullanımı, özellikle GridSearchCV veya RandomizedSearchCV ile birlikte hiperparametre ayarlaması yaparken çok güçlüdür, çünkü ön işleme adımlarını da parametre ayarlama sürecine dahil edebilir.
İleri Düzey Konulara Kısa Bir Bakış
Bu rehber, Scikit-learn’e bir başlangıç niteliğindedir. Kütüphane, daha birçok gelişmiş özellik ve algoritma sunar:
* Topluluk Öğrenme (Ensemble Methods): Birden fazla modelin birleştirilmesiyle daha güçlü tahminler elde edilir. RandomForestClassifier, GradientBoostingClassifier, AdaBoostClassifier gibi algoritmalar bu kategoriye girer.
* Destek Vektör Makineleri (Support Vector Machines – SVM): Hem sınıflandırma hem de regresyon için kullanılan güçlü ve esnek modellerdir (SVC, SVR).
* Boyut Azaltma Teknikleri: PCA (Temel Bileşen Analizi) dışında, TSNE veya UMAP gibi görselleştirme ve boyut azaltma için kullanılan daha gelişmiş teknikler de mevcuttur.
* Metin İşleme: CountVectorizer, TfidfVectorizer gibi araçlarla metin verilerini makine öğrenimi modelleri için uygun sayısal formata dönüştürebilirsiniz.
Başlangıç Seviyesi İçin En İyi Uygulamalar ve İpuçları
Makine öğrenimi yolculuğunuzda başarılı olmak için bazı temel ipuçları:
1. Basit Başlayın: Karmaşık modeller yerine basit algoritmalarla başlayın. Verilerinizi ve temel algoritmaların nasıl çalıştığını anlayın.
2. Verilerinizi Anlayın: Veri setinizi keşfetmek, eksik değerleri, aykırı değerleri ve özellikler arasındaki ilişkileri anlamak, başarılı bir model için temeldir.
3. Her Şeyi Görselleştirin: Veri dağılımlarını, özellikler arasındaki ilişkileri ve model sonuçlarını görselleştirmek, anlaşılırlığı artırır ve sorunları erken tespit etmenize yardımcı olur.
4. Aşırı Uyumdan Kaçının: Modelinizin eğitim verisine ezber yapmamasını, yeni verilere genelleme yapabilmesini sağlayın. Çapraz doğrulama ve düzenlileştirme tekniklerini kullanın.
5. Tekrar Edin ve Deney Yapın: Makine öğrenimi iteratif bir süreçtir. Farklı algoritmalar, ön işleme teknikleri ve hiperparametreler deneyerek en iyi modeli bulun.
6. Belgelendirmeyi Okuyun: Scikit-learn’ün mükemmel belgelendirmesi, her algoritma ve aracın ayrıntılarını öğrenmek için en iyi kaynaktır.
7. Topluluklara Katılın: Stack Overflow, Kaggle veya diğer veri bilimi forumları gibi platformlarda sorular sorun, projeleri inceleyin ve diğerlerinden öğrenin.
Sonuç
Scikit-learn, Python ekosisteminde makine öğrenimine başlamak için en erişilebilir ve güçlü kütüphanelerden biridir. Tutarlı API’si, geniş algoritma yelpazesi ve kapsamlı belgelendirmesi sayesinde, veri bilimcileri ve geliştiriciler için vazgeçilmez bir araç haline gelmiştir. Bu rehber, Scikit-learn’ün temel prensiplerini, kurulumunu, ana API’sini ve pratik uygulamalarını kapsayarak size sağlam bir başlangıç noktası sunmayı amaçlamıştır.
Makine öğrenimi yolculuğu sürekli bir öğrenme ve keşif sürecidir. Temel bilgileri edindikten sonra, farklı veri setleriyle deneyler yapmak, daha karmaşık algoritmaları keşfetmek ve gerçek dünya problemlerine çözümler üretmek için Scikit-learn’ü kullanmaya devam edin. Unutmayın, en iyi öğrenme, pratik yaparak ve hatalarınızdan ders çıkararak gerçekleşir.