Scikit-learn

Scikit-learn, sınıflandırma, regresyon, kümeleme ve boyut indirgeme dahil olmak üzere veri madenciliği ve makine öğrenimi için basit ve verimli araçlar sunan ücretsiz, açık kaynaklı bir Python kütüphanesidir.

Scikit-learn, genellikle scikit-learn veya kısaca sklearn olarak yazılır, Python programlama dili için geliştirilmiş güçlü ve açık kaynaklı bir makine öğrenimi kütüphanesidir. Öngörücü veri analizi için basit ve verimli araçlar sunmak amacıyla tasarlanmış olup, dünya genelinde veri bilimciler ve makine öğrenimi uygulayıcıları için vazgeçilmez bir kaynak haline gelmiştir.

Genel Bakış

Scikit-learn, başta NumPy, SciPy ve matplotlib olmak üzere çeşitli popüler Python kütüphaneleri üzerine inşa edilmiştir. Python’daki tutarlı bir arayüz üzerinden geniş bir denetimli ve denetimsiz makine öğrenimi algoritması yelpazesi sunar. Kullanım kolaylığı, performansı ve temiz API’si ile hem yeni başlayanlara hem de deneyimli kullanıcılara uygundur.

Kökeni ve Gelişimi

Proje, 2007 yılında David Cournapeau tarafından Google Summer of Code kapsamında scikits.learn adıyla başladı. “scikits” (SciPy Araç Takımları) ad alanı, SciPy kütüphanesine eklentiler geliştirmek ve dağıtmak için kullanıldı. 2010 yılında proje, Fransa Saclay’daki Fransız Bilgisayar Bilimleri ve Otomasyon Araştırma Enstitüsü (INRIA)‘dan Fabian Pedregosa, Gaël Varoquaux, Alexandre Gramfort ve Vincent Michel tarafından daha da geliştirildi.

2010’daki ilk halka açık sürümünden bu yana Scikit-learn, aktif bir geliştirici ve araştırmacı topluluğunun katkılarıyla büyük bir gelişim gösterdi. Hem akademide hem endüstride yaygın olarak kullanılan Python’daki en popüler makine öğrenimi kütüphanelerinden biri haline geldi.

Temel Özellikler

1. Geniş Makine Öğrenimi Algoritma Yelpazesi

Scikit-learn, birçok makine öğrenimi algoritmasının uygulamalarını sağlar:

  • Sınıflandırma: Bir nesnenin hangi kategoriye ait olduğunu belirleme. Algoritmalar arasında Destek Vektör Makineleri (SVM), k-En Yakın Komşu (k-NN), Rastgele Ormanlar, Gradyan Artırma ve daha fazlası bulunur.
  • Regresyon: Bir nesneyle ilişkili sürekli değerli öznitelikleri tahmin etme. Algoritmalar arasında Doğrusal Regresyon, Ridge Regresyon, Lasso, Elastic Net vb. yer alır.
  • Kümeleme: Benzer nesnelerin otomatik olarak kümelere ayrılması. Algoritmalar arasında k-Ortalamalar, DBSCAN, Hiyerarşik Kümeleme gibi yöntemler bulunur.
  • Boyut İndirgeme: Görselleştirme, sıkıştırma veya gürültü azaltma için veri özelliklerinin sayısını azaltma. Teknikler arasında Temel Bileşenler Analizi (PCA), t-dağıtımlı Stokastik Komşuluk Yerleştirme (t-SNE) ve diğerleri mevcuttur.

2. Tutarlı API ve Verimli Uygulama

Scikit-learn, tüm modüllerinde tutarlı bir API ile tasarlanmıştır. Temel arayüzü anladıktan sonra farklı modeller arasında kolayca geçiş yapabilirsiniz. API, şu anahtar arayüzler etrafında şekillenmiştir:

  • fit(): Bir modeli eğitmek için kullanılır.
  • predict(): Eğitilen model ile tahmin yapmak için kullanılır.
  • transform(): Veriyi değiştirmek veya boyutunu azaltmak için (ön işleme ve boyut indirgeme işlemlerinde) kullanılır.

Kütüphane, büyük veri setlerinde dahi verimli hesaplama için Cython (C benzeri performans sağlayan Python üst kümesi) ile optimize edilmiştir.

3. Python Ekosistemiyle Entegrasyon

Scikit-learn, diğer Python kütüphaneleriyle sorunsuz entegre olur:

  • NumPy ve SciPy ile verimli sayısal hesaplamalar.
  • Pandas ile DataFrame’ler üzerinde veri manipülasyonu.
  • Matplotlib ve seaborn ile veri görselleştirme.
  • Joblib ile paralel hesaplama ve verimli işleme.

Bu entegrasyon, esnek ve güçlü veri işleme boru hatlarının oluşturulmasını sağlar.

4. Erişilebilirlik ve Açık Kaynak

BSD lisansı altında açık kaynaklı olan Scikit-learn, hem kişisel hem de ticari kullanım için ücretsizdir. Kapsamlı dokümantasyonu ve aktif topluluk desteğiyle her seviyeden kullanıcıya erişilebilirlik sunar.

Kurulum

Scikit-learn’ün kurulumu, özellikle NumPy ve SciPy zaten kurulmuşsa oldukça basittir. pip ile kurabilirsiniz:

pip install -U scikit-learn

Veya Anaconda dağıtımını kullanıyorsanız conda ile:

conda install scikit-learn

Scikit-learn Nasıl Kullanılır?

Scikit-learn, öngörücü modeller oluşturmak ve çeşitli makine öğrenimi görevlerini yerine getirmek için kullanılır. Scikit-learn kullanımında yaygın adımlar şunlardır:

1. Veri Hazırlama

Makine öğrenimi algoritmalarını uygulamadan önce verinin ön işlenmesi gerekir:

  • Veri Yükleme: Veriler CSV dosyalarından, veritabanlarından veya Scikit-learn’ün sunduğu veri setlerinden yüklenebilir.
  • Eksik Değerleri Doldurma: Eksik veriler için imputasyon teknikleri kullanılır.
  • Kategorik Değişkenleri Kodlama: Kategorik değişkenler, One-Hot Encoding veya Etiket Kodlama ile sayısal hale getirilir.
  • Özellik Ölçekleme: StandardScaler veya MinMaxScaler gibi ölçekleyicilerle veri normalize veya standardize edilir.

2. Veriyi Bölme

Modelin görülmemiş verideki performansını değerlendirmek için veri seti eğitim ve test olarak bölünür:

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)

3. Model Seçimi ve Eğitimi

Probleme (sınıflandırma, regresyon, kümeleme) uygun algoritma seçilir ve model eğitilir:

from sklearn.ensemble import RandomForestClassifier

model = RandomForestClassifier()
model.fit(X_train, y_train)

4. Tahmin Yapma

Eğitilen model ile yeni veri üzerinde tahmin yapılır:

y_pred = model.predict(X_test)

5. Modeli Değerlendirme

Modelin başarımı uygun metriklerle değerlendirilir:

  • Sınıflandırma Metrikleri: Doğruluk, Kesinlik (Precision), Duyarlılık (Recall), F1-Skoru, ROC AUC Skoru.
  • Regresyon Metrikleri: Ortalama Mutlak Hata (MAE), Ortalama Kare Hata (MSE), Kök Ortalama Kare Hata (RMSE), R² Skoru.
from sklearn.metrics import accuracy_score

accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")

6. Hiperparametre Ayarı

Grid Search veya Rastgele Arama gibi tekniklerle hiperparametreler ayarlanarak modelin başarımı optimize edilir:

from sklearn.model_selection import GridSearchCV

param_grid = {'n_estimators': [100, 200], 'max_depth': [3, 5, None]}
grid_search = GridSearchCV(RandomForestClassifier(), param_grid)
grid_search.fit(X_train, y_train)

7. Çapraz Doğrulama

Modelin performansı, verinin farklı alt kümelerinde test edilerek doğrulanır:

from sklearn.model_selection import cross_val_score

scores = cross_val_score(model, X, y, cv=5)
print(f"Cross-validation scores: {scores}")

Örnekler ve Kullanım Alanları

Örnek 1: Iris Çiçeği Sınıflandırması

Scikit-learn ile sunulan klasik veri setlerinden biri Iris veri setidir. Bu örnekte, iris çiçekleri dört özellik (çanak yaprak uzunluğu, çanak yaprak genişliği, taç yaprak uzunluğu, taç yaprak genişliği) ile üç türe ayrılır.

Adımlar:

  1. Veri Setini Yükleyin
    from sklearn.datasets import load_iris
    iris = load_iris()
    X, y = iris.data, iris.target
  2. Veriyi Bölün
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
  3. Bir Sınıflandırıcı Eğitin (ör. Destek Vektör Makinesi):
    from sklearn.svm import SVC
    model = SVC()
    model.fit(X_train, y_train)
  4. Tahmin Yapın ve Değerlendirin
    y_pred = model.predict(X_test)
    accuracy = accuracy_score(y_test, y_pred)
    print(f"Accuracy: {accuracy}")

Örnek 2: Konut Fiyatı Tahmini

Boston Konut veri setiyle (not: etik endişeler nedeniyle Boston veri seti kullanımdan kaldırılmıştır; alternatif olarak California Housing önerilir) oda sayısı, suç oranı gibi özelliklere göre konut fiyatları regresyon ile tahmin edilebilir.

Adımlar:

  1. Veri Setini Yükleyin
    from sklearn.datasets import fetch_california_housing
    housing = fetch_california_housing()
    X, y = housing.data, housing.target
  2. Veriyi Bölün ve Ön İşleyin
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
  3. Bir Regresör Eğitin (ör. Doğrusal Regresyon):
    from sklearn.linear_model import LinearRegression
    model = LinearRegression()
    model.fit(X_train, y_train)
  4. Tahmin Yapın ve Değerlendirin
    y_pred = model.predict(X_test)
    mse = mean_squared_error(y_test, y_pred)
    print(f"MSE: {mse}")

Örnek 3: Müşteri Kümeleme

Kümeleme, müşteri segmentasyonu için müşteri satın alma davranışlarına göre gruplandırmada kullanılabilir.

Adımlar:

  1. Veriyi Hazırlayın: Müşteri işlemleriyle ilgili verileri toplayın ve ön işleyin.
  2. Veriyi Ölçekleyin
    from sklearn.preprocessing import StandardScaler
    scaler = StandardScaler()
    X_scaled = scaler.fit_transform(X)
  3. k-Ortalamalar Kümeleme Uygulayın
    from sklearn.cluster import KMeans
    kmeans = KMeans(n_clusters=3)
    kmeans.fit(X_scaled)
    clusters = kmeans.labels_
  4. Kümeleri Analiz Edin: Her bir kümenin özelliklerini analiz ederek hedefli pazarlama çalışmaları yapın.

Scikit-learn Yapay Zeka ve Chatbotlarda

Scikit-learn, özellikle doğal dil işleme (NLP) veya chatbotlar için tasarlanmamış olsa da, bir yapay zeka sisteminin parçası olabilecek makine öğrenimi modellerini oluşturmakta önemli bir rol oynar.

Metinden Özellik Çıkartma

Scikit-learn, metin verilerini sayısal özelliklere dönüştürmek için araçlar sunar:

  • CountVectorizer: Metni kelime sayısı matrisine dönüştürür.
  • TfidfVectorizer: Metni TF-IDF özellikleri matrisine dönüştürür.
from sklearn.feature_extraction.text import TfidfVectorizer

documents = ["Hello, how can I help you?", "What is your name?", "Goodbye!"]
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(documents)

Chatbotlarda Niyet Sınıflandırma

Chatbotlar genellikle kullanıcı sorgularını niyetlerine göre sınıflandırarak uygun yanıtlar vermelidir. Scikit-learn, niyet tespiti için sınıflandırıcıların eğitilmesinde kullanılabilir.

Adımlar:

  1. Veri Toplayın ve Etiketleyin: Kullanıcı sorgularını niyetlerle etiketlenmiş bir veri seti oluşturun.
  2. Metni Vektörleştirin
    vectorizer = TfidfVectorizer()
    X = vectorizer.fit_transform(queries)
  3. Bir Sınıflandırıcı Eğitin
    model = LogisticRegression()
    model.fit(X, intents)
  4. Niyet Tahmini Yapın
    new_query = "Can you help me with my account?"
    X_new = vectorizer.transform([new_query])
    predicted_intent = model.predict(X_new)

Duygu Analizi

Kullanıcı mesajlarının arka planındaki duyguyu anlamak, chatbot etkileşimlerini geliştirebilir.

from sklearn.datasets import fetch_openml

# Duygu analizi için etiketli bir veri setiniz olduğu varsayılıyor
X_train, X_test, y_train, y_test = train_test_split(X, y)

model = SVC()
model.fit(X_train, y_train)

Yapay Zeka Otomasyon Araçlarıyla Entegrasyon

Scikit-learn modelleri, daha büyük yapay zeka sistemlerine ve otomatik iş akışlarına entegre edilebilir:

  • Boru Hattı (Pipeline) Entegrasyonu: Scikit-learn’ün Pipeline sınıfı, ön işleme ve modelleme adımlarının zincirlenmesini kolaylaştırarak otomasyon sağlar.

    from sklearn.pipeline import Pipeline
    pipeline = Pipeline([
        ('vectorizer', TfidfVectorizer()),
        ('classifier', LogisticRegression())
    ])
    pipeline.fit(queries, intents)
    
  • Model Dağıtımı: Eğitilmiş modeller joblib ile kaydedilip üretim sistemlerine entegre edilebilir.

    import joblib
    joblib.dump(model, 'model.joblib')
    # Daha sonra
    model = joblib.load('model.joblib')
    

Güçlü ve Sınırlı Yönleri

Güçlü Yönler

  • Kullanım Kolaylığı: Basit ve tutarlı API.
  • Kapsamlı Dokümantasyon: Ayrıntılı rehberler ve eğitimler.
  • Topluluk Desteği: Gelişime ve desteğe katkı veren aktif topluluk.
  • Performans: Büyük veri setleri için verimli uygulamalar.

Sınırlamalar

  • Derin Öğrenme: Scikit-learn, derin öğrenme için tasarlanmamıştır. Bu amaçla TensorFlow veya PyTorch gibi kütüphaneler daha uygundur.
  • Çevrim İçi Öğrenme: Çevrim içi veya artımlı öğrenme algoritmaları için sınırlı destek.
  • GPU Hızlandırma: Yerel olarak GPU hızlandırmalı hesaplamaları desteklemez.

Alternatifler

Scikit-learn çok yönlü bir kütüphane olsa da, özel ihtiyaçlar için alternatifler şunlardır:

  • TensorFlow ve Keras: Derin öğrenme ve sinir ağları için.
  • PyTorch: Gelişmiş makine öğrenimi araştırmaları ve derin öğrenme için.
  • XGBoost ve LightGBM: Büyük veri setlerinde yüksek performanslı gradyan artırma algoritmaları için.
  • spaCy: Gelişmiş doğal dil işleme için.

Scikit-learn Üzerine Araştırma

Scikit-learn, orta ölçekli denetimli ve denetimsiz problemlere uygun, son teknoloji makine öğrenimi algoritmalarını entegre eden kapsamlı bir Python modülüdür. Fabian Pedregosa ve diğerleri tarafından 2018’de yayımlanan “Scikit-learn: Machine Learning in Python” başlıklı önemli bir makale, bu araca derinlemesine bir bakış sunar. Yazarlar, Scikit-learn’ün genel amaçlı, yüksek seviyeli bir dil aracılığıyla makine öğrenimini uzman olmayanlara erişilebilir kılmayı hedeflediğini vurgular. Paket, kullanım kolaylığı, performans ve API tutarlılığına odaklanırken minimum bağımlılık ilkesini korur. Bu sayede, sadeleştirilmiş BSD lisansı ile dağıtıldığından hem akademik hem de ticari ortamlarda oldukça uygundur. Daha ayrıntılı bilgi, kaynak kodu, ikili dosyalar ve dökümantasyona Scikit-learn üzerinden ulaşabilirsiniz. Orijinal makaleye buradan ulaşabilirsiniz.

Sıkça sorulan sorular

Scikit-learn nedir?

Scikit-learn, Python için geliştirilmiş, veri analizi ve modelleme amacıyla basit ve verimli araçlar sağlayan açık kaynaklı bir makine öğrenimi kütüphanesidir. Sınıflandırma, regresyon, kümeleme ve boyut indirgeme dahil olmak üzere çok çeşitli denetimli ve denetimsiz öğrenme algoritmalarını destekler.

Scikit-learn'ün başlıca özellikleri nelerdir?

Scikit-learn, tutarlı bir API, çok sayıda makine öğrenimi algoritmasının verimli uygulamaları, NumPy ve pandas gibi popüler Python kütüphaneleriyle entegrasyon, kapsamlı dokümantasyon ve geniş bir topluluk desteği sunar.

Scikit-learn nasıl kurulur?

'pip install -U scikit-learn' komutuyla pip kullanarak veya Anaconda dağıtımını kullanıyorsanız 'conda install scikit-learn' komutuyla conda üzerinden Scikit-learn'ü kurabilirsiniz.

Scikit-learn derin öğrenme için kullanılabilir mi?

Scikit-learn, derin öğrenme için tasarlanmamıştır. Gelişmiş sinir ağları ve derin öğrenme görevleri için TensorFlow veya PyTorch gibi kütüphaneler daha uygundur.

Scikit-learn yeni başlayanlar için uygun mu?

Evet, Scikit-learn kullanım kolaylığı, temiz API'si ve mükemmel dokümantasyonu ile hem yeni başlayanlar hem de deneyimli makine öğrenimi kullanıcıları için idealdir.

Scikit-learn ile Geliştirmeye Başlayın

Scikit-learn'ün makine öğrenimi projelerinizi nasıl kolaylaştırabileceğini keşfedin. Python'un önde gelen ML kütüphanesi ile modellerinizi verimli bir şekilde oluşturun, eğitin ve dağıtın.

Daha fazla bilgi

PyTorch
PyTorch

PyTorch

PyTorch, Meta AI tarafından geliştirilen, esnekliği, dinamik hesaplama grafikleri, GPU hızlandırması ve sorunsuz Python entegrasyonu ile tanınan açık kaynaklı b...

8 dakika okuma
PyTorch Deep Learning +4
SpaCy
SpaCy

SpaCy

spaCy, gelişmiş Doğal Dil İşleme (NLP) için hız, verimlilik ve üretime hazır özellikleriyle bilinen, güçlü ve açık kaynaklı bir Python kütüphanesidir. Tokenizas...

5 dakika okuma
spaCy NLP +4
NLTK
NLTK

NLTK

Doğal Dil Araç Takımı (NLTK), sembolik ve istatistiksel doğal dil işleme (NLP) için kapsamlı bir Python kütüphaneleri ve programları paketidir. Akademide ve end...

5 dakika okuma
NLP Python +3