發表文章

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

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

[Python] Easy python profiling

話說, 常常寫 python 會碰到一些 performance issue 因為 python 太多好用的 function, 很容易就不小心用很直覺得方式去撰寫 code 而導致有些寫法其實會無意間增加很多的執行時間 一般情況下一般人在 Linux 會使用 time 來簡易的衡量程式跑得時間 可是問題是這並沒有辦法知道你寫的 function 中哪一行花費了最多的時間, or 耗費的記憶體 首先針對執行時間, 有個 python module 可以幫你改善這件事情 line profiler:  http://pythonhosted.org/line_profiler/

[Linux] CentOS iptables default

這兩天特別裝了兩台 CentOS 機器測試一些服務 發現我架起來的 web 服務, 不管怎樣都無法讓別台進入, 唯一通得只有 port 22 想說, 怪了, 才安裝完甚麼鬼設定都沒動阿, 結果發現是一個 iptables 的 default 擋住了 [root@hh ~]# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination RH-Firewall-1-INPUT all -- anywhere anywhere Chain FORWARD (policy ACCEPT) target prot opt source destination RH-Firewall-1-INPUT all -- anywhere anywhere Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain RH-Firewall-1-INPUT (2 references) target prot opt source destination ACCEPT all -- anywhere anywhere ACCEPT icmp -- anywhere anywhere icmp any ACCEPT esp -- anywhere anywhere ACCEPT ah -- anywhere anywhere ACCEPT udp -- anywhere 224.0.0.251 udp

[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/ 這篇來簡單講一點內容, 跟稍微提一下怎麼使用他的演算法 此篇應該會一值更新, 因為還有很多功能沒放上

[PHP] verify IPv6 and IPv4

剛好最近在找如何判斷給訂的 IP 是不是 IPv6 google 了一下, 在此篇找到:  http://www.electrictoolbox.com/php-validate-ip-address-filter-var/ 發現 PHP 居然內建自動偵測, 真是不錯, 但其實他是使用 PHP 的 filter_var 來幫忙篩選 詳細官方說明網頁:  http://php.net/manual/en/function.filter-var.php 不過要注意要 PHP ver 5.2 以上才支援喔!! 節錄偵測 IPv6 範例如下 function is_ipv6($ip) { if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) return true; else return false; } 理所當然也有偵測 IPv4的 function is_ipv4($ip) { if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) return true; else return false; } 前面的 FILTER_VALIDATE_IP 就是先判定他真的是 IP 那他還有偵測不要是 private ip range 的 flag: FILTER_FLAG_NO_PRIV_RANGE 算是一個偷懶的作法XD 當然偵測是否給定的是 IP, 也可以用 PHP 的 function: ip2long (但只限制IPv4) ex: function is_valid_v4($ip) { return sprintf("%u", ip2long($ip)); } $ip = "192.168.1.1"; echo (is_valid_v4($ip))? "$ip is a valid IPv4\n" : "$ip is an invalid IPv4\n"; $ip = "abc"; ech

[Vim] 要如何快速縮排特定範圍?

沒想到....沒想到....我以前一直埋頭苦幹著在那邊一個一個按下按倒退鍵刪掉 tab 的行為 原來一直都有快速鍵可以用....Orz 沒事果然要多回去看 vim 快速鍵....常常會忘記XDD 其實使用方式超簡單, 從你要縮排的那行往下數, 假設要縮排 10 行 就在 Normal Mode (也就是一般畫面非可編輯畫面模式) 要往左縮排, 按下 10 << 要往右縮排, 按下 10>> 就完成部份縮排了....我以前寶貴的光陰阿QO.....

[NodeJS] NodeJs Socket Server & Socket Client

大概是寫 Socket Server 寫上癮了 這次來寫如何用 NodeJS 來製作一個簡易的 Socket Server 由於 NodeJS 是天生就是為 Web 設計的, 所以他要做出 Socket Server 是再簡單也不過了 官方手冊:  http://nodejs.org/api/net.html 官方已經寫得很好了, 我順便給予一個超級簡易的範例

[NodeJS] Begin

其實我本身除了研究 ML 以外, 也很喜歡做 Web 相關的服務 不管是前端(從高中開始) 後端 & database (大學開始), 都有苦過一段時間 可惜 web 發展越來越多元, 越來越難去搞到甚麼鬼都學 所以現在大多是挑有一定需求的才會花時間去學來玩 (以前有很多都是為了當好人去學起來教人.....Orz) 那其實 NodeJS 也已經有一段時間了, 只是以前都只是聽過, 一直沒有吸引到我 直到我最近剛好在評比 Erlang 跟 NodeJS 作為背後的 Server 角度下的 performance 的時候 發覺 NodeJS 感覺是個不錯的玩意兒 (其實想找個取代 Erlang 的 Server 來架設服務, 因為會 Erlang 的人太少太少, 維護是個問題) 那也因為我以前也只有寫過簡易的 Javascript & Jquery, 這是第一次走完全的 NodeJS 這邊只是稍微整理一下可以學習 NodeJS 有關的資訊 NodeJS wiki:  http://en.wikipedia.org/wiki/Nodejs Node Official website:  http://nodejs.org/ NodeJS 是基於 Google 的 V8 Javascript 引擎建立出來的東西, 一個 event-driven 的 server

[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