Learning Boosting Algorithms for Better Predictions (with R code)
Photo Source: http://www.datasciencecentral.com
在國外許多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), 能產生出較強的預測模型。假設我們使用下列5條rules來判斷email是否為垃圾郵件:
1.
Email僅包含一張圖片 è 促銷圖片,
此封為垃圾郵件
2.
Email僅包含一個超鏈結網址 è 垃圾郵件
3.
Email內文包含”您贏得了 大獎
$” è 垃圾郵件
4.
Email寄件者為任職公司的網站 è 非垃圾郵件
5.
Email寄件者存在於聯絡人清單中 è 非垃圾郵件
這5條rules可分別視作weak
classifier, 單獨使用其中任何一個rule來進行垃圾郵件分類, 其辨識效果可想而知。但若我們將5條rules合併使用,
並將5條rules預測結果,
以簡單平均或是加權平均的方式計算出預測結果, 那麼我們將可以獲得一個較佳的預測能力模型。以上述為例, 3條rules認定為垃圾郵件,
2條rules認定為非垃圾郵件, 因此我們認定該封email為垃圾郵件。
Boosting algorithms並非簡單地以majority
votes(多數決)或平均數的方式, 來進行model
building. 不同類型的Boosting algorithms, 各自有不同的數學模型與建置邏輯。目前主流的Boosting
algorithms有:
- AdaBoost (Adaptive Boosting)
- Gradient Boosting
- XGBoost (eXtreme Gradient Boosting)
繼續閱讀...
8/04/2016 | 標籤: Machine Learning, R |
The Practical Guide to the Random Forests - Random Forests Model Part II
(Using Kaggle’s Titanic Data with R code)
- Big Data Exploration Part I
- Big Data Exploration Part II
- Decision Trees Model Part I
- Decision Trees Model Part II
- Random Forests Model Part I
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 model的top nodes); 我們稱此特性為”Tree Correlation”。繼續閱讀...
7/24/2016 | 標籤: Kaggle, Machine Learning, R | 0 Comments
The Practical Guide to the Random Forests - Random Forests Model Part I
(Using Kaggle’s Titanic Data with R code)
Photo
Source: http://www.greenpeace.org/canada/Global/canada/image/2010/4/teaser/boreal/BOREAL%20FOREST%204.jpg
Previously in this series:
這篇Post是此系列的最後一篇, 我們終於能開始進入Random
Forest這個強大的Ensemble技術領域。在所參考程式碼的Trevor Stephens文章中,尚有多出一篇討論Feature Engineering的post在Random
Forest模型介紹之前, 由於這系列Posts重點在於模型架構的闡釋,
所以, 雖然Feature Engineering在Data
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 Stephens的original post (http://trevorstephens.com/post/73461351896/titanic-getting-started-with-r-part-4-feature)。
Feature Engineering這個Topic, 將另行撰寫Posts討論。繼續閱讀...
7/24/2016 | 標籤: Kaggle, Machine Learning, R |
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, Age和Fare, Trevor Stephens另加入了三個變數進行模型訓練。3個變數的代表意義如下:
sibsp Number
of Siblings/Spouses Aboard
parch Number of Parents/Children Aboard
embarked Port
of Embarkation繼續閱讀...
7/08/2016 | 標籤: Kaggle, Machine Learning, R | 0 Comments
The practical guide to Random Forests – Decision Tree Model Part I
(Using Kaggle’s Titanic Data with R code)
Previously in this series:
在上一篇Post的結尾, 我們建立了一個如下的預測模型邏輯:
test$Survived <- 0
test$Survived[test$Sex == 'female'] <- 1
test$Survived[test$Sex == 'female' & test$Pclass == 3 & test$Fare >= 20] <- 0
我們可以將此程式碼的邏輯結構, 整理成一段IF-then/ELSE的分析流程:
IF 性別為”女性” THEN
IF Pclass 為 3 THEN
IF 船票費用 高於 $20 THEN
預測:生還
ELSE
預測:未生還
繼續閱讀...
6/26/2016 | 標籤: Kaggle, Machine Learning, R |
The practical guide to Random Forests – Big Data Exploration Part II
(Using Kaggle’s Titanic Data with R code)
Photo
source: http://www.pageresource.com/wallpapers/wallpaper/fantasy-solaris-sea-moon.jpg
Part I的連結在此。
上一篇文章介紹了R data.table Query功能,這篇將繼續完成data.table的介紹,最後會利用data.table進行分析和建立預測模型。
Summarizing Data Within Groups
data.table的優勢在於data
aggregation能力, 並且可以和R的繪圖package
– ggplot2整合, 圖像化數據結果。結合data.table和ggplot2兩個package,
讓我們擁有一個全新的強大數據探勘分析工具。
繼續閱讀...
6/22/2016 | 標籤: Kaggle, Machine Learning, R | 0 Comments
The practical guide to Random Forests – Big Data Exploration Part I
(Using Kaggle’s Titanic Data with R code)
Photo
source: http://www.mnn.com/lifestyle/arts-culture/stories/5-fascinating-books-about-science-and-exploration
根據全球最大的Data Science競賽平台 – Kaggle的數據統計(https://www.import.io/post/how-to-win-a-kaggle-competition/), Random Forests演算法是眾多競賽贏家的終極武器(2015年底後異軍突起的XGboost, 將另外專文介紹)(如果不清楚Kaggle這個網站, 可參考遠見雜誌的這篇報導http://www.gvm.com.tw/Boardcontent_23287.html )。這系列的3篇Posts, 將透過Kaggle的Titanic競賽資料(https://www.kaggle.com/c/titanic/data), 詳細介紹Random Forests演算法的原理, 以及建立Random Forests模型的程式撰寫與參數設定。程式範例的內容是參考Kaggle's Titanic Competition 4篇R tutorials (https://www.kaggle.com/c/titanic/details/new-getting-started-with-r )其中Trevor Stephens的文章整理而成。
首篇Post從所有Data Science競賽或專案的第一步 – Data Exploration方法說起。Trevor Stephens原文使用R內建的基礎functions與data.frame, 進行資料的整理與分析; 我改以R新開發, 在Big Data的分析運作與效能上大幅提升的package - data.table, 進行數據的探勘, 並透過此篇文章, 讓各位了解data.table的相關操作指令。相信讀完此篇之後, 各位將可以改用data.table進行數據分析工作, 而且隨著數據量的增加, 將越加感受到data.table所帶來的便利與效益。第二篇Post介紹Random Forests的基礎演算法 - CART模型(https://en.wikipedia.org/wiki/Decision_tree_learning ), 最後一篇討論本系列文章的核心技術Random Forests. 所有的內容都輔以R原始碼並附上執行結果畫面, 各位可以開啟R console介面一併操作驗證。
繼續閱讀...
6/14/2016 | 標籤: Kaggle, Machine Learning, R |
Data Science: My Learning Journey
Data scientists, Harvard Business Review 稱之為21世紀最性感的工作(The Sexiest Job of the 21st Century), 無疑是現在最熱門的專業。 在真正踏入此領域前, 其實最先接觸到的, 是大數據 – Big Data. 精確一點來說, 應該是Hadoop. 那是2012年的秋冬。 當時手機APP熱潮剛吹進台灣, 學習iOS的objective-C是那時軟體界的主流, 然而真正吸引我的, 卻是當時剛入手的一本Hadoop書籍。
From Oracle Database to System Trading
一直以來對於數據分析都有著濃厚的興趣。從最早學會Java開始,就試著寫出一套投資分析系統, 將投資書上寫的基本財務分析和技術分析implement到系統上;寫了幾年Java後轉投入Oracle Database領域, 也因為當時相信, 能了解更多的資料庫技術, 就能擁有更強的數據分析能力。多年的工作經歷印證了這個決定的正確性。因為對於資料的掌握度高和對數字的高敏感性, 因此能在開發系統的過程中,累積了厚實的金融業產業know-how, 並且在過程中,享受在學生時期書本上讀到的財務金融理論知識轉化成實際商業應用的充實感。 只是, 這一切的過程, 卻和我最感興趣的”數據分析”能力, 似乎完全溝不上邊。在Data Warehouse、Business Intelligence、Data Mining這些技術Buzzword盛行的時代, 因為所處公司完全沒有計畫建置這樣系統的情況下, 所以沒有機會/時間去接觸相關知識和軟體(如Cognos, SAS, 或Oracle 的Data Warehouse)。
2010年, 程式交易的風潮吹入台灣, 當時study的不是主流的TradeStation,
而是Wealth Lab這套軟體工具, 相關的研究結果, 也在那時寫下了這篇文章: 交易策略最佳化. 在沒有相關知識和經驗的情況下, 當時研究的過程也涵蓋了預測模型建立流程中三個重要的point:
1.
Cross validation: 將資料切分成訓練數據(Train Set)和測試數據(Test Set)
2.
Parameter tuning: 即文章中進行的”均線最佳化”
3.
Performance Matrix: 績效衡量指標的挑選, 包含了Sharpe Ratio, APR(年化報酬),以及WLScore, 並做了統計檢定
然而程式交易軟體畢竟是個利用技術分析建置金融交易的”工具”, 學習這套工具,仍是無法踏入真正的數量分析殿堂
繼續閱讀...
6/14/2016 | 標籤: Data Science |
Web Scraping in Python (Crawl data from YAHOO! Stock)
在大數據專案中, 通常會面對兩種資料來源: 一個是公司內部系統的數據,一個是公司外部的資料,
能有效地整合分析內外兩類資訊源, 就能夠開發出高價值的Big data產品或系統,
此系統挖掘公司內隱的核心數據競爭力, 並以此反饋當前市場的熱門需求, 甚或建置潛在趨勢的進攻策略。當前最大最豐富的外部資源, 無庸置疑就是Internet, 而Web
scraping就是挖取這個大金礦的軟體技術。
如果你搜尋“Web scraping”這個領域,
會發現其他像是” web crawling”, “Data Scraping”, “scraper”,
“web crawler”, 甚至是”bot”等技術字眼, 這些字彙轉換為中文大略都用”網路爬蟲”軟體一以蓋之;
簡言之, “Web scraping”這領域是在鑽研如何從網際網路上, 收集擷取資料的軟體技術,
而目前Internet上資訊價值含金量最高的主要就是web網站,
因此我們要”爬”資料當然就是針對web下手。
學習Web scraping對於個人來說也是極具有效益的。當擁有Web
scraping技術, 所有能透過瀏覽器看到的資料, 都可以”爬”回自己的電腦做進一步的分析,
這方面應用在一般投資人的世界早已行之多年; 遵從基本分析的投資人, 運用Excel等工具或其他的程式語言,
定期從公開觀測站抓取每月營收或財務報表數據, 因此一般投資大眾, 即使沒有如機構法人分析師擁有公司內部的資料庫完整財務資訊, 仍能進行專業的股票分析。
繼續閱讀...
6/14/2016 | 標籤: Investment, Python |
訂閱:
文章 (Atom)