From Spark Machine Learning to TensorFlow Deep Learning


今年剛runMachine Learning案子, 一邊著手整理這段期間運用的Apache Spark技術, 以及一些Hadoop Spark的觀念想法; 在收集資料, 與重新檢視Blog內容期間不由自主地湧進了許多的想法, 於是, 決定重新來架構整份文章內容, 從原本規畫的Spark技術語法, 和模型建構執行過程, 擴大到以三部曲的模式, 架構一套完整的人工智能系列文章。期望達到的目標有:

ü   以當前主流的Big Data平台:Spark Deep Learning平台: TensorFlow, 撰寫sample codes與實作應用分享

ü   補強Blog   Random Forests系列文章中, 所欠缺的Model Evaluation Algorithm Optimization, 以及Machine Learning專案實作上, 需要運用到的零零種種技術細節

先分享一份Random Forests模型和各Machine Learning的比較表


三部曲的順序為:
1.          Building Machine Learning Models on Apache Spark
2.          Deep Learning implementation by TensorFlow
3.          Cluster and Dimensionality Reduction using Scikit-learn



繼續閱讀...

Introduction to empirical Bayes estimation (with R code)


延續上一篇關於Bayesian Statistics的研究, 本篇Post將進一步闡述貝氏統計的應用。以下的內容與程式碼主要翻譯自此post: http://varianceexplained.org/r/empirical_bayes_baseball/ . 這篇文章主要為研讀之後的整理和其他發想。


下列兩個比率數字, 哪個比較大?
     裝有10個球的盒子中有4個紅球和6個白球 è 紅球的比例?
     裝有1000個球的袋子裡有300個紅球和700個白球 è 紅球的比例?

     很明顯, 當然是 4/10 = 0.4 大於 300/1000=0.3

     但是, 假設今天你是球隊老闆, 正在評估兩位潛力球員。你以下列兩位球員的打擊成績做為評估標準:
     球員A上場10,擊出4支安打
     球員B上場1000,共擊出300支安打
     雖然球員A有較高的打擊率, 但是僅僅10次的打擊紀錄, 並無法提供足夠的可信度。一般職棒選手的打擊率大約為0.27, 球員A高達四成的打擊率,期中運氣的成分居多; 反倒球員B 1000次的打擊紀錄, 較能證明他是一個優於平均的打擊者。


Empirical Bayes estimation
     這篇文章同樣將使用棒球比賽的例子, 來說明一個十分有效用以估計資料比率的統計技術, 來幫助我們分析類似下列的數據資料:

表一
Success
Total
11
104
82
1351
2
26
0
40
1203
7592
5
166




一般我們可能取得表一這種success(成功)/total(總計)成對型式的數據, 然後用以估計特定事件的成功比率。每筆資料可能代表著:

  • 廣告點擊率:公司投放了許多不同的廣告, 你想知道哪一個有比較高的Clickthrough rates?
  • 網站使用者類型: 你想知道到訪公司網站的使用者, 有多少會點擊閱讀一篇文章, 或是點擊某個商品後決定購買?


繼續閱讀...

Bayesian Data Analysis and Modeling (with R code)


貝氏定理(Bayes' Theorem), 這個過去我們在研讀統計學的條件機率時,才會被稍微帶過的統計理論, 在近年來越來越受各界的重視與關注, 甚至在歐美國家有學者建議傳統以"Frequentist" statistics為基礎的統計教學,應該改用貝氏統計理論取代!

會重新關注並開始學習Bayesian Statistics, 是翻閱了Nate SilverThe Signal and the Noise : Why So Many Predictions Fail--but Some Don't (中文書名: 精準預測:如何從巨量雜訊中,看出重要的訊息?)





Google這本書,就會看到非常多中英文評論大力推薦, 就不在這贅述, 而當初會翻閱的原因, 是想看看書裡面有沒透露甚麼不一樣的預測模型? 這是一本非技術性的商業文章, 書中提到大量的想法和案例故事, 但是對於如何進行預測與模型建立的細節, 其實是付之闕如的, 而唯一提到的一個方法論, 就是Bayesian Statistics 也因如此, 開始了我Bayesian Data Analysis的學習旅程。

Machine Learning vs. Bayesian Statistics

        機器學習(Machine Learning)技術的一個核心概念是,透過不斷地累積對資料的觀察, 電腦可以透過演算法, 自動演進對於學習標的的理解; 而在傳統程式開發上, 若要對新的資訊進行處理, 則是需要透過程式碼的修改, 才能讓電腦處理之前系統程式中沒有考慮到的部分。在這一個部分, Bayesian Statistics有著相似的概念。以統計學中最常使用的丟銅板為例, 推算一個銅板出現正面的機率, 是依照累積觀察每次丟銅板出現正面的次數, 計算在觀察到的實際資訊下銅板出現正面的機率:

繼續閱讀...

Learning Boosting Algorithms for Better Predictions (with R code)




在國外許多Data science 競賽中, Boosting algorithms是一個被廣泛使用的演算法, 用以提升預測模型的準確率, 尤其最近一段時間各大Data Hack比賽, 3名的獲勝者幾乎都使用XGBoost模型取得關鍵性的突破 Random Forest algorithm一樣, Boosting algorithms也是ensemble models的一種machine learning approach, 讓我們能在相同的數據資料下, 使用較少的時間獲得大幅的預測效能躍進。在這篇文章, 我將簡單描述Boosting的原理概念, 讓大家能初步了解到Boosting algorithms的運作想法, 最後同樣附上一個簡單的實例, 展示如何利用Boosting algorithms進行數據的分類預測。

Introduction to Boosting

Boosting algorithms最初開發用以解決分類(classification)預測的問題, 其概念在於藉由合併(combine)許多的weak learner(classifier, predictor, etc) , 創造出一個高準確預測的模型(稱之為strong learner/classifier). 所謂的weak learner可以視之為其模型的預測能力, 僅僅高於隨機猜測的結果。我們先簡單地以垃圾郵件辨識為例子, 說明為何ensemble models(Boosting為例- combine many weak learners), 能產生出較強的預測模型。假設我們使用下列5rules來判斷email是否為垃圾郵件:
1.      Email僅包含一張圖片 è 促銷圖片, 此封為垃圾郵件
2.      Email僅包含一個超鏈結網址 è 垃圾郵件
3.      Email內文包含您贏得了 大獎 $” è 垃圾郵件
4.      Email寄件者為任職公司的網站 è 非垃圾郵件
5.      Email寄件者存在於聯絡人清單中 è 非垃圾郵件

5rules可分別視作weak classifier, 單獨使用其中任何一個rule來進行垃圾郵件分類, 其辨識效果可想而知。但若我們將5rules合併使用, 並將5rules預測結果, 以簡單平均或是加權平均的方式計算出預測結果, 那麼我們將可以獲得一個較佳的預測能力模型。以上述為例, 3rules認定為垃圾郵件, 2rules認定為非垃圾郵件, 因此我們認定該封email為垃圾郵件。

     Boosting algorithms並非簡單地以majority votes(多數決)或平均數的方式, 來進行model building. 不同類型的Boosting algorithms, 各自有不同的數學模型與建置邏輯。目前主流的Boosting algorithms:
  1. AdaBoost (Adaptive Boosting)
  2. Gradient Boosting
  3. XGBoost (eXtreme Gradient Boosting)
這篇文章將介紹前兩種Boosting model, XGBoost將於另一篇文章再詳加討論。


繼續閱讀...

The Practical Guide to the Random Forests - Random Forests Model Part II
(Using Kaggle’s Titanic Data with R code)

Photo source: https://datafloq.com

Previously in this series:

Random Forests

在建立Tree-based models的流程中使用Bagging演算法的Bagging trees模型, 導入了隨機元件(random component)的架構, 大幅改善了模型建立的變異,因而提升了預測績效。然而, Bagging trees模型中每一個tree model彼此之間並非是完全獨立的(independent),因為, 每一個tree model在進行每一次split, 所有資料的欄位變數(original predictors)都會被分析考慮。假設今天訓練資料集, 其欄位變數和response之間的關係(relationship)可以用tree model所建立, 則以此資料數據所產生的每一個bootstrap samples產生之tree model結構將會非常類似(尤其位於tree modeltop nodes); 我們稱此特性為”Tree Correlation”


繼續閱讀...

The Practical Guide to the Random Forests - Random Forests Model Part I
(Using Kaggle’s Titanic Data with R code)

這篇Post是此系列的最後一篇, 我們終於能開始進入Random Forest這個強大的Ensemble技術領域。在所參考程式碼的Trevor Stephens文章中,尚有多出一篇討論Feature EngineeringpostRandom Forest模型介紹之前, 由於這系列Posts重點在於模型架構的闡釋, 所以, 雖然Feature EngineeringData Science分析流程中是一個重要的關鍵 - Feature Engineering的好壞對於模型績效有顯著的影響(feature engineering has been described as “the most important factor” in determining the success or failure of the predictive model), 我還是決定將Feature Engineering這一塊用重點條列的型式先行帶過。各位若有興趣, 可以自行參考Trevor Stephensoriginal post (http://trevorstephens.com/post/73461351896/titanic-getting-started-with-r-part-4-feature)
Feature Engineering這個Topic, 將另行撰寫Posts討論。


繼續閱讀...

The practical guide to Random Forests – Decision Tree Model Part II
(Using Kaggle’s Titanic Data with R code)





Previously in this series:


讓我們回到Titanic資料集, 使用上一個Part學到的CART model來進行分析預測。這裡的程式範例一樣參照Trevor Stephens的文章(http://trevorstephens.com/post/72923766261/titanic-getting-started-with-r-part-3-decision ), 採用rpart這個package進行模型建置. rpart代表“Recursive Partitioning and Regression Trees”, 實現(implement)上述所闡述CART模型演算法。

library(rpart)
fit <- rpart(Survived ~ Pclass + Sex + Age + SibSp + Parch + Fare + Embarked, data=train, method="class")

除了上一篇所提到的四個變數 – Pclass, Sex, AgeFare, Trevor Stephens另加入了三個變數進行模型訓練。3個變數的代表意義如下:

sibsp           Number of Siblings/Spouses Aboard
parch           Number of Parents/Children Aboard
embarked        Port of Embarkation


繼續閱讀...