Menu
CoddyTech

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.

İşlemKod
Bölme fonksiyonunu içe aktarfrom sklearn.model_selection import train_test_split
DataFrame'den özellikler ve hedefX = df.drop(columns="target") y = df["target"]
Hazır veri seti, pandas olarakfrom sklearn.datasets import load_iris X, y = load_iris(return_X_y=True, as_frame=True)
Deneme için sentetik verifrom sklearn.datasets import make_classification X, y = make_classification(n_samples=500, n_features=8, random_state=0)
80/20 train ve test bölmesiX_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ı korutrain_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.

İşlemKod
İçe aktarmalarfrom sklearn.preprocessing import StandardScaler, MinMaxScaler, OneHotEncoder, OrdinalEncoder
Ortalama 0, standart sapma 1 olacak şekilde ölçeklescaler = 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çekleMinMaxScaler().fit_transform(X_train[["age", "income"]])
Kategorileri one-hot encode etenc = OneHotEncoder(handle_unknown="ignore", sparse_output=False) enc.fit_transform(X_train[["city"]])
Sıralı kategorileri sayıya çevirOrdinalEncoder(categories=[["low", "mid", "high"]]).fit_transform([["mid"], ["high"]])
Eksik değerleri doldurfrom sklearn.impute import SimpleImputer SimpleImputer(strategy="median").fit_transform(X_train[["age", "income"]])
Polinom ve etkileşim özelliklerifrom sklearn.preprocessing import PolynomialFeatures PolynomialFeatures(degree=2, include_bias=False).fit_transform(X_train[["age", "income"]])
Dizi yerine DataFrame döndürscaler.set_output(transform="pandas")
Metin etiketlerini tam sayıya çevirfrom 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şlaSonra 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ırKNeighborsClassifier(n_neighbors=5)SVC(kernel="rbf")
Okunabilir kurallarDecisionTreeClassifier(max_depth=3)RandomForestClassifier()
Etiketsiz satırları gruplaKMeans(n_clusters=3)DBSCAN(eps=0.5)
Grafik ya da hız için daha az özellikPCA(n_components=2)TSNE(n_components=2)
Olağandışı satırları bulIsolationForest(random_state=0)LocalOutlierFactor()

Model fit etme

Her estimator aynı kalıbı izler: ayarlarıyla oluştur, sonra fit çağır.

İşlemKod
Her model için kalıpmodel = LogisticRegression(max_iter=1000) model.fit(X_train, y_train)
Doğrusal regresyonfrom sklearn.linear_model import LinearRegression LinearRegression()
Düzenlileştirilmiş doğrusal regresyonfrom 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şufrom sklearn.neighbors import KNeighborsClassifier KNeighborsClassifier(n_neighbors=5)
Karar ağacıfrom sklearn.tree import DecisionTreeClassifier DecisionTreeClassifier(max_depth=3, random_state=0)
Random forestfrom 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 makinesifrom sklearn.svm import SVC SVC(kernel="rbf", C=1.0)
Naive Bayesfrom sklearn.naive_bayes import GaussianNB GaussianNB()
Hep çoğunluk sınıfını tahmin eden baselinefrom sklearn.dummy import DummyClassifier DummyClassifier(strategy="most_frequent")

Tahmin ve inceleme

İşlemKod
Sınıf ya da değer tahminiy_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 önemipd.Series(forest.feature_importances_, index=X_train.columns).sort_values()
Her özelliği karıştırarak önemfrom sklearn.inspection import permutation_importance permutation_importance(model, X_test, y_test, random_state=0).importances_mean
Modelin bildiği sınıf etiketlerimodel.classes_
Ayarları oku ve değiştirmodel.get_params(), model.set_params(C=0.5)
Karar ağacını çizfrom 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.

İşlemKod
İçe aktarmalarfrom sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
Accuracyaccuracy_score(y_test, y_pred)
Precision, recall ve F1precision_score(y_test, y_pred), recall_score(y_test, y_pred), f1_score(y_test, y_pred)
Çok sınıf için F1f1_score(y_test, y_pred, average="macro")
Sınıf başına tüm metriklerfrom sklearn.metrics import classification_report print(classification_report(y_test, y_pred))
Confusion matrixfrom sklearn.metrics import confusion_matrix confusion_matrix(y_test, y_pred)
Confusion matrix'i çizfrom sklearn.metrics import ConfusionMatrixDisplay ConfusionMatrixDisplay.from_estimator(model, X_test, y_test)
Olasılıklardan ROC AUCfrom sklearn.metrics import roc_auc_score roc_auc_score(y_test, model.predict_proba(X_test)[:, 1])
ROC eğrisini çizfrom sklearn.metrics import RocCurveDisplay RocCurveDisplay.from_estimator(model, X_test, y_test)
Dengesiz sınıflar için accuracyfrom sklearn.metrics import balanced_accuracy_score balanced_accuracy_score(y_test, y_pred)
Kendi karar eşiğiny_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).

İşlemKod
İçe aktarmalarfrom 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² skorur2_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şı çizfrom 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.

İşlemKod
İçe aktarmalarfrom sklearn.pipeline import make_pipeline, Pipeline
Ölçekle, sonra model fit etpipe = make_pipeline(StandardScaler(), LogisticRegression(max_iter=1000)) pipe.fit(X_train, y_train)
Kendi adlarını verdiğin adımlarpipe = 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ımlarfrom sklearn.compose import ColumnTransformer pre = ColumnTransformer([ ("num", StandardScaler(), ["age", "income"]), ("cat", OneHotEncoder(handle_unknown="ignore"), ["city"]), ])
Ön işleme ve model tek nesnedemodel = 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çeklemake_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.

İşlemKod
İçe aktarmalarfrom sklearn.model_selection import cross_val_score, cross_validate, KFold, StratifiedKFold
5 fold üzerinde skorscores = 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'larcv = KFold(n_splits=5, shuffle=True, random_state=0)
Her fold'da aynı sınıf dengesicv = 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 tahminfrom 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'larfrom 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.

İşlemKod
İçe aktarmalarfrom sklearn.model_selection import GridSearchCV, RandomizedSearchCV
Tüm kombinasyonları denegrid = 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 kullangrid.best_estimator_.predict(X_test), grid.score(X_test, y_test)
Pipeline içindeki bir adımı ayarlaGridSearchCV(pipe, {"logisticregression__C": [0.1, 1, 10]}, cv=5).fit(X_train, y_train)
Dağılımlardan rastgele ayarlarfrom 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 kullanGridSearchCV(pipe, {"logisticregression__C": [0.1, 1]}, cv=5, n_jobs=-1)
Tüm sonuçlar tablo olarakpd.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.

İşlemKod
k-means kümelerifrom sklearn.cluster import KMeans km = KMeans(n_clusters=3, random_state=0) labels = km.fit_predict(X)
Küme merkezleri ve inertiakm.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ü -1from sklearn.cluster import DBSCAN DBSCAN(eps=0.5, min_samples=5).fit_predict(X)
2 bileşene izdüşürfrom sklearn.decomposition import PCA pca = PCA(n_components=2) X_2d = pca.fit_transform(X)
Her bileşenin açıkladığı varyanspca.explained_variance_ratio_
Varyansın %95'ini koruPCA(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.

İşlemscikit-learn 1.9Eski 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 regresyonLogisticRegression(l1_ratio=1, solver="liblinear")LogisticRegression(penalty="l1", solver="liblinear")
Düzenlileştirmesiz lojistik regresyonLogisticRegression(C=np.inf)LogisticRegression(penalty=None)

Kaydetme, yükleme ve tekrarlanabilirlik

İşlemKod
Eğitilmiş bir modeli ya da pipeline'ı kaydetimport joblib joblib.dump(model, "model.joblib")
Geri yüklemodel = joblib.load("model.joblib")
Her çalıştırmada aynı sonuçrandom_state=0
Hangi sürüm kuruluimport 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?
Evet. Bu scikit-learn hile sayfası tamamen ücretsiz ve kayıt gerektirmez. Yer imlerine ekle ya da tarayıcından PDF olarak yazdır; bir pipeline, metrik ya da grid search için tam çağrıya ihtiyacın olduğunda geri gel.
sklearn ile scikit-learn aynı şey mi?
Evet. scikit-learn hem kütüphanenin hem de kurduğun paketin adıdır (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?
Mesafe ya da gradyan kullanan modeller için evet: k en yakın komşu, SVM'ler, k-means, PCA ve düzenlileştirilmiş doğrusal ve lojistik regresyon ölçeklenmiş veride daha iyi çalışır. Karar ağaçları, random forest ve gradient boosting gibi ağaç modelleri ölçekleme gerektirmez. Scaler'ı bir pipeline'a koy ki yalnızca eğitim verisinde fit edilsin.
Hangi scikit-learn modeliyle başlamalıyım?
Baseline olarak basit ve hızlı bir modelle başla: sayı tahmini için 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?
Coddy'nin kullandığı sürüm olan scikit-learn 1.9, NumPy 2 ve pandas 3 üzerinde. Artık hata ya da uyarı veren eski çağrılar, örneğin 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.
scikit-learn kodunu online çalıştırabilir miyim?
Evet. Ücretsiz Matplotlib playground, Python'u scikit-learn, pandas, NumPy ve Matplotlib ile birlikte tarayıcında çalıştırır; bu hile sayfasındaki herhangi bir kod parçasını yapıştırıp hiçbir şey kurmadan çalıştırabilirsin. Coddy'nin Machine Learning kursu, veriyi bölmekten model ayarlamaya kadar bu sayfadaki tüm iş akışını adım adım öğretir.
Coddy programlama dilleri çizimi

Coddy ile Scikit-learn öğren

BAŞLA