edX: Scalable Machine Learning 上課心得

延續 Introduction to Big Data with Spark 課程,紀錄 2015/7 月在 edx 的 Scalable Machine Learning 上課心得紀錄。

除了 Machine Learning 之外,有 1/3 的內容在強調跟講解 large scale 的情況跟需求,也就是 distributed algorithm。當資料很大、維度很大時,演算法只能用逼近解,不能用 closed-form 解會太慢。

lab1 和 lab2

基礎 numpy 和複習 Introduction to Big Data with Spark

lab3

題目是給定音樂的 features 去預測音樂的年份。首先要你練習用 gradient descent 自幹一個 linear regression,然後改用 Spark MLlib 寫好的 ridge regression,並用 grid search 去 tune 它的參數,最後再用 quadratic features 繼續改良。每個 model 用 RMSE 去評估 accuracy。

測資來自 archive.ics.uci.edu/ml/datasets/YearPredictionMSD 是整理過的,感覺這 features 的整理跟挑選才是實務上更大的麻煩啊。

lab4

在 facebook 上的討論

預測廣告 CTR 點擊率,資料是 Kaggle 上的 Criteo 資料 www.kaggle.com/c/criteo-display-ad-challenge

本來以為主要是練習 Logistic regression,沒想到重點是 feature extraction,包括用 one-hot-encoding (OHE) 和 feature hashing 技巧將 categorical data 變成數字 features,搭配 SparseVector 資料結構來處理(因為 features 上萬超多)。學到這技巧真是實用,因為很多原始資料並不是數字,而很多ML演算法要用數字去算。

Logistic regression 的部分就直接用 MLlib 提供的方法去 train 了,跟上個 lab 一樣用 grid search 找最佳參數,搭配 log loss 去評估 model。

lab5

在 facebook 上的討論

題目是 Neuroimaging Analysis via PCA,分析魚的腦神經資料。本來以為是 Neural Networks,原來是 Neuroscience 完全講不同東西… XD

Lab 的練習重點是用 PCA 做 Dimensionality Reduction,將高(時間)維度的腦神經圖像資料,降到二維看比較清楚進行分析。

PCA 演算法要你用 numpy 自幹出來:首先計算任兩個維度的 covariance matrix,然後用 eigendecomposition 拆出 eigenvectors 和 eigenvalue,其中最大的 eigenvalue 就是第一主成分,可讓高維度的資料投射上去進行降維。PCA 的計算牽扯好多線性代數啊,像是 Orthogonal vectors、Orthonormal vectors 這些以前修線代的東西都冒出來了… Q_Q
上述的計算是 closed-form solution,當維度超大時就不堪用了,因為複雜度會飆高到 O(d^2) local storge, O(d^3) local computation。因此課程中有提到可以改用 Krylov subspace 方式去逼近解而不需要計算 covariance。

最後拿到 BerkeleyX
CS190.1x 證書
時,覺得這課名 Scalable Machine Learning 蠻威的。

Leave a Reply