發表文章

[Python] Virustotal api using python

圖片
雖然本身接觸到不少病毒資料, 不過每次都靠上傳檔案到 Virustotal 實在非常的沒效率 寫程式用 url upload 也不是不行, 不過其實他是有釋出 API 可以用的 一般帳號的 API 規定 1 分鐘最多 4 個 request, 而且是透過 http post 的方法且回傳是 json 格式 ( The chosen format for the API is HTTP POST requests with JSON object responses and it is limited to at most 4 requests of any nature in any given 1 minute time frame  ) 這篇參考的是他的 API 教學頁面, 做一個簡易的上傳跟擷取講解 (目前時間大約是 2013/12/23) Official Source:  https://www.virustotal.com/en/documentation/public-api/ 而使用他的 API 需要 API key, 這需要先註冊帳號才可以 首先, 英文版右上方有一個 Join our community (中文是加入我們社群) 依序填完相關資料即可, 這邊應該是沒什麼太大的難度 但是注意信箱要填正確, 他會寄確認通知, 等點了確認通知信之後才會正式開啟 之後到 virustotal 登入, 點右上角的帳號選擇 profile, 就會出現一些相關訊息, 點API就會看到API KEY 中間那個 API KEY複製下來之後, 就可以開始使用了 (他下面的聲明是說如果你用不夠想要更多的數量需求, 再寫信跟他要) 以下都是使用 python code 為範例 Upload Suspicious File 官網是建議利用 httplib 來跟 virustotal 提供的 api 做溝通, 但有三件事情要修改跟注意 首先會看到官網有提供一段 code import postfile host = "www.virustotal.com" selector = "https://www.virustotal.com/vtapi/v2/file/s...

[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)

[Python] Python Koan

呼 ~ 之前家裡出了點狀況, 加上最近忙碌了一陣子, 只好稍微擱置 這幾天比較有空, 終於有點時間回來寫 blog 回歸的第一篇先來簡單介紹一個很好的 software: Python Koan 官方連結:  https://github.com/gregmalcolm/python_koans 這是一個相當不錯的軟體, 基本上當然是在 linux 下比較適合運行 這是透過 python 的 TDD 來測驗跟了解甚麼是 python, 以及 python 要怎麼用 當然電腦中必須裝有 python 2.7 or python 3.1 的版本才行 例如我電腦中有 python 2.7 我可以到下載後的資料夾中的 python2 裡面, 執行 run.sh 他就會開始跟你講有哪個檔案有 error, 必須要修正才可以 (官網有示意圖) 修正了就會到下一個錯誤, 藉由這樣的方式來學習 Python 總共有 38 關, 297 個任務 就我個人完全過關之後的感想是, 最好有一些基礎跟了解再來玩會比較好 不然可能會不知道他考的是甚麼問題 那其實問題都滿簡單的, 只有到後面的 decorate 才開始有點難度 不過到那邊也表示快結束了 至少全部都過了之後, 也應該有基本的 python coding 的能力了 推薦給想要確認自己是否熟悉 python 的人可以試試看

[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: 那如果想要紀錄一些資料進出, 結果...

[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 就有一些特別用途, 這留到之後再說