發表文章

目前顯示的是有「Machine Learning」標籤的文章

[ML] Coursera 線上機器學習中文課程

我以前的指導教授終於開 Coursera 線上課程了!! 對於機器學習有者相當大的好奇心可以來加入學習!! 這門課主要是講述機器學習的基礎概念 https://www.coursera.org/course/ntumlone 對了是中文授課, 雖然投影片是英文的XD

[Python] ML WITH SCIKIT Learn (Model Selection)

圖片
年初網路上有一個基礎 scikit learning 的教學, 相當的完整以及實用 花了一點時間看完發覺應該讓更多人學會使用他, 所以打算來寫個中文版本的說明 這篇只是用我的話重新講述 Model Selection 部份, 剩餘的有時間再寫 Video:  https://www.youtube.com/watch?v=iFkRt3BCctg 官網:  https://us.pycon.org/2013/community/tutorials/23/ 影片相關資料: https://github.com/ogrisel/parallel_ml_tutorial.git  (需要用 git 下載) 下面程式碼一律都是 Olivier Grisel 所提供在 github 的, 我只是會有小幅度的修改跟利用 想要看完整版還是乖乖的把 video 看完吧, 要花約 2.5 hr (Model selection只佔 1/4)

[ML] Basic Imbalance data

圖片
有鑑於不管是有人問, 或者是我自己, 都碰到滿多次 imbalance data 假設你有兩類的 data, 差異相當的大, 可以 class a 佔了 95%, class b 佔了 5% 針對這種很嚴重的 imbalance data 那該怎麼辦勒? 或者甚至是 multi-class 的狀況 其實有相當相當多的方法可以去 approach 他 有一篇 '09年發表在 IEEE Transactions on Knowledge and Data Engineering 的 paper 有做 survey (話說這是一個相當相當好的期刊, 常常有很多最新的知識發表) 他們 survey了眾多過去處理 imbalance data 的方法, 我個人看完是覺得滿實用的 其中分析了 over-sampling, under-sampling, kernel based, active learning, cost-sensitive 等應用 而我這邊針對 over-sampling, under-sampling 做簡易的翻譯跟解釋 Title: Learning from Imbalanced Data (2009) pdf:  http://www.ele.uri.edu/faculty/he/PDFfiles/ImbalancedLearning.pdf 其實此 paper 作者最近出書了, 但是我還沒有買到這本, 所以只好參考他這篇 paper 來解說

[ML] K - Nearest Neighbor (kNN)

kNN - K Nearest Neighbor 這個演算法是滿單純簡單的, 所以簡單提一下原理就好 首先, 大部分的 ML 狀況大致上都如下 假設我手上有一筆資料, 有很多的特徵跟每筆資料的類別都有 然後有人給我一筆只有特徵但不知道類別的資料, 我要怎麼辨識他 那, 單純一點的問題, 假設今天你要透過收集人臉, 來辨識人種 所以你可能有一批照片的檔案, 然後我在國外隨便路上搭訕了一個正咩拍了他張照片 結果想要猜測他是那一人種!! 最簡單的方式就是開始拿照片比對, 看有沒有跟她長很像的照片, 或者同樣有類似的特徵 我就會猜測她可能是哪種人種 而且如類似照片多的話, 我可以取前幾個都很類似的人, 看哪種人種最多, 就選那種 細部一點解釋, 我可以擷取出了人臉上的各個特徵, 像是 膚色, 輪廓, 眼睛高度, 鼻子高度, 嘴巴高度, 臉長, 臉寬, 髮色...etc 然後去計算每個特徵的差異, 最後加起來差異最小的前幾名再來投票決定 這樣我們就完成簡單的 K-Nearest Neighbor 演算法了 而較常見的計算差異的方法通常是用距離公式, 也就是 euclidean distance 取幾個人做比較也就是那個 k, k 通常都是20~30上下, 當然要看 data 的數量多寡決定 想要有系統的方式去預估 k 就用 cross validation 吧!! 其實這篇只是要為了之後的內容鋪路 XD 因為 kNN 相對簡單, 所以其實結果通常不容易太好, 可是他卻很適合做一些 data 的 preprocess 像是針對 imbalance data 就有一些特別用途, 這留到之後再說

[ML, Python] scikit-learn (revision 1)

其實雖然常常自虐自己寫 Machine Learning 的 algorithm 但實際上 ML 演算法太多, 而且加上一個實驗的整個步驟很多事情要做 所以沒事就會去網路上查查一些 off-the-shelf 的軟體來用 那以前在學校比較常用的是 Weka, 程式碼是以 Java 建構的 在學期間有個 project 是用 Weka 去修改 code 完成的 不過因為 Weka 算是滿交錯複雜, 很多 function 之間都互相有一定關係 所以到後來都只是使用上居多, 修改相對少 除了 Weka, 也有用過 Matlab 上的, 不過離開學校就沒機會了 那後來還是對 Python 比較有愛, Python 其實也有不少人寫 ML 來用 不過截至目前為止, 我找到比較完整而且方便使用的, 應該就是 Scikit - Learn 了 (念法 Sci - Kit - Learn) 官網:  http://scikit-learn.org/stable/ 這篇來簡單講一點內容, 跟稍微提一下怎麼使用他的演算法 此篇應該會一值更新, 因為還有很多功能沒放上

[ML] Kaggle comptition (revision 1)

其實現在有好多好多的 ML 比賽, 有空的話應該來找一兩個玩玩 說不定可以來實驗一些自己想出來的演算法XD Kaggle 是一個 data mining 的競賽平台, 提供很多企業使用 http://www.kaggle.com/competitions 重點是我還在 Coursera 某個 class 上面還看到了一大堆的人在組好多 Team XDDD 目前我有加減玩的大多都是一天有2~5次 submit 機會, 不可多重帳號 (但可同組) submit 用完大多都要 8~15 hr 不等的等待時間, 其實滿討厭的 Orz

[ML] Random Forest

圖片
終於來到我最喜歡的演算法 - Random Forest 會喜歡的原因是, 他簡單, 直觀, 當然前提是你要知道甚麼是 Tree 在看 Random Forest 之前最好先去了解一下 Tree, Link:  Decision Tree , Link:  CART 假設你已經知道甚麼是 Tree, 那你也差不多沒幾步就可以完成 Random Forest 了!! 在這之前先聽個故事... ptt 最喜歡惡搞的一個故事就是, 父親給兒子筷子, 然後一根很容易折斷 兩根很容易折斷, 三根也很容易折斷...嗯...這兒子力量好強!! 這應該叫他 SVM, 因為超強的XDDD 如果今天變成是, 給到第三跟筷子兒子折不斷, 那這時候就要跟他講團結的力量大XD 其實 Random Forest 就是團結的力量 !! 用一句話描述 Random Forest: Random Forest 基本概念就是先 build 多棵 Decision Tree, 然後集合這些 Tree 的力量為一個 Forest, 再來做預測 打完收工~~大~家~可~以~回~家~了!! 當然...事情永遠不會那麼單純XD

[ML] Classification & Regression Trees (CART)

圖片
上次提到了一個很簡單的 Decision Tree, 應該大多數人都可以很輕易理解 不過其實 Decision Tree 有相當多種變化, 這次來提一個也很常見的 Tree Classification & Regression Trees (CART)  西元1984年, 由 Breiman, Friedman, Olshen, and Stone 等人發表的演算法 是一個比我還老的演算法....Orz Breiman (1928 - 2005) 是個很強的教授, Random Forest (2001) 也是他發表的其中之一演算法 之後應該也會再寫個 Random Forest ~!!

[ML] K-means algorithm (revision 1)

圖片
這次來講個非supervised learning, K-means algorithm 大概算是unsupervised 演算法中, 數一數二簡單的 unsupervised 的意思就是, 給你的training data沒有答案 以前(大學)在DM的書上還看過說, 沒有專家跟你說答案 這DM的解釋讓我當初超莫名奇妙的, 不過後來想想, 其實也不算有問題 因為 data 可能就是沒有答案, 只是一坨混亂, 但是可以用一些演算法找出些許規則 Unsupervised 常見的運用有找出 data 中的特例, 將 data 區分成不同類別, 甚至是壓縮技術 首先, 因為 data 沒有 label, 所以只能從 feature 上下手找規則 如下圖 (我用random normal distribution 隨機建立出來三個 group)

[ML] Decision Tree (revision 3)

圖片
來提個我工作上我還滿喜歡使用的演算法 - Decision Tree wiki:  http://en.wikipedia.org/wiki/Decision_tree_learning decision tree 基本上 google 一下應該就可以找到很多東西 不過要注意的是要 google 的是 decision tree learning 之前在講 Adaboost 有稍微提到這東西, Decision Stump 就是一個簡化版的 Decision Tree 這東西其實說起來相當簡單, 嗯, 其實做起來也超級簡單XD 簡單提一下, 這邊有一個很有趣的網站 -  http://en.akinator.com/ 遊戲是這樣的, 你可以心中想一個人, 然後回答他的問題, 他問題答案只會是 - 是/否 回答他的問題一定的量之後, 他就會猜你心中想的人物 那, 這背後當然是有龐大的資料庫跟使用者回饋 不過技術上, 就很像是Decision Tree 題外話: 我還真的有去買C4.5作者的書, 可是有一半內容就只是把C4.5的程式碼印上去... C4.5 是一個很有名的 Decision Tree algorithm, 新版本叫做C5.0

[ML] Logistic Regression

圖片
最近忙了一點, 來討論一下其他演算法 Linear Regression, 看起來做的事情就是能夠找到一條線去 fit 可能的點(sample) 但是感覺起來, 功能性好像不太夠?? 如果說, 今天我們想要解決的問題改成是, 給定一堆點, 點的類別有兩類型(Binary) 我想要用一條線, 分別出兩種不同點的分佈, 這做的到嗎? 又, Linear Regression是output numerical的結果, 所以他不適合, 但是有個很適合又類似的演算法 Logistic Regression, 就是其中一種可行的辦法

[ML, Python] Gradient Descent Algorithm (revision 2)

圖片
因為最近有在看Coursera複習ML, 就順便結合我這邊的一些其他資料做個整理 Gradient Descent 一個在ML中相當常用來找minimum的演算法 在進入Gradient Descent之前, 要先談一下Linear regression with one variable Linear regression, 基本上高中數學課本就已經有教過了 給你一堆點, 要你找一條線去fit他, 可以用數學表示成 y = ax + b 那我們炫一點, 用ML常見的方式表示 x就是那些點 (input), 那 h θ (x) 就是那條可能的線

[ML, Python] Adaboost part 2

進入到實作部份, 先稍微整理一下, 用Adaboost要準備三個材料 1. Structured Input Data (意思就是檔案要整理過比較方便) 2. Weak Learner (一個簡單的演算法) 3. Adaboost (演算法主體) 4. 鹽巴一小匙(XD) 其實Adaboost屬於一種meta-algorithm, 白話一點說, 就是他是附加在某一演算法上的演算法 其實那個weak learner, 才是去學習的演算法, Adaboost不過就是強化了他罷了 所以來討論一下傳說中的weak learner (其實每個演算法都可以當weak learner, 但, 還是不要太強) 實作會參考Machine Learning in Action的範例來使用, 不過會稍微修改 (對了這是一本好書, 想學ML實作的人應該都去買來看看)

[ML] Adaboost part 1

圖片
當年我第一個學的ML algorithm, 就是Adaboost (Adaptive boosting) Adaboost wiki:  http://en.wikipedia.org/wiki/AdaBoost 因為他在平均辨識偵測的表現上, 算是較好的, 參數不多效果好, 好learning, 不學嗎? 其實應該是說這比SVM好介紹...所以Adaboost先登場XD 不過, 通常Adaboost要登場前, 要先拿Bagging拿出來鞭

[Machine Learning] 雜談兼瞎扯

還是比較喜歡寫自己的專長, 雖然碩士主攻Machine Learning, 但是還是覺的自己差得遠了 雖然當年(2010)唸碩士時有榮幸伴隨著指導教授的強大能力上了人生的第一篇ICML paper 不過, 人怎麼可以這麼快就滿足了呢???, 更何況當年還被NIPS打槍過XD, 不報仇不行阿(!!) 轉回來, 其實我還滿想要推廣ML的, 但是中英文的文件溝太大, 希望我自己寫(掰)的下去(掩面) 滿多資料跟內容可能都會是參考我當年指導教授(帥氣的HT-Lin)的著作 Book:  http://www.amazon.com/Learning-From-Data-Yaser-Abu-Mostafa/dp/1600490069 Offical Website:  http://work.caltech.edu/telecourse.html 上面是偷打廣告, 其實還會參考其他家我有買(?)的ML書籍, 例如: Introduction to Machine Learning (Ethem Alpaydin) 或者是看到某個演算法想要用中文去描述或者是如何實作也會紀錄(如果我有看懂...Orz) 我比較想要以中文為主來解釋眾多可怕的數學跟專有名詞....(自虐?) 再來是個人有時候的感想 我覺得很多人到後來都只會用tool, 像是用Weka用爽爽, 或者是只會用林老師寫的libsvm跑跑程式然後結果好棒好成功.... 但是演算法說不定都沒了解...只是會用tool, 這不行阿~!! 尤其如果看到較有水準的Conf paper, 需要實作, tool太複雜不會改, 那不就很可惜? (當然厚著臉皮去跟作者要code也不是不行, 但也要人家理你) 不過也不是真的實作就可以做出來....NIPS的一堆理論就深到爆炸, 想實作還要先看懂Orz...(但是真的好幾篇都很讚) 所以如果有閒有時間或者我如果看得懂...會順便翻譯一些不錯我也滿喜歡的ML-related Conference Paper 其實參照我自己工作的行業跟以前唸書的內容, 我應該也可以順便寫寫資安才對.....嗯...改天來翻譯幾本原文的Hack教學應該不錯(?!)