BAB 03
Estimasi Waktu: 50 menit Level: Beginner β Intermediate
Sebelum lo lompat ke LLM dan deep learning, lo harus paham classical ML. Kenapa?
Model belajar dari data yang punya label (input β output yang diketahui).
Problem: Prediksi harga rumah, prediksi revenue, prediksi temperature.
from sklearn.linear_model import LinearRegression
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error, r2_score
# Linear Regression
model = LinearRegression()
model.fit(X_train, y_train)
predictions = model.predict(X_test)
print(f"RΒ²: {r2_score(y_test, predictions):.3f}")
Algorithms: Linear Regression, Ridge, Lasso, Random Forest Regressor, XGBoost Regressor
Problem: Spam detection, sentiment analysis, fraud detection, churn prediction.
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, classification_report
model = RandomForestClassifier(n_estimators=100)
model.fit(X_train, y_train)
predictions = model.predict(X_test)
print(classification_report(y_test, predictions))
Algorithms: Logistic Regression, Decision Trees, Random Forest, XGBoost, SVM
Model belajar dari data tanpa label β menemukan pola tersembunyi.
Problem: Customer segmentation, anomaly detection, document grouping.
from sklearn.cluster import KMeans
from sklearn.decomposition import PCA
# Reduce dimensions untuk visualisasi
pca = PCA(n_components=2)
reduced = pca.fit_transform(data)
# Clustering
kmeans = KMeans(n_clusters=5, random_state=42)
clusters = kmeans.fit_predict(data)
Problem: Data terlalu banyak kolom, visualisasi, noise reduction.
from sklearn.decomposition import PCA
pca = PCA(n_components=50) # reduce 1000 cols β 50
reduced = pca.fit_transform(data)
print(f"Explained variance: {pca.explained_variance_ratio_.sum():.2%}")
DATA β CLEAN β SPLIT β TRAIN β EVALUATE β TUNE β DEPLOY
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler, LabelEncoder
# Handle missing values
df = df.fillna(df.median())
# Encode categorical
le = LabelEncoder()
df["category"] = le.fit_transform(df["category"])
# Scale numeric features
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# Train/test split
X_train, X_test, y_train, y_test = train_test_split(
X_scaled, y, test_size=0.2, random_state=42
)
from sklearn.model_selection import cross_val_score
# Cross-validation
scores = cross_val_score(model, X_train, y_train, cv=5)
print(f"CV scores: {scores}")
print(f"Mean: {scores.mean():.3f} Β± {scores.std():.3f}")
from sklearn.model_selection import GridSearchCV
param_grid = {
"n_estimators": [50, 100, 200],
"max_depth": [3, 5, 10, None],
"learning_rate": [0.01, 0.1, 0.3],
}
grid = GridSearchCV(
XGBClassifier(),
param_grid,
cv=5,
scoring="accuracy",
n_jobs=-1,
)
grid.fit(X_train, y_train)
print(f"Best params: {grid.best_params_}")
XGBoost adalah algoritma yang mendominasi kompetisi Kaggle dan production ML untuk data tabular.
import xgboost as xgb
# Training
model = xgb.XGBClassifier(
n_estimators=200,
max_depth=6,
learning_rate=0.1,
subsample=0.8,
colsample_bytree=0.8,
early_stopping_rounds=10,
)
model.fit(
X_train, y_train,
eval_set=[(X_val, y_val)],
verbose=False,
)
# Feature importance
importances = model.feature_importances_
for i, imp in enumerate(importances):
print(f"Feature {i}: {imp:.4f}")
| Problem | Metric | Kapan Pakai |
|---|---|---|
| Classification | Accuracy | Balanced classes |
| Classification | Precision | False positive mahal |
| Classification | Recall | False negative mahal |
| Classification | F1 | Balance precision + recall |
| Classification | ROC-AUC | Ranking quality |
| Regression | MSE/MAE | Standard |
| Regression | RΒ² | Variance explained |
CLASSICAL ML DEEP LEARNING
βββββββββββββ βββββββββββββ
Manual feature engineering β Automatic feature learning
Work well with small data β Need lots of data
Interpretable β Black box
Fast to train β Slow to train
CPU is enough β GPU needed
Great for tabular data β Great for images, text, audio
joblib atau pickleTarget: 1 end-to-end ML project, paham full workflow dari data ke model.