Cheat Sheet Scikit-learn (sklearn)
Terakhir diperbarui
Memuat dan membagi data
Sisihkan test set sebelum melakukan apa pun, dan lihat isinya hanya di akhir.
| Tugas | Kode |
|---|---|
| Mengimpor fungsi pembagi data | from sklearn.model_selection import train_test_split |
| Fitur dan target dari DataFrame | X = df.drop(columns="target")
y = df["target"] |
| Dataset bawaan sebagai pandas | from sklearn.datasets import load_iris
X, y = load_iris(return_X_y=True, as_frame=True) |
| Data sintetis untuk bereksperimen | from sklearn.datasets import make_classification
X, y = make_classification(n_samples=500, n_features=8, random_state=0) |
| Pembagian data latih dan uji 80/20 | X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) |
| Menjaga proporsi kelas di kedua bagian | train_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.
| Tugas | Kode |
|---|---|
| Import | from sklearn.preprocessing import StandardScaler, MinMaxScaler, OneHotEncoder, OrdinalEncoder |
| Skala ke rata-rata 0 dan simpangan baku 1 | scaler = 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 1 | MinMaxScaler().fit_transform(X_train[["age", "income"]]) |
| One-hot encoding untuk kategori | enc = OneHotEncoder(handle_unknown="ignore", sparse_output=False)
enc.fit_transform(X_train[["city"]]) |
| Mengubah kategori berurutan menjadi angka | OrdinalEncoder(categories=[["low", "mid", "high"]]).fit_transform([["mid"], ["high"]]) |
| Mengisi nilai yang hilang | from sklearn.impute import SimpleImputer
SimpleImputer(strategy="median").fit_transform(X_train[["age", "income"]]) |
| Fitur polinomial dan interaksi | from sklearn.preprocessing import PolynomialFeatures
PolynomialFeatures(degree=2, include_bias=False).fit_transform(X_train[["age", "income"]]) |
| Mendapatkan DataFrame, bukan array | scaler.set_output(transform="pandas") |
| Label teks menjadi bilangan bulat | from 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.
| Masalah | Mulai dengan | Lalu 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 sama | KNeighborsClassifier(n_neighbors=5) | SVC(kernel="rbf") |
| Aturan yang bisa kamu baca | DecisionTreeClassifier(max_depth=3) | RandomForestClassifier() |
| Mengelompokkan baris tanpa label | KMeans(n_clusters=3) | DBSCAN(eps=0.5) |
| Lebih sedikit fitur untuk plot atau kecepatan | PCA(n_components=2) | TSNE(n_components=2) |
| Menemukan baris yang tidak biasa | IsolationForest(random_state=0) | LocalOutlierFactor() |
Fit model
Setiap estimator mengikuti pola yang sama: buat dengan pengaturannya, lalu panggil fit.
| Tugas | Kode |
|---|---|
| Pola untuk setiap model | model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train) |
| Regresi linear | from sklearn.linear_model import LinearRegression
LinearRegression() |
| Regresi linear dengan regularisasi | from 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 neighbors | from sklearn.neighbors import KNeighborsClassifier
KNeighborsClassifier(n_neighbors=5) |
| Decision tree | 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, cepat untuk data besar | from sklearn.ensemble import HistGradientBoostingClassifier
HistGradientBoostingClassifier(random_state=0) |
| Support vector machine | from sklearn.svm import SVC
SVC(kernel="rbf", C=1.0) |
| Naive Bayes | from sklearn.naive_bayes import GaussianNB
GaussianNB() |
| Baseline yang selalu menebak kelas mayoritas | from sklearn.dummy import DummyClassifier
DummyClassifier(strategy="most_frequent") |
Predict dan memeriksa model
| Tugas | Kode |
|---|---|
| Memprediksi kelas atau nilai | y_pred = model.predict(X_test) |
| Probabilitas kelas positif | model.predict_proba(X_test)[:, 1] |
| Skor cepat: akurasi atau R² | model.score(X_test, y_test) |
| Koefisien model linear | model.coef_, model.intercept_ |
| Feature importance dari model tree | pd.Series(forest.feature_importances_, index=X_train.columns).sort_values() |
| Importance dengan mengacak setiap fitur | from sklearn.inspection import permutation_importance
permutation_importance(model, X_test, y_test, random_state=0).importances_mean |
| Label kelas yang dikenal model | model.classes_ |
| Membaca dan mengubah pengaturan | model.get_params(), model.set_params(C=0.5) |
| Menggambar decision tree | from 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.
| Tugas | Kode |
|---|---|
| Import | from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score |
| Akurasi | accuracy_score(y_test, y_pred) |
| Precision, recall, dan F1 | precision_score(y_test, y_pred), recall_score(y_test, y_pred), f1_score(y_test, y_pred) |
| F1 untuk beberapa kelas | f1_score(y_test, y_pred, average="macro") |
| Semua metrik per kelas | 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) |
| Plot confusion matrix | from sklearn.metrics import ConfusionMatrixDisplay
ConfusionMatrixDisplay.from_estimator(model, X_test, y_test) |
| ROC AUC dari probabilitas | from sklearn.metrics import roc_auc_score
roc_auc_score(y_test, model.predict_proba(X_test)[:, 1]) |
| Plot kurva ROC | from sklearn.metrics import RocCurveDisplay
RocCurveDisplay.from_estimator(model, X_test, y_test) |
| Akurasi untuk kelas yang tidak seimbang | from sklearn.metrics import balanced_accuracy_score
balanced_accuracy_score(y_test, y_pred) |
| Ambang keputusanmu sendiri | y_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).
| Tugas | Kode |
|---|---|
| Import | from sklearn.metrics import mean_absolute_error, mean_squared_error, root_mean_squared_error, r2_score |
| Mean absolute error | mean_absolute_error(y_test, y_pred) |
| Mean squared error dan akarnya | mean_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 error | from sklearn.metrics import mean_absolute_percentage_error
mean_absolute_percentage_error(y_test, y_pred) |
| Plot prediksi terhadap nilai sebenarnya | from 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.
| Tugas | Kode |
|---|---|
| Import | from sklearn.pipeline import make_pipeline, Pipeline |
| Skala, lalu fit model | pipe = make_pipeline(StandardScaler(), LogisticRegression(max_iter=1000))
pipe.fit(X_train, y_train) |
| Langkah dengan nama buatanmu sendiri | pipe = Pipeline([("scale", StandardScaler()), ("model", LogisticRegression(max_iter=1000))]) |
| Mengakses langkah di dalamnya | pipe.named_steps["model"], pipe[-1] |
| Langkah berbeda untuk kolom berbeda | from sklearn.compose import ColumnTransformer
pre = ColumnTransformer([
("num", StandardScaler(), ["age", "income"]),
("cat", OneHotEncoder(handle_unknown="ignore"), ["city"]),
]) |
| Preprocessing dan model dalam satu object | model = make_pipeline(pre, RandomForestClassifier(random_state=0))
model.fit(X_train, y_train)
model.score(X_test, y_test) |
| Memilih kolom berdasarkan tipe | from sklearn.compose import make_column_selector
make_column_selector(dtype_include="number")(X_train) |
| Isi nilai hilang, lalu skala | make_pipeline(SimpleImputer(strategy="median"), StandardScaler()) |
| Nama fitur output | pre.get_feature_names_out() |
Cross-validation
Cross-validation melatih dan menilai model di beberapa pembagian data, sehingga perkiraannya lebih stabil daripada satu test set.
| Tugas | Kode |
|---|---|
| Import | from sklearn.model_selection import cross_val_score, cross_validate, KFold, StratifiedKFold |
| Skor pada 5 fold | scores = cross_val_score(pipe, X, y, cv=5)
scores.mean(), scores.std() |
| Memilih metrik | cross_val_score(pipe, X, y, cv=5, scoring="f1_macro") |
| Fold yang diacak | cv = KFold(n_splits=5, shuffle=True, random_state=0) |
| Keseimbangan kelas yang sama di setiap fold | cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=0) |
| Beberapa metrik dan skor data latih | cross_validate(pipe, X, y, cv=cv, scoring=["accuracy", "f1"], return_train_score=True) |
| Prediksi untuk setiap baris, dibuat di luar fold-nya | from sklearn.model_selection import cross_val_predict
cross_val_predict(pipe, X, y, cv=5) |
| Fold per grup, fold menurut urutan waktu | from sklearn.model_selection import GroupKFold, TimeSeriesSplit
GroupKFold(n_splits=5), TimeSeriesSplit(n_splits=5) |
| Semua nama scoring yang valid | from 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.
| Tugas | Kode |
|---|---|
| Import | from sklearn.model_selection import GridSearchCV, RandomizedSearchCV |
| Mencoba setiap kombinasi | grid = GridSearchCV(RandomForestClassifier(random_state=0), {"n_estimators": [50, 100], "max_depth": [None, 5]}, cv=5)
grid.fit(X_train, y_train) |
| Pengaturan terbaik dan skornya | grid.best_params_, grid.best_score_ |
| Memakai model terbaik | grid.best_estimator_.predict(X_test), grid.score(X_test, y_test) |
| Tuning sebuah langkah di dalam pipeline | GridSearchCV(pipe, {"logisticregression__C": [0.1, 1, 10]}, cv=5).fit(X_train, y_train) |
| Pengaturan acak dari distribusi | 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) |
| Memakai semua core CPU | GridSearchCV(pipe, {"logisticregression__C": [0.1, 1]}, cv=5, n_jobs=-1) |
| Semua hasil sebagai tabel | pd.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.
| Tugas | Kode |
|---|---|
| Cluster k-means | from sklearn.cluster import KMeans
km = KMeans(n_clusters=3, random_state=0)
labels = km.fit_predict(X) |
| Pusat cluster dan inertia | km.cluster_centers_, km.inertia_ |
| Seberapa terpisah cluster-nya | from sklearn.metrics import silhouette_score
silhouette_score(X, labels) |
| Cluster berbasis kepadatan, noise bernilai -1 | from sklearn.cluster import DBSCAN
DBSCAN(eps=0.5, min_samples=5).fit_predict(X) |
| Proyeksi ke 2 komponen | from sklearn.decomposition import PCA
pca = PCA(n_components=2)
X_2d = pca.fit_transform(X) |
| Varians yang dijelaskan setiap komponen | pca.explained_variance_ratio_ |
| Mempertahankan 95% varians | PCA(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.
| Tugas | scikit-learn 1.9 | Bentuk lama |
|---|---|---|
| Root mean squared error | root_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 regularisasi | LogisticRegression(C=np.inf) | LogisticRegression(penalty=None) |
Menyimpan, memuat dan mereproduksi
| Tugas | Kode |
|---|---|
| Menyimpan model atau pipeline yang sudah dilatih (fit) | import joblib
joblib.dump(model, "model.joblib") |
| Memuatnya kembali | model = joblib.load("model.joblib") |
| Hasil yang sama di setiap run | random_state=0 |
| Versi yang terinstal | import 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?
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?
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?
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.