發表文章

目前顯示的是 2020的文章

機器學習競賽王者演算法:XGBoost、LightGBM、CatBoost

圖片
若是有參加過機器學習競賽的人應該都會聽過 XGBoost 這個橫掃各種競賽的演算法,其實後來也有衍生出 LightGBM 和 Cat boost 這兩種演算法可以使用,只是比較少人聽過,又鑒於這方面資料似乎比較少,就自己吃了一些學習資源來介紹,順便推動自己的學習,希望才疏學淺的本人可以幫助你更了解這三個常見演算法。 The map of machine Learning algorithms Source 不論是 XGBoost,  LightGBM 還是 Catboost,他們都屬於 Ensemble learning (集成式學習)中的 Boosting 方法。Ensemble learning 的基本想法就是一個不夠,你有沒有試過兩個?兩個不夠,你有沒有試過三個?也就是將多種學習方法都集合在一起使用,彼此互相補足,讓演算法的架構更加靈活。 Boosting Boosting 是 循序 的演算法,一開始會先產生多個弱學習器(Weak learner)並讓它們不斷改正舊模型的錯誤,最後合成起來變成一個強學習器(Strong learner)。而所謂的弱學習器是指比隨機猜的表現還要更好一點的模型,這種學習器的訓練成本低、複雜度也低,同時也不易 Overfitting。正因為這些特性,所以我們才可以在短時間內訓練很多種弱學習器,彼此組合起來得到一個強力的模型。 Gradient Boosting Gradient boosting 指的則是將梯度下降法(Gradient descent)應用到這些弱學習器的學習上,幫助最小化 error。這個方法的主要問題在於每跑一次 Gradient descent都需要重新建立一次學習器,這樣非常沒有效率,也因此 XGboost 出現了。 Gradient Boosting Decision Tree (GBDT) 當我們剛剛所提到的每一個弱學習器都是一個決策樹的時候,這個意圖學習並組合出最好的決策樹的Gradient Boosting就叫做GBDT。這也是我們目前最常見用來實作Gradient boosting的做法,同時, 這樣做也正好緩和了決策樹容易Overfitting 的問題。今天的三大主題 XGBoost, LightGBM, CatBoost 都是基於 GBDT 的改進方法。 XGBoost XGBoost的全名是

為什麼只能在訓練資料上平衡不平衡的資料集? Why should you deal with an imbalanced dataset only on training data?

圖片
最近有位同學向我詢問一些資料競賽相關的內容,剛好發現他在程式上犯了這個初心者可能會犯的常見錯誤,也就是將 SMOTE (Synthetic Minority Oversampling Technique) 這種針對不平衡資料集  (imbalanced Dataset)  產生資料來讓其平衡的相關演算法應用在整個資料集上,而非只用在訓練資料集上。 目前的數據分析相關競賽通常都是給參賽者一些不平衡的資料集或者是特徵非常多的資料集(通常多達上百個特徵,尤其是金融相關競賽),此時初學者也常常會查詢到像是  Imblearn  這種專門處理不平衡資料及的套件使用。但其實無論是上採樣或者下採樣又抑或是混合上下採樣的方法, 它們其實都只能應用在訓練資料上,不能直接對整個資料集做平衡。 錯誤的使用會造成模型 作弊 ,並訓練出非常非常高的準確率,但實際上表現完全不好,就像過擬合(Overfitting)發生的時候那樣。 平衡資料集的方法 在面對上圖這種不平衡資料集時,基本上會有上採樣 (Oversampling) 和下採樣(Undersampling) 兩種方法可以使資料集平衡。上採樣指的是把資料少的類別複製幾份,直到兩類資料平衡。下採樣會將資料多的類別資料數減少或者是只從中選取少數資料出來代表這個類別。常見的方法有上採樣的 ADASYN、SMOTE、BorderlineSMOTE,還有結合上下採樣的 SMOTEENN,可參考 imblearn API doc 。 總之無論是使用哪種方法,都可以預期會得到下圖這樣平衡的資料集。 為什麼不可以直接平衡整個資料集呢? 為了回答這個問題,得先知道為什麼資料分割的獨立性是必須優先在所有方法之上的。這裡借用 Google 的 MLCC(Machine Learning Crash Course)  教材來講解。 當你拿到一份資料並想對其使用機器學習演算法來解決你的任務時,至少得將資料分割為訓練資料 (Training Set) 與測試資料 (Test Set),訓練資料是用來教你的模型從x推理到y,測試資料是用來測試這個訓練資料所訓練出來的模型在沒有見過的資料 (unseen data) 上表現如何,測試資料得必須與訓練資料 完全沒有交集, 否則就等於是數學老師直接在上課的時候告訴你期中考的題目和答案,也就是會造成作弊的情形發生。這不僅完全無

十種常見的軟體架構模式 10 Common Software Architectural Patterns

圖片
剛升上大四,發現大四的課程開始接觸到許多各種不同的領域,像是 Mobile App 這種跟 OOP 密不可分的領域,剛好這周談到軟體架構相關的東西,像是 MVC(Model-View-Controller) 之類的,讀起來蠻有趣的,同時有點好奇這種軟體架構有沒有一個大補帖可以一窺究竟,於是就爬了幾篇文之後,著手撰寫了這篇文章。 首先,架構模式 (architectural patterns) 與軟體工程的設計模式 (design patterns) 有些類似,兩者都是為了解決一些常見的軟體問題,但前者更為廣泛,且較能重複應用。我認為前者較有"架構"的感覺,也就是可重複使用性較高。前者的架構可以是跨領域應用的,而後者比較像是在某種情況下可以使用哪種模型。 軟體架構模式有以下10種常見的模式: 1. Layered pattern 最經典的例子就是網路的 OSI 七層設計 另外還有我曾在系統分析與設計學到的Three-layer  architecture 分別是View layer、logic layer、Data layer View layer : 系統的UI、外觀 logic layer: 功能的實作層 data layer : 存取資料的function 至於常見的應用當然是 Web application,以 Chrome 手機版為例,打開來看到的所有功能像是輸入網址欄、最近的瀏覽紀錄、左上的首頁按鈕等等都屬於 view layer,至於 logic layer 則是使用者開始在網址欄中輸入後對你所搜尋的事物的預測,比如輸入了"天氣",則會跑出像是天氣預報的推薦搜尋,當然還有按下搜尋後,根據使用者的輸入來推測他想查詢的是甚麼,這都屬於在實作這個搜尋功能。最後,Data layer 是介於資料庫與軟體之間的中介,Google 搜尋若想顯示出在 logic layer 的那些推薦搜尋,勢必得從他們的資料庫中調出關於使用者的資料還有較為宏觀的搜尋資料,只要是需要跟資料庫作互動的都屬於data layer。 2. Client-server pattern 這個模式可能是最常見的但也最簡單,就只有客戶端與伺服器端。客戶端作為主動方提出服務的要求,而伺服器端被動接收 到之後負責提供服務給客戶端。 最常見的應用就是瀏覽網站。當瀏覽

【讀書筆記】 簡報禪 PresentationZen

圖片
Image Source 這本書 已經 是兩年前還是大一的時候閱讀的,當時我將 「學會如何做出好簡報與講出好演講」 這件事情作為年度目標而努力。當時不僅常常聽演講,國文課和通識課也是修了一些和簡報相關的課程。結果最後回顧這年我所做過對精進簡報這件事情幫助最大的,我認為還是去圖書館借了這本書看帶給我的收穫最大 (這本書絕版了好險圖書館有XD)。 這本書並不是一本手把手教你如何做簡報的書,也不是告訴你做簡報有哪些技巧,他告訴我的是一場好簡報有哪些要注意的,有哪些原則可以遵守,有哪些限制是需要做的更重要的是, 如何說故事? 會意識到這真的是一本好書,是由於我在一堂英文課上做英文簡報,因為做了太多最後講不完,而老師給我的評語是雖然很認真做但每個畫面都充滿了太多的資訊, 一直以來大家都認為簡報認真做就是好簡報,但其實並不然, 對自己的簡報做出限制是很重要的 ,而這件事情是簡報禪從頭到尾都在強調的重點。 以下節錄了一些當時我所記下的重點概念,希望能幫到他人,當然自己如果能去想辦法拿到這本書來閱讀更好。 簡報三大守則: 限制、簡單、自然   『要做幾張投影片、用什麼特效、用什麼軟體、要列幾個重點、等等,這些都是問錯問題 真正要問的問題是: 我有多少時間? 簡報場地長得什麼樣子? 我會在上下、下午還是晚上進行簡報? 觀眾是哪些人? 觀眾的背景來歷是? 他們會對我有什麼樣的期待? 為什麼找我上去簡報? 我希望觀眾能做什麼? 哪一種視覺媒體最適合用於這一次的簡報情況和觀眾群? 我的簡報最基本的目的是什麼? 這一次要說的故事是什麼? 最重要的一個基本問題-我的核心重點是什麼? 或者說  如果觀眾只能夠記得一件事情 你希望他們記住的是什麼? 』 『 六條原則:SUCCESs Simplicity 簡潔 (全都很重要表示全都不重要  找出核心) Unexpectedness 出人意料 (提出問題 引出好奇心) Concreteness 具體 (真實例子舉例) Credibility 可信度高 (證據、數字、或是舉例) Emotions 富有情感 (圖片、人性化) Stories 故事性 (記得要有"衝突"(黑VS白之類的)、"對比"、引發情感) 說故事技巧: 找出問