Scikit-learn (sklearn) Cheat Sheet
Son güncelleme
Veriyi yükleme ve bölme
Her şeyden önce bir test seti ayır ve ona yalnızca en sonda bak.
| İşlem | Kod |
|---|---|
| Bölme fonksiyonunu içe aktar | from sklearn.model_selection import train_test_split |
| DataFrame'den özellikler ve hedef | X = df.drop(columns="target")
y = df["target"] |
| Hazır veri seti, pandas olarak | from sklearn.datasets import load_iris
X, y = load_iris(return_X_y=True, as_frame=True) |
| Deneme için sentetik veri | from sklearn.datasets import make_classification
X, y = make_classification(n_samples=500, n_features=8, random_state=0) |
| 80/20 train ve test bölmesi | X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) |
| İki parçada da sınıf oranlarını koru | train_test_split(X, y, test_size=0.2, stratify=y, random_state=42) |
| Train, validation ve test (60/20/20) | X_tmp, X_test, y_tmp, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
X_train, X_val, y_train, y_val = train_test_split(X_tmp, y_tmp, test_size=0.25, random_state=0) |
Özellikleri ön işleme
Transformer'ı yalnızca eğitim verisinde fit et, sonra iki seti de transform et. Test verisinde fit etmek bilgi sızıntısına yol açar.
| İşlem | Kod |
|---|---|
| İçe aktarmalar | from sklearn.preprocessing import StandardScaler, MinMaxScaler, OneHotEncoder, OrdinalEncoder |
| Ortalama 0, standart sapma 1 olacak şekilde ölçekle | scaler = StandardScaler()
X_train_s = scaler.fit_transform(X_train[["age", "income"]])
X_test_s = scaler.transform(X_test[["age", "income"]]) |
| 0 ile 1 aralığına ölçekle | MinMaxScaler().fit_transform(X_train[["age", "income"]]) |
| Kategorileri one-hot encode et | enc = OneHotEncoder(handle_unknown="ignore", sparse_output=False)
enc.fit_transform(X_train[["city"]]) |
| Sıralı kategorileri sayıya çevir | OrdinalEncoder(categories=[["low", "mid", "high"]]).fit_transform([["mid"], ["high"]]) |
| Eksik değerleri doldur | from sklearn.impute import SimpleImputer
SimpleImputer(strategy="median").fit_transform(X_train[["age", "income"]]) |
| Polinom ve etkileşim özellikleri | from sklearn.preprocessing import PolynomialFeatures
PolynomialFeatures(degree=2, include_bias=False).fit_transform(X_train[["age", "income"]]) |
| Dizi yerine DataFrame döndür | scaler.set_output(transform="pandas") |
| Metin etiketlerini tam sayıya çevir | from sklearn.preprocessing import LabelEncoder
LabelEncoder().fit_transform(["cat", "dog", "cat"]) |
Model seçme
Basit başla ve basit modeli geçilmesi gereken skor olarak sakla.
| Problem | Şununla başla | Sonra dene |
|---|---|---|
| Sayı tahmini (regresyon) | LinearRegression(), Ridge(alpha=1.0) | RandomForestRegressor(), HistGradientBoostingRegressor() |
| Sınıf tahmini (sınıflandırma) | LogisticRegression(max_iter=1000) | RandomForestClassifier(), HistGradientBoostingClassifier() |
| Az veri, benzer noktalar aynı etiketi alır | KNeighborsClassifier(n_neighbors=5) | SVC(kernel="rbf") |
| Okunabilir kurallar | DecisionTreeClassifier(max_depth=3) | RandomForestClassifier() |
| Etiketsiz satırları grupla | KMeans(n_clusters=3) | DBSCAN(eps=0.5) |
| Grafik ya da hız için daha az özellik | PCA(n_components=2) | TSNE(n_components=2) |
| Olağandışı satırları bul | IsolationForest(random_state=0) | LocalOutlierFactor() |
Model fit etme
Her estimator aynı kalıbı izler: ayarlarıyla oluştur, sonra fit çağır.
| İşlem | Kod |
|---|---|
| Her model için kalıp | model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train) |
| Doğrusal regresyon | from sklearn.linear_model import LinearRegression
LinearRegression() |
| Düzenlileştirilmiş doğrusal regresyon | from sklearn.linear_model import Ridge, Lasso
Ridge(alpha=1.0), Lasso(alpha=0.1) |
| Lojistik regresyon (sınıflandırma) | from sklearn.linear_model import LogisticRegression
LogisticRegression(C=1.0, max_iter=1000) |
| k en yakın komşu | from sklearn.neighbors import KNeighborsClassifier
KNeighborsClassifier(n_neighbors=5) |
| Karar ağacı | from sklearn.tree import DecisionTreeClassifier
DecisionTreeClassifier(max_depth=3, random_state=0) |
| Random forest | from sklearn.ensemble import RandomForestClassifier
RandomForestClassifier(n_estimators=200, random_state=0) |
| Gradient boosting, büyük veride hızlı | from sklearn.ensemble import HistGradientBoostingClassifier
HistGradientBoostingClassifier(random_state=0) |
| Destek vektör makinesi | from sklearn.svm import SVC
SVC(kernel="rbf", C=1.0) |
| Naive Bayes | from sklearn.naive_bayes import GaussianNB
GaussianNB() |
| Hep çoğunluk sınıfını tahmin eden baseline | from sklearn.dummy import DummyClassifier
DummyClassifier(strategy="most_frequent") |
Tahmin ve inceleme
| İşlem | Kod |
|---|---|
| Sınıf ya da değer tahmini | y_pred = model.predict(X_test) |
| Pozitif sınıfın olasılığı | model.predict_proba(X_test)[:, 1] |
| Hızlı skor: accuracy ya da R² | model.score(X_test, y_test) |
| Doğrusal modelin katsayıları | model.coef_, model.intercept_ |
| Ağaç modelinde özellik önemi | pd.Series(forest.feature_importances_, index=X_train.columns).sort_values() |
| Her özelliği karıştırarak önem | from sklearn.inspection import permutation_importance
permutation_importance(model, X_test, y_test, random_state=0).importances_mean |
| Modelin bildiği sınıf etiketleri | model.classes_ |
| Ayarları oku ve değiştir | model.get_params(), model.set_params(C=0.5) |
| Karar ağacını çiz | from sklearn.tree import plot_tree
plot_tree(tree, filled=True, feature_names=list(X_train.columns)) |
Sınıflandırma metrikleri
Accuracy tek başına nadir bir sınıftaki hataları gizler. Precision, recall ve confusion matrix'e de bak.
| İşlem | Kod |
|---|---|
| İçe aktarmalar | from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score |
| Accuracy | accuracy_score(y_test, y_pred) |
| Precision, recall ve F1 | precision_score(y_test, y_pred), recall_score(y_test, y_pred), f1_score(y_test, y_pred) |
| Çok sınıf için F1 | f1_score(y_test, y_pred, average="macro") |
| Sınıf başına tüm metrikler | from sklearn.metrics import classification_report
print(classification_report(y_test, y_pred)) |
| Confusion matrix | from sklearn.metrics import confusion_matrix
confusion_matrix(y_test, y_pred) |
| Confusion matrix'i çiz | from sklearn.metrics import ConfusionMatrixDisplay
ConfusionMatrixDisplay.from_estimator(model, X_test, y_test) |
| Olasılıklardan ROC AUC | from sklearn.metrics import roc_auc_score
roc_auc_score(y_test, model.predict_proba(X_test)[:, 1]) |
| ROC eğrisini çiz | from sklearn.metrics import RocCurveDisplay
RocCurveDisplay.from_estimator(model, X_test, y_test) |
| Dengesiz sınıflar için accuracy | from sklearn.metrics import balanced_accuracy_score
balanced_accuracy_score(y_test, y_pred) |
| Kendi karar eşiğin | y_pred = (model.predict_proba(X_test)[:, 1] >= 0.3).astype(int) |
Regresyon metrikleri
Hata metrikleri hedefin biriminde ölçülür (düşük olan daha iyi). R² açıklanan varyans oranıdır (1 mükemmel demek).
| İşlem | Kod |
|---|---|
| İçe aktarmalar | from sklearn.metrics import mean_absolute_error, mean_squared_error, root_mean_squared_error, r2_score |
| Ortalama mutlak hata (MAE) | mean_absolute_error(y_test, y_pred) |
| Ortalama kare hata ve karekökü | mean_squared_error(y_test, y_pred), root_mean_squared_error(y_test, y_pred) |
| R² skoru | r2_score(y_test, y_pred) |
| Ortalama mutlak yüzde hata (MAPE) | from sklearn.metrics import mean_absolute_percentage_error
mean_absolute_percentage_error(y_test, y_pred) |
| Tahmini gerçeğe karşı çiz | from sklearn.metrics import PredictionErrorDisplay
PredictionErrorDisplay.from_predictions(y_test, y_pred, kind="actual_vs_predicted") |
Pipeline'lar
Pipeline ön işlemeyi ve modeli tek bir estimator'da birleştirir; böylece cross-validation ve grid search her adımı yalnızca eğitim fold'larında fit eder.
| İşlem | Kod |
|---|---|
| İçe aktarmalar | from sklearn.pipeline import make_pipeline, Pipeline |
| Ölçekle, sonra model fit et | pipe = make_pipeline(StandardScaler(), LogisticRegression(max_iter=1000))
pipe.fit(X_train, y_train) |
| Kendi adlarını verdiğin adımlar | pipe = Pipeline([("scale", StandardScaler()), ("model", LogisticRegression(max_iter=1000))]) |
| İçerideki bir adıma eriş | pipe.named_steps["model"], pipe[-1] |
| Farklı sütunlar için farklı adımlar | from sklearn.compose import ColumnTransformer
pre = ColumnTransformer([
("num", StandardScaler(), ["age", "income"]),
("cat", OneHotEncoder(handle_unknown="ignore"), ["city"]),
]) |
| Ön işleme ve model tek nesnede | model = make_pipeline(pre, RandomForestClassifier(random_state=0))
model.fit(X_train, y_train)
model.score(X_test, y_test) |
| Sütunları tipe göre seç | from sklearn.compose import make_column_selector
make_column_selector(dtype_include="number")(X_train) |
| Önce doldur, sonra ölçekle | make_pipeline(SimpleImputer(strategy="median"), StandardScaler()) |
| Çıktı özelliklerinin adları | pre.get_feature_names_out() |
Cross-validation
Cross-validation modeli birkaç farklı bölmede eğitip puanlar; bu da tek bir test setinden daha istikrarlı bir tahmin verir.
| İşlem | Kod |
|---|---|
| İçe aktarmalar | from sklearn.model_selection import cross_val_score, cross_validate, KFold, StratifiedKFold |
| 5 fold üzerinde skor | scores = cross_val_score(pipe, X, y, cv=5)
scores.mean(), scores.std() |
| Metriği seç | cross_val_score(pipe, X, y, cv=5, scoring="f1_macro") |
| Karıştırılmış fold'lar | cv = KFold(n_splits=5, shuffle=True, random_state=0) |
| Her fold'da aynı sınıf dengesi | cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=0) |
| Birkaç metrik ve train skorları | cross_validate(pipe, X, y, cv=cv, scoring=["accuracy", "f1"], return_train_score=True) |
| Her satır için fold dışında yapılan tahmin | from sklearn.model_selection import cross_val_predict
cross_val_predict(pipe, X, y, cv=5) |
| Gruba göre fold'lar, zaman sırasına göre fold'lar | from sklearn.model_selection import GroupKFold, TimeSeriesSplit
GroupKFold(n_splits=5), TimeSeriesSplit(n_splits=5) |
| Geçerli tüm scoring adları | from sklearn.metrics import get_scorer_names
get_scorer_names() |
Grid search ve ayarlama
Arama, her ayar için modeli cross-validation ile fit eder, en iyisini tutar ve onu tüm eğitim verisiyle yeniden fit eder.
| İşlem | Kod |
|---|---|
| İçe aktarmalar | from sklearn.model_selection import GridSearchCV, RandomizedSearchCV |
| Tüm kombinasyonları dene | grid = GridSearchCV(RandomForestClassifier(random_state=0), {"n_estimators": [50, 100], "max_depth": [None, 5]}, cv=5)
grid.fit(X_train, y_train) |
| En iyi ayarlar ve skorları | grid.best_params_, grid.best_score_ |
| En iyi modeli kullan | grid.best_estimator_.predict(X_test), grid.score(X_test, y_test) |
| Pipeline içindeki bir adımı ayarla | GridSearchCV(pipe, {"logisticregression__C": [0.1, 1, 10]}, cv=5).fit(X_train, y_train) |
| Dağılımlardan rastgele ayarlar | from scipy.stats import randint
search = RandomizedSearchCV(RandomForestClassifier(random_state=0), {"n_estimators": randint(50, 150)}, n_iter=5, cv=3, random_state=0)
search.fit(X_train, y_train) |
| Tüm CPU çekirdeklerini kullan | GridSearchCV(pipe, {"logisticregression__C": [0.1, 1]}, cv=5, n_jobs=-1) |
| Tüm sonuçlar tablo olarak | pd.DataFrame(grid.cv_results_).sort_values("rank_test_score") |
Kümeleme ve boyut indirgeme
Denetimsiz modeller yalnızca X ile öğrenir. İkisi de mesafe kullandığı için önce özellikleri ölçekle.
| İşlem | Kod |
|---|---|
| k-means kümeleri | from sklearn.cluster import KMeans
km = KMeans(n_clusters=3, random_state=0)
labels = km.fit_predict(X) |
| Küme merkezleri ve inertia | km.cluster_centers_, km.inertia_ |
| Kümeler ne kadar iyi ayrışmış | from sklearn.metrics import silhouette_score
silhouette_score(X, labels) |
| Yoğunluğa dayalı kümeler, gürültü -1 | from sklearn.cluster import DBSCAN
DBSCAN(eps=0.5, min_samples=5).fit_predict(X) |
| 2 bileşene izdüşür | from sklearn.decomposition import PCA
pca = PCA(n_components=2)
X_2d = pca.fit_transform(X) |
| Her bileşenin açıkladığı varyans | pca.explained_variance_ratio_ |
| Varyansın %95'ini koru | PCA(n_components=0.95).fit_transform(X) |
scikit-learn 1.9: eski kullanımlar ve yerine yazman gerekenler
Eski eğitimlerden kopyalanan kod scikit-learn 1.9'da hata ya da uyarı verebilir. Onun yerine scikit-learn 1.9 sütunundaki kullanımları yaz.
| İşlem | scikit-learn 1.9 | Eski kullanım |
|---|---|---|
| Kök ortalama kare hata (RMSE) | root_mean_squared_error(y_test, y_pred) | mean_squared_error(y_test, y_pred, squared=False) |
| Yoğun (dense) one-hot çıktısı | OneHotEncoder(sparse_output=False) | OneHotEncoder(sparse=False) |
| L1 (lasso) lojistik regresyon | LogisticRegression(l1_ratio=1, solver="liblinear") | LogisticRegression(penalty="l1", solver="liblinear") |
| Düzenlileştirmesiz lojistik regresyon | LogisticRegression(C=np.inf) | LogisticRegression(penalty=None) |
Kaydetme, yükleme ve tekrarlanabilirlik
| İşlem | Kod |
|---|---|
| Eğitilmiş bir modeli ya da pipeline'ı kaydet | import joblib
joblib.dump(model, "model.joblib") |
| Geri yükle | model = joblib.load("model.joblib") |
| Her çalıştırmada aynı sonuç | random_state=0 |
| Hangi sürüm kurulu | import sklearn
sklearn.__version__ |
Gerçek bir makine öğrenmesi iş akışının arkasındaki scikit-learn kodları, yazdığın sırayla: veriyi yükle ve böl, ön işle, bir model seç, fit et ve tahmin yap, sonucu ölç, adımları bir pipeline'da birleştir, cross-validation yap ve grid search ile ayarla. Her satırda yapıştırabileceğin kısa bir kod parçası ve ne yaptığını anlatan tek bir cümle var.
scikit-learn'deki her model aynı API'yi paylaşır: fit eğitim verisinden öğrenir, predict ve transform öğrendiğini uygular. Buradaki her şey Coddy'nin kullandığı sürüm olan scikit-learn 1.9 için yazıldı; özellikler için X, hedef için y kullanılır. scikit-learn NumPy dizileri ve pandas DataFrame'leri ile çalışır, grafikler için de Matplotlib hile sayfasına bakabilirsin. Python'a yeni mi başlıyorsun? Önce Python hile sayfası ile başla.
scikit-learn hile sayfası hakkında sık sorulan sorular
Bu scikit-learn hile sayfası ücretsiz mi?
sklearn ile scikit-learn aynı şey mi?
pip install scikit-learn), sklearn ise kodda içe aktardığın addır (from sklearn.linear_model import LinearRegression). Bir sklearn cheat sheet ile bir scikit-learn cheat sheet aynı konuyu kapsar.fit, transform ve fit_transform arasındaki fark nedir?
fit veriden öğrenir: bir scaler her sütunun ortalamasını, bir model de ağırlıklarını öğrenir. transform öğrenileni uygular, fit_transform ise ikisini tek çağrıda yapar. Eğitim setinde fit_transform, test setinde yalnızca transform kullan; aksi hâlde test verisi eğitime sızar. Pipeline bunu senin yerine yapar.Özelliklerimi ölçeklemem gerekir mi?
Hangi scikit-learn modeliyle başlamalıyım?
LinearRegression, sınıf tahmini için LogisticRegression. Sonra RandomForestClassifier ya da HistGradientBoostingClassifier (veya regressor sürümlerini) dene, cross-validation ile karşılaştır ve en iyisini GridSearchCV ile ayarla.Bu hile sayfası hangi scikit-learn sürümünü kapsıyor?
mean_squared_error içindeki squared=False, OneHotEncoder içindeki sparse=False ve LogisticRegression fonksiyonunun penalty argümanı, eski kullanımlar tablosunda yerine yazman gerekenlerin yanında yer alır.