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?
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?
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?
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.