Menu
CoddyTech

Cheat Sheet Scikit-learn (sklearn)

Terakhir diperbarui

Memuat dan membagi data

Sisihkan test set sebelum melakukan apa pun, dan lihat isinya hanya di akhir.

TugasKode
Mengimpor fungsi pembagi datafrom sklearn.model_selection import train_test_split
Fitur dan target dari DataFrameX = df.drop(columns="target") y = df["target"]
Dataset bawaan sebagai pandasfrom sklearn.datasets import load_iris X, y = load_iris(return_X_y=True, as_frame=True)
Data sintetis untuk bereksperimenfrom sklearn.datasets import make_classification X, y = make_classification(n_samples=500, n_features=8, random_state=0)
Pembagian data latih dan uji 80/20X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
Menjaga proporsi kelas di kedua bagiantrain_test_split(X, y, test_size=0.2, stratify=y, random_state=42)
Data latih, validasi, dan uji (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)

Preprocessing fitur

Fit transformer hanya pada data latih, lalu transform kedua set. Fit pada data uji membocorkan informasi.

TugasKode
Importfrom sklearn.preprocessing import StandardScaler, MinMaxScaler, OneHotEncoder, OrdinalEncoder
Skala ke rata-rata 0 dan simpangan baku 1scaler = StandardScaler() X_train_s = scaler.fit_transform(X_train[["age", "income"]]) X_test_s = scaler.transform(X_test[["age", "income"]])
Skala ke rentang 0 sampai 1MinMaxScaler().fit_transform(X_train[["age", "income"]])
One-hot encoding untuk kategorienc = OneHotEncoder(handle_unknown="ignore", sparse_output=False) enc.fit_transform(X_train[["city"]])
Mengubah kategori berurutan menjadi angkaOrdinalEncoder(categories=[["low", "mid", "high"]]).fit_transform([["mid"], ["high"]])
Mengisi nilai yang hilangfrom sklearn.impute import SimpleImputer SimpleImputer(strategy="median").fit_transform(X_train[["age", "income"]])
Fitur polinomial dan interaksifrom sklearn.preprocessing import PolynomialFeatures PolynomialFeatures(degree=2, include_bias=False).fit_transform(X_train[["age", "income"]])
Mendapatkan DataFrame, bukan arrayscaler.set_output(transform="pandas")
Label teks menjadi bilangan bulatfrom sklearn.preprocessing import LabelEncoder LabelEncoder().fit_transform(["cat", "dog", "cat"])

Memilih model

Mulailah dari yang sederhana dan jadikan model sederhana itu sebagai skor yang harus dikalahkan.

MasalahMulai denganLalu coba
Memprediksi angka (regresi)LinearRegression(), Ridge(alpha=1.0)RandomForestRegressor(), HistGradientBoostingRegressor()
Memprediksi kelas (klasifikasi)LogisticRegression(max_iter=1000)RandomForestClassifier(), HistGradientBoostingClassifier()
Data kecil, titik yang mirip punya label yang samaKNeighborsClassifier(n_neighbors=5)SVC(kernel="rbf")
Aturan yang bisa kamu bacaDecisionTreeClassifier(max_depth=3)RandomForestClassifier()
Mengelompokkan baris tanpa labelKMeans(n_clusters=3)DBSCAN(eps=0.5)
Lebih sedikit fitur untuk plot atau kecepatanPCA(n_components=2)TSNE(n_components=2)
Menemukan baris yang tidak biasaIsolationForest(random_state=0)LocalOutlierFactor()

Fit model

Setiap estimator mengikuti pola yang sama: buat dengan pengaturannya, lalu panggil fit.

TugasKode
Pola untuk setiap modelmodel = LogisticRegression(max_iter=1000) model.fit(X_train, y_train)
Regresi linearfrom sklearn.linear_model import LinearRegression LinearRegression()
Regresi linear dengan regularisasifrom sklearn.linear_model import Ridge, Lasso Ridge(alpha=1.0), Lasso(alpha=0.1)
Regresi logistik (klasifikasi)from sklearn.linear_model import LogisticRegression LogisticRegression(C=1.0, max_iter=1000)
k nearest neighborsfrom sklearn.neighbors import KNeighborsClassifier KNeighborsClassifier(n_neighbors=5)
Decision treefrom 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, cepat untuk data besarfrom sklearn.ensemble import HistGradientBoostingClassifier HistGradientBoostingClassifier(random_state=0)
Support vector machinefrom sklearn.svm import SVC SVC(kernel="rbf", C=1.0)
Naive Bayesfrom sklearn.naive_bayes import GaussianNB GaussianNB()
Baseline yang selalu menebak kelas mayoritasfrom sklearn.dummy import DummyClassifier DummyClassifier(strategy="most_frequent")

Predict dan memeriksa model

TugasKode
Memprediksi kelas atau nilaiy_pred = model.predict(X_test)
Probabilitas kelas positifmodel.predict_proba(X_test)[:, 1]
Skor cepat: akurasi atau R²model.score(X_test, y_test)
Koefisien model linearmodel.coef_, model.intercept_
Feature importance dari model treepd.Series(forest.feature_importances_, index=X_train.columns).sort_values()
Importance dengan mengacak setiap fiturfrom sklearn.inspection import permutation_importance permutation_importance(model, X_test, y_test, random_state=0).importances_mean
Label kelas yang dikenal modelmodel.classes_
Membaca dan mengubah pengaturanmodel.get_params(), model.set_params(C=0.5)
Menggambar decision treefrom sklearn.tree import plot_tree plot_tree(tree, filled=True, feature_names=list(X_train.columns))

Metrik klasifikasi

Akurasi saja menyembunyikan kesalahan pada kelas yang jarang. Periksa juga precision, recall, dan confusion matrix.

TugasKode
Importfrom sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
Akurasiaccuracy_score(y_test, y_pred)
Precision, recall, dan F1precision_score(y_test, y_pred), recall_score(y_test, y_pred), f1_score(y_test, y_pred)
F1 untuk beberapa kelasf1_score(y_test, y_pred, average="macro")
Semua metrik per kelasfrom 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)
Plot confusion matrixfrom sklearn.metrics import ConfusionMatrixDisplay ConfusionMatrixDisplay.from_estimator(model, X_test, y_test)
ROC AUC dari probabilitasfrom sklearn.metrics import roc_auc_score roc_auc_score(y_test, model.predict_proba(X_test)[:, 1])
Plot kurva ROCfrom sklearn.metrics import RocCurveDisplay RocCurveDisplay.from_estimator(model, X_test, y_test)
Akurasi untuk kelas yang tidak seimbangfrom sklearn.metrics import balanced_accuracy_score balanced_accuracy_score(y_test, y_pred)
Ambang keputusanmu sendiriy_pred = (model.predict_proba(X_test)[:, 1] >= 0.3).astype(int)

Metrik regresi

Metrik error memakai satuan target (makin kecil makin baik). R² adalah porsi varians yang terjelaskan (1 berarti sempurna).

TugasKode
Importfrom sklearn.metrics import mean_absolute_error, mean_squared_error, root_mean_squared_error, r2_score
Mean absolute errormean_absolute_error(y_test, y_pred)
Mean squared error dan akarnyamean_squared_error(y_test, y_pred), root_mean_squared_error(y_test, y_pred)
Skor R²r2_score(y_test, y_pred)
Mean absolute percentage errorfrom sklearn.metrics import mean_absolute_percentage_error mean_absolute_percentage_error(y_test, y_pred)
Plot prediksi terhadap nilai sebenarnyafrom sklearn.metrics import PredictionErrorDisplay PredictionErrorDisplay.from_predictions(y_test, y_pred, kind="actual_vs_predicted")

Pipeline

Pipeline merangkai preprocessing dan model menjadi satu estimator, jadi cross-validation dan grid search melakukan fit setiap langkah hanya pada fold data latih.

TugasKode
Importfrom sklearn.pipeline import make_pipeline, Pipeline
Skala, lalu fit modelpipe = make_pipeline(StandardScaler(), LogisticRegression(max_iter=1000)) pipe.fit(X_train, y_train)
Langkah dengan nama buatanmu sendiripipe = Pipeline([("scale", StandardScaler()), ("model", LogisticRegression(max_iter=1000))])
Mengakses langkah di dalamnyapipe.named_steps["model"], pipe[-1]
Langkah berbeda untuk kolom berbedafrom sklearn.compose import ColumnTransformer pre = ColumnTransformer([ ("num", StandardScaler(), ["age", "income"]), ("cat", OneHotEncoder(handle_unknown="ignore"), ["city"]), ])
Preprocessing dan model dalam satu objectmodel = make_pipeline(pre, RandomForestClassifier(random_state=0)) model.fit(X_train, y_train) model.score(X_test, y_test)
Memilih kolom berdasarkan tipefrom sklearn.compose import make_column_selector make_column_selector(dtype_include="number")(X_train)
Isi nilai hilang, lalu skalamake_pipeline(SimpleImputer(strategy="median"), StandardScaler())
Nama fitur outputpre.get_feature_names_out()

Cross-validation

Cross-validation melatih dan menilai model di beberapa pembagian data, sehingga perkiraannya lebih stabil daripada satu test set.

TugasKode
Importfrom sklearn.model_selection import cross_val_score, cross_validate, KFold, StratifiedKFold
Skor pada 5 foldscores = cross_val_score(pipe, X, y, cv=5) scores.mean(), scores.std()
Memilih metrikcross_val_score(pipe, X, y, cv=5, scoring="f1_macro")
Fold yang diacakcv = KFold(n_splits=5, shuffle=True, random_state=0)
Keseimbangan kelas yang sama di setiap foldcv = StratifiedKFold(n_splits=5, shuffle=True, random_state=0)
Beberapa metrik dan skor data latihcross_validate(pipe, X, y, cv=cv, scoring=["accuracy", "f1"], return_train_score=True)
Prediksi untuk setiap baris, dibuat di luar fold-nyafrom sklearn.model_selection import cross_val_predict cross_val_predict(pipe, X, y, cv=5)
Fold per grup, fold menurut urutan waktufrom sklearn.model_selection import GroupKFold, TimeSeriesSplit GroupKFold(n_splits=5), TimeSeriesSplit(n_splits=5)
Semua nama scoring yang validfrom sklearn.metrics import get_scorer_names get_scorer_names()

Grid search dan tuning

Pencarian melakukan fit model untuk setiap pengaturan dengan cross-validation, menyimpan yang terbaik, lalu melakukan fit ulang pada seluruh data latih.

TugasKode
Importfrom sklearn.model_selection import GridSearchCV, RandomizedSearchCV
Mencoba setiap kombinasigrid = GridSearchCV(RandomForestClassifier(random_state=0), {"n_estimators": [50, 100], "max_depth": [None, 5]}, cv=5) grid.fit(X_train, y_train)
Pengaturan terbaik dan skornyagrid.best_params_, grid.best_score_
Memakai model terbaikgrid.best_estimator_.predict(X_test), grid.score(X_test, y_test)
Tuning sebuah langkah di dalam pipelineGridSearchCV(pipe, {"logisticregression__C": [0.1, 1, 10]}, cv=5).fit(X_train, y_train)
Pengaturan acak dari distribusifrom 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)
Memakai semua core CPUGridSearchCV(pipe, {"logisticregression__C": [0.1, 1]}, cv=5, n_jobs=-1)
Semua hasil sebagai tabelpd.DataFrame(grid.cv_results_).sort_values("rank_test_score")

Clustering dan reduksi dimensi

Model unsupervised belajar dari X saja. Skala dulu fiturnya, karena keduanya memakai jarak.

TugasKode
Cluster k-meansfrom sklearn.cluster import KMeans km = KMeans(n_clusters=3, random_state=0) labels = km.fit_predict(X)
Pusat cluster dan inertiakm.cluster_centers_, km.inertia_
Seberapa terpisah cluster-nyafrom sklearn.metrics import silhouette_score silhouette_score(X, labels)
Cluster berbasis kepadatan, noise bernilai -1from sklearn.cluster import DBSCAN DBSCAN(eps=0.5, min_samples=5).fit_predict(X)
Proyeksi ke 2 komponenfrom sklearn.decomposition import PCA pca = PCA(n_components=2) X_2d = pca.fit_transform(X)
Varians yang dijelaskan setiap komponenpca.explained_variance_ratio_
Mempertahankan 95% variansPCA(n_components=0.95).fit_transform(X)

scikit-learn 1.9: bentuk lama dan yang ditulis sekarang

Kode yang disalin dari tutorial lama bisa gagal atau memunculkan peringatan di scikit-learn 1.9. Tulis bentuk di kolom scikit-learn 1.9 sebagai gantinya.

Tugasscikit-learn 1.9Bentuk lama
Root mean squared errorroot_mean_squared_error(y_test, y_pred)mean_squared_error(y_test, y_pred, squared=False)
Output one-hot yang padat (dense)OneHotEncoder(sparse_output=False)OneHotEncoder(sparse=False)
Regresi logistik L1 (lasso)LogisticRegression(l1_ratio=1, solver="liblinear")LogisticRegression(penalty="l1", solver="liblinear")
Regresi logistik tanpa regularisasiLogisticRegression(C=np.inf)LogisticRegression(penalty=None)

Menyimpan, memuat dan mereproduksi

TugasKode
Menyimpan model atau pipeline yang sudah dilatih (fit)import joblib joblib.dump(model, "model.joblib")
Memuatnya kembalimodel = joblib.load("model.joblib")
Hasil yang sama di setiap runrandom_state=0
Versi yang terinstalimport sklearn sklearn.__version__

Kode scikit-learn di balik alur kerja machine learning sungguhan, sesuai urutan kamu menulisnya: memuat dan membagi data, preprocessing, memilih model, fit dan predict, mengukur hasilnya, merangkai langkah-langkahnya menjadi pipeline, cross-validation, dan tuning dengan grid search. Setiap baris berisi potongan kode singkat yang bisa kamu tempel, plus satu kalimat tentang kegunaannya.

Setiap model di scikit-learn memakai satu API yang sama: fit belajar dari data latih, predict dan transform menerapkan apa yang sudah dipelajari. Semua yang ada di sini ditulis untuk scikit-learn 1.9, versi yang dijalankan Coddy, dengan X untuk fitur dan y untuk target. scikit-learn bekerja dengan array NumPy dan DataFrame pandas, dan cheat sheet Matplotlib membahas plot-nya. Baru mengenal Python? Mulailah dari cheat sheet Python.

FAQ cheat sheet scikit-learn

Apakah cheat sheet scikit-learn ini gratis?

Ya. Cheat sheet scikit-learn ini sepenuhnya gratis, tanpa perlu daftar. Simpan di bookmark, atau cetak ke PDF dari browsermu, dan kembali kapan pun kamu butuh pemanggilan yang tepat untuk pipeline, metrik, atau grid search.

Apakah sklearn sama dengan scikit-learn?
Sama. scikit-learn adalah nama library-nya sekaligus nama paket yang kamu instal (pip install scikit-learn), dan sklearn adalah nama yang kamu impor di kode (from sklearn.linear_model import LinearRegression). Cheat sheet sklearn dan cheat sheet scikit-learn membahas hal yang sama.
Apa perbedaan fit, transform, dan fit_transform?
fit belajar dari data: scaler mempelajari rata-rata setiap kolom, model mempelajari bobotnya. transform menerapkan apa yang sudah dipelajari, dan fit_transform melakukan keduanya dalam satu pemanggilan. Pakai fit_transform pada data latih dan hanya transform pada data uji, kalau tidak data uji akan bocor ke dalam pelatihan. Pipeline melakukan ini untukmu.
Apakah saya perlu melakukan scaling pada fitur?

Untuk model yang memakai jarak atau gradien, ya: k nearest neighbors, SVM, k-means, PCA, serta regresi linear dan logistik dengan regularisasi semuanya bekerja lebih baik pada data yang sudah diskalakan. Model tree seperti decision tree, random forest, dan gradient boosting tidak butuh scaling. Taruh scaler di dalam pipeline agar fit hanya dilakukan pada data latih.

Model scikit-learn mana yang sebaiknya saya pakai untuk memulai?
Mulailah dengan model sederhana dan cepat sebagai baseline: LinearRegression untuk memprediksi angka, LogisticRegression untuk memprediksi kelas. Lalu coba RandomForestClassifier atau HistGradientBoostingClassifier (atau versi regressor-nya), bandingkan dengan cross-validation, dan lakukan tuning pada yang terbaik dengan GridSearchCV.
Versi scikit-learn mana yang dibahas cheat sheet ini?
scikit-learn 1.9, versi yang dijalankan Coddy, di atas NumPy 2 dan pandas 3. Pemanggilan lama yang sekarang gagal atau memunculkan peringatan, seperti squared=False di mean_squared_error, sparse=False di OneHotEncoder, dan argumen penalty di LogisticRegression, ada di tabel bentuk lama di samping apa yang sebaiknya ditulis sekarang.
Bisakah saya menjalankan kode scikit-learn secara online?
Bisa. Playground Matplotlib gratis menjalankan Python dengan scikit-learn, pandas, NumPy, dan Matplotlib di browsermu, jadi kamu bisa menempel potongan kode apa pun dari cheat sheet ini dan menjalankannya tanpa menginstal apa pun. Kursus Machine Learning dari Coddy mengajarkan seluruh alur kerja di halaman ini langkah demi langkah, dari membagi data sampai tuning model.
Ilustrasi bahasa pemrograman di Coddy

Belajar Scikit-learn bersama Coddy

Mulai