Scikit-Study’e Giriş
Scikit-Study, Python için basit ve verimli araçlar sunan bir makine öğrenimi kütüphanesidir. Hem denetimli (supervised) hem de denetimsiz (unsupervised) öğrenme algoritmaları içerir.
Kurulum ve Temel Kullanım
Scikit-Study’ü kullanmaya başlamadan önce, kütüphaneyi kurmamız gerekir. Eğer Scikit-Study sisteminizde yüklü değilse, aşağıdaki komutu kullanarak yükleyebilirsiniz:
pip set up scikit-learn
Denetimli öğrenme, etiketli verilerle çalışır ve modelin tahminler yapabilmesi için veri setindeki örneklerin sonuçları (etiketleri) bilinir.
Lojistik Regresyon (Logistic Regression)
Lojistik regresyon, sınıflandırma problemlerinde yaygın olarak kullanılan bir algoritmadır.
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
# Veri setini yükle
iris = load_iris()
X = iris.knowledge
y = iris.goal
# Veriyi eğitim ve take a look at olarak ayır
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Mannequin oluştur ve eğit
mannequin = LogisticRegression(max_iter=200)
mannequin.match(X_train, y_train)
# Tahmin yap ve doğruluğu ölç
y_pred = mannequin.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f'Mannequin accuracy: {accuracy}')
Mannequin Accuracy : 1.0
Bu kod iris veri kümesini yükleyecek, verileri özelliklere ve hedefe bölecek, bir karar ağacı modeli oluşturacak, modeli eğitecek ve modelin doğruluğunu yazdıracaktır.
Sorumluluk reddi basit bir örnektir ve her zaman tüm senaryolar için en iyi ölçüt değildir.
Karar Ağaçları (Determination Timber)
Karar ağaçları, hem sınıflandırma hem de regresyon problemlerinde kullanılabilen güçlü bir algoritmadır.
from sklearn.tree import DecisionTreeClassifier# Mannequin oluştur ve eğit
tree_model = DecisionTreeClassifier(random_state=42)
tree_model.match(X_train, y_train)
# Tahmin yap ve doğruluğu ölç
y_pred_tree = tree_model.predict(X_test)
accuracy_tree = accuracy_score(y_test, y_pred_tree)
print(f'Determination Tree Mannequin accuracy: {accuracy_tree}')
Determination Tree Mannequin Accuaracy: 1.0
Sorumluluk reddi basit bir örnektir ve her zaman tüm senaryolar için en iyi ölçüt değildir.
Denetimsiz öğrenme, etiketli veri kullanmaz ve mannequin, verilerin yapısını öğrenmeye çalışır.
Ok-Means Kümeleme (Ok-Means Clustering)
Ok-Means, verileri ok sayıda kümeye ayırmak için kullanılan yaygın bir kümeleme algoritmasıdır.
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt# Örnek veri seti oluştur
from sklearn.datasets import make_blobs
X, _ = make_blobs(n_samples=300, facilities=4, random_state=42)
# Mannequin oluştur ve eğit
kmeans = KMeans(n_clusters=4, random_state=42)
kmeans.match(X)
# Tahmin yap ve kümeleri görselleştir
y_kmeans = kmeans.predict(X)
plt.scatter(X[:, 0], X[:, 1], c=y_kmeans, s=50, cmap='viridis')
facilities = kmeans.cluster_centers_
plt.scatter(facilities[:, 0], facilities[:, 1], c='crimson', s=200, alpha=0.75)
plt.title('Ok-Means Clustering')
plt.present()
Ana Bileşen Analizi (Principal Element Evaluation — PCA)
PCA, yüksek boyutlu verileri daha düşük boyutlara indirgemek için kullanılan bir tekniktir.
from sklearn.decomposition import PCA# Mannequin oluştur ve eğit
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y_kmeans, s=50, cmap='viridis')
plt.title('PCA Visualization')
plt.present()
Mannequin performansını optimize etmek için hyperparameter tuning önemli bir adımdır. Scikit-Study’ün GridSearchCV sınıfı, bu işlemi kolaylaştırır.
from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC# Parametre uzayını tanımla
param_grid = {'C': [0.1, 1, 10], 'kernel': ['rbf', 'linear']}
# Grid search nesnesi oluştur
grid_search = GridSearchCV(SVC(), param_grid, cv=5)
# Grid search'ü uygula
grid_search.match(X_train, y_train)
print("En iyi parametreler:", grid_search.best_params_)
print("En iyi skor:", grid_search.best_score_)
En iyi parametreler: {‘C’: 1, ‘kernel’: ‘linear’}
En iyi skor: 0.9583333333333334Sorumluluk reddi basit bir örnektir ve her zaman tüm senaryolar için en iyi ölçüt değildir.
Cross-validation, modelin genelleme yeteneğini değerlendirmek için kullanılan önemli bir tekniktir.
import numpy as np# Örnek sayısını en küçük olan veri setine eşitleyin
min_samples = min(X.form[0], y.form[0])
# Rastgele örnekleme yapın
np.random.seed(42) # Tekrarlanabilirlik için
indices = np.random.alternative(X.form[0], min_samples, exchange=False)
X = X[indices]
y = y[:min_samples] # y zaten daha küçük
print("New X form:", X.form)
print("New y form:", y.form)
New X form: (150, 2)
New y form: (150,)Sorumluluk reddi basit bir örnektir ve her zaman tüm senaryolar için en iyi ölçüt değildir.
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression# Lojistik regresyon modelini oluştur
log_reg = LogisticRegression()
# 5-fold cross-validation uygula
scores = cross_val_score(log_reg, X, y, cv=5)
print("Cross-validation skorları:", scores)
print("Ortalama skor:", scores.imply())
Cross-validation skorları: [0.33333333 0.4 0.26666667 0.36666667 0.3 ]
Ortalama skor: 0.33333333333333337Sorumluluk reddi basit bir örnektir ve her zaman tüm senaryolar için en iyi ölçüt değildir.
Özellik seçimi ve mühendisliği, mannequin performansını artırmada kritik rol oynar. Scikit-Study, bu süreçleri kolaylaştıran araçlar sunar.
from sklearn.feature_selection import SelectKBest, f_classif# En iyi 2 özelliği seç
selector = SelectKBest(f_classif, ok=2)
X_new = selector.fit_transform(X, y)
print("Seçilen özellikler:", selector.get_support())
Seçilen özellikler: [ True True]
Sorumluluk reddi basit bir örnektir ve her zaman tüm senaryolar için en iyi ölçüt değildir.
Özellikle karar ağaçları gibi modeller için, modelin nasıl kararlar aldığını anlamak önemlidir.
from sklearn.tree import plot_tree
import matplotlib.pyplot as plt# Karar ağacını görselleştir
plt.determine(figsize=(20,10))
plot_tree(tree_model, feature_names=iris.feature_names, class_names=iris.target_names, crammed=True)
plt.present()
Bu karar ağacı grafiği, Iris veri setine dayalı bir sınıflandırma modelinin görsel temsili. Karar ağacı, belirli kriterlere dayanarak sınıfları (setosa, versicolor, virginica) ayırmak için kullanılır. Aşağıda bu karar ağacının detaylı analizi ve yorumu bulunmaktadır:
1.Kök Düğümü:
- Koşul: petal size (cm) <= 2.45
- Gini: 0.667 (Bu, kök düğümünde sınıfların karışıklığını gösterir)
- Örnek Sayısı: 120 (Tüm veri setindeki örneklerin sayısı)
- Değerler: [40, 41, 39] (Setosa, Versicolor, Virginica sınıflarındaki örnek sayıları)
- Sınıf: Versicolor (En çok örnek içeren sınıf)
2.Sol Alt Düğüm (Setosa):
- Koşul: petal size (cm) <= 2.45
- Gini: 0.0 (Tüm örnekler aynı sınıfa ait)
- Örnek Sayısı: 40
- Değerler: [40, 0, 0] (Tüm örnekler Setosa)
- Sınıf: Setosa
3. Sağ Alt Düğüm (Versicolor ve Virginica ayrımı):
- Koşul: petal size (cm) > 2.45
- Gini: 0.5 (Sınıflar arasında karışıklık var)
- Örnek Sayısı: 80
- Değerler: [0, 41, 39] (Versicolor ve Virginica sınıflarındaki örnek sayıları)
- Sınıf: Versicolor
4.Versicolor ve Virginica için Daha Detaylı Ayrım:
- Koşul: petal size (cm) <= 4.75
- Gini: 0.206 (Daha az karışıklık)
- Örnek Sayısı: 43
- Değerler: [0, 5, 38] (Çoğunlukla Virginica)
- Sınıf: Virginica
5.Alt Düğümler:
- Koşul: petal width (cm) <= 1.75
- Gini: 0.0
- Örnek Sayısı: 35
- Değerler: [0, 0, 35] (Tüm örnekler Virginica)
- Sınıf: Virginica
Bu karar ağacı, Iris veri setindeki çiçeklerin sınıflandırılmasını sağlayan bir modelin görsel temsili olarak, çeşitli karar noktalarında petal size ve petal width gibi özellikleri kullanarak sınıfları birbirinden ayırır. Her bir düğümde Gini katsayısı, örnek sayısı ve sınıf dağılımı gibi bilgiler verilmiştir. Bu sayede, modelin hangi karar noktalarında hangi özellikleri kullandığı ve bu kararların nasıl alındığı açıkça görülebilir.
Sorumluluk reddi basit bir örnektir ve her zaman tüm senaryolar için en iyi ölçüt değildir.
Ensemble yöntemleri, birden fazla modeli birleştirerek daha güçlü tahminler yapar. Random Forest, popüler bir ensemble yöntemidir.
from sklearn.ensemble import RandomForestClassifier# Random Forest modeli oluştur ve eğit
rf_model = RandomForestClassifier(n_estimators=100, random_state=42)
rf_model.match(X_train, y_train)
# Tahmin yap ve doğruluğu ölç
y_pred_rf = rf_model.predict(X_test)
accuracy_rf = accuracy_score(y_test, y_pred_rf)
print(f'Random Forest Mannequin accuracy: {accuracy_rf}')
Random Forest Mannequin accuracy: 1.0
Sorumluluk reddi basit bir örnektir ve her zaman tüm senaryolar için en iyi ölçüt değildir.
Accuracy dışında, farklı değerlendirme metrikleri de önemlidir.
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report, confusion_matrix# Veri setini ayır
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# Modeli eğit
log_reg = LogisticRegression()
log_reg.match(X_train, y_train)
# Tahminler yap
y_pred_log = log_reg.predict(X_test)
# Sınıflandırma raporu oluştur
print(classification_report(y_test, y_pred_log, target_names=iris.target_names))
# Confusion matrix oluştur
cm = confusion_matrix(y_test, y_pred_log)
print("Confusion Matrix:n", cm)
Bu sonuçlar, Iris veri seti üzerinde yapılan bir sınıflandırma modelinin performansını gösteriyor. Verilen metrikler ve karışıklık matrisi (confusion matrix) üzerinden modeli analiz edelim:
Performans Metrikleri:
Precision (Kesinlik):
Setosa: %17
Versicolor: %15
Virginica: %37
Kesinlik, pozitif tahminlerin ne kadarının doğru olduğunu gösterir. Burada, virginica sınıfı diğerlerinden daha yüksek kesinliğe sahip.
Recall (Duyarlılık):
Setosa: %5
Versicolor: %23
Virginica: %54
Duyarlılık, gerçek pozitif örneklerin ne kadarının doğru tahmin edildiğini gösterir. Virginica sınıfı burada da diğerlerinden daha yüksek duyarlılığa sahip.
F1-Rating:
Setosa: 0.08
Versicolor: 0.18
Virginica: 0.44
F1-Rating, precision ve recall’un harmonik ortalamasıdır. Virginica sınıfı burada da en iyi performansı gösteriyor.
Accuracy (Doğruluk): %24
Modelin genel doğruluğu oldukça düşük, sadece %24.
Macro Common:
Precision: %23
Recall: %27
F1-Rating: %23
Her sınıf için ortalama performans değerleri.
Weighted Common:
Precision: %22
Recall: %24
F1-Rating: %21
Sınıfların destek sayısına göre ağırlıklandırılmış ortalama performans değerleri.
Confusion Matrix (Karışıklık Matrisi):
Setosa:
1 doğru tahmin, 12 versicolor ve 6 virginica olarak yanlış tahmin edilmiş.
Versicolor:
3 doğru tahmin, 4 setosa ve 6 virginica olarak yanlış tahmin edilmiş.
Virginica:
7 doğru tahmin, 1 setosa ve 5 versicolor olarak yanlış tahmin edilmiş.
Modelin genel performansı oldukça düşük. En iyi performansı virginica sınıfında gösteriyor, ancak bu bile istenen seviyede değil.
Setosa sınıfında çok düşük recall (%5) ve precision (%17) değerleri mevcut, bu da modelin setosa sınıfını doğru tahmin etmekte zorlandığını gösteriyor.
Versicolor sınıfında da benzer şekilde düşük performans gözlemleniyor.
İyileştirme Önerileri:
Mannequin ve Hiperparametre Tuning:
Daha karmaşık modeller (ör. Random Forest, SVM) denenebilir ve hiperparametre optimizasyonu yapılabilir.
Özellik Mühendisliği:
Yeni özellikler eklemek veya mevcut özellikleri dönüştürmek mannequin performansını artırabilir.
Veri Dengesi:
Veri seti dengesiz olabilir. SMOTE veya benzeri yöntemlerle sınıflar arası denge sağlanabilir.
Mannequin Doğrulama:
Modelin çapraz doğrulama ile performansı değerlendirilebilir, bu sayede overfitting veya underfitting durumu tespit edilebilir.
Bu değerlendirmeler ve öneriler doğrultusunda modelin performansı iyileştirilebilir.
Sorumluluk reddi basit bir örnektir ve her zaman tüm senaryolar için en iyi ölçüt değildir.
Gerçek dünya uygulaması olarak, bir e-ticaret şirketinin müşteri segmentasyonu problemini ele alalım.
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans# Örnek veri oluştur (gerçek senaryoda bu veri müşteri veritabanından gelir)
customer_data = np.random.rand(1000, 3) # 1000 müşteri, 3 özellik (örn: yaş, toplam harcama, ziyaret sıklığı)
# Veriyi ölçeklendir
scaler = StandardScaler()
customer_data_scaled = scaler.fit_transform(customer_data)
# Ok-Means uygula
kmeans = KMeans(n_clusters=4, random_state=42)
clusters = kmeans.fit_predict(customer_data_scaled)
print("Müşteri segmentleri:", np.distinctive(clusters))
Müşteri segmentleri: [0 1 2 3]
Pipeline, veri ön işleme ve mannequin eğitimi adımlarını birleştirerek daha temiz ve verimli kod yazmamızı sağlar.
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler# Pipeline oluştur
pipeline = Pipeline([
('scaler', StandardScaler()),
('classifier', LogisticRegression())
])
# Pipeline'ı eğit ve değerlendir
pipeline.match(X_train, y_train)
accuracy_pipeline = pipeline.rating(X_test, y_test)
print(f'Pipeline Mannequin accuracy: {accuracy_pipeline}')
Pipeline Mannequin accuracy: 0.24444444444444444