發表文章

目前顯示的是 8月, 2013的文章

[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 來解說

[Python] Easy Dictinoary

最近有點忙, 來更新一個簡易的工具, ML 晚點再更新 python 有個很好用的工具 - dictionary, 基本上就是 key, value 的 data structure 使用相當簡單 Code: sample = {} sample['a'] = 5 sample['b'] = 3 sample['c'] = 2 print sample Result: {'a': 5, 'c': 2, 'b': 3} 同樣的結果也可以這樣給值 sample = {'a': 5, 'c': 2, 'b': 3} 那常見的還有印出所有 keys 或者是印出 dict 所有內容 print sample.keys() # 可以查出所有的 keys for k, v in sample.items() # 可以印出所有 key, value pair print k, v 而使用 dictionary 可能常常會去判斷是不是有已經有此 key, 有的話 value +1, 沒有的話 value = 1 寫法常見如下: Code: key = 'a' if key in sample: # 用 in 就夠簡白了, 還有很多其他方法並沒有比較快 sample[key] += 1 else: sample[key] = 1 因為 dictionary 預設是空值, 所以都要做這樣的設定 Q: 如果今天我們想要有初始值的 dictionary 呢? A: 其實在 python 的 collections library 有一個 defaultdict 可以預設初始值 Code from collections import defaultdict sample = defaultdict(lambda: 0) key = 'a' sample[key] += 1 也就是不用多那個 if 判斷, 因為他是偵測如果沒有這個 key, 他會先設定成 0 然後再 +1 Q: 那如果想要紀錄一些資料進出, 結果