延續 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
預測廣告 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
題目是 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 蠻威的。