Noel Jeffrey Pinton
Department of Computer Science
University of the Philippines Cebu
| Aspect | Traditional | Machine Learning |
|---|---|---|
| Input | Rules + Data | Data + Labels |
| Output | Answers | Rules/Model |
| Example | if price > 1000: expensive | Learn threshold from examples |
See visual diagram in lecture materials
Given $\mathcal{D} = \{(\mathbf{x}_i, y_i)\}_{i=1}^n$:
Avoid overfitting to training data!
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
model = LogisticRegression().fit(X_train, y_train)
print(f"Accuracy: {model.score(X_test, y_test):.2f}")
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
model = LinearRegression().fit(X_train, y_train)
y_pred = model.predict(X_test)
print(f"MSE: {mean_squared_error(y_test, y_pred):.4f}")
Cross-Entropy:
$$\mathcal{L} = -\frac{1}{n}\sum_{i} y_i \log \hat{y}_i$$Hinge Loss (SVM):
$$\mathcal{L} = \max(0, 1 - y\hat{y})$$from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report
clf = RandomForestClassifier(n_estimators=100).fit(X_train, y_train)
print(classification_report(y_test, clf.predict(X_test)))
| Aspect | Supervised | Unsupervised |
|---|---|---|
| Data | Labeled (X, y) | Unlabeled (X only) |
| Goal | Predict y from X | Find hidden patterns |
| Evaluation | Compare to true labels | Internal metrics |
| Examples | Classification, Regression | Clustering, PCA |
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
kmeans = KMeans(n_clusters=3).fit(X)
score = silhouette_score(X, kmeans.labels_)
print(f"Silhouette: {score:.3f}")
from sklearn.decomposition import PCA
pca = PCA(n_components=2).fit(X)
X_reduced = pca.transform(X)
print(f"Variance explained: {pca.explained_variance_ratio_.sum():.2%}")
See visual diagram in lecture materials
Z-score: $z = \frac{x - \mu}{\sigma}$
Min-Max: $x' = \frac{x - \min}{\max - \min}$
Robust: Uses median/IQR
Many algorithms (SVM, KNN, gradient descent) are sensitive to feature scales!
Rule: Never train on test data!
from sklearn.preprocessing import StandardScaler
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(strategy='mean')
scaler = StandardScaler()
X_clean = scaler.fit_transform(imputer.fit_transform(X))
| Metric | Use When | Avoid When |
|---|---|---|
| Accuracy | Balanced classes | Imbalanced data |
| Precision | False positives costly | Need recall |
| Recall | False negatives costly | Need precision |
| F1-Score | Balance precision/recall | Clear preference |
| RMSE | Penalize large errors | Robust to outliers |
| MAE | All errors equal | Large errors matter |
High train & test error
Fix:
Low train, high test error
Fix:
from sklearn.linear_model import Ridge, Lasso, ElasticNet
# Ridge (L2 regularization)
ridge = Ridge(alpha=1.0)
ridge.fit(X_train, y_train)
# Lasso (L1 regularization)
lasso = Lasso(alpha=0.1)
lasso.fit(X_train, y_train)
# Elastic Net (L1 + L2)
elastic = ElasticNet(alpha=0.1, l1_ratio=0.5)
elastic.fit(X_train, y_train)
# Lasso creates sparse solutions (feature selection)
print(f"Non-zero coefficients: {sum(lasso.coef_ != 0)}")
Questions?