2017年4月28日 星期五

[R] ML4B 課堂重溫 - 淺談 KNN (K-th Nearest Neighbors) 算法

將今個星期二的 R Machine Learning 堂記錯成星期三,錯過最重要的最後一堂(哭)。 原本想打得太慢的記錄可以等埋最後一堂。算了吧.... 當上一堂講了Regression model,第3堂開始講分類Classification的問題。從使用 KNN (K-th Nearest Neighbors) 算法,在Class套件中的knn() 開始,一路講了 Logistics regression 的 glm()、分類樹的rpart()、支持向量機(Support Vector Machine)的svm(),最後在垃圾郵件的分類時,提到為中文句子斷詞的JiebaR套件。

這種分類問題的簡單例子,例如你找來了100個男生的資料,包括資產、收入、樣貌、才華、談吐等評分。再找女生們去評定他是否「荀盤」。有了這組Training Set的數據,可以用來訓練你的電腦中的一個「荀盤分類器」。讓它透過學習這群女生的判斷結果,從而當有新一筆資料(男生)時,可以從他的「Package」判別他是否女生心目中的荀盤。又或者,找出要成為荀盤的條件,看看你....在哪方面可以改進改進。

How a Math Genius Hacked OkCupid to Find True Love

拿KNN 算法來解釋,這算法是利用特徵空間中"距離"最近的K個鄰居去預測目標(或者是你)的分類。例如,當相近的5個近鄰中有3個是+,2個是-,就預測自己也是+ 。就是一種物以類聚,人以群分的想法。當然這鄰居不是指在你生活圈子中身邊附近的人(但大概你們也有某些相似之處),而是考慮上面所收集的一組多維度的「Package」中各個因素的接近程度。
https://commons.wikimedia.org/wiki/File:KnnClassification.svg#/media/File:KnnClassification.svg
k=3:預測= ▲
k=5:預測= ■

2017年4月25日 星期二

到訪紅石門+穿迷椏走廊; 再訪砵甸乍炮台+發現安聯村; - 假期應當這樣充實

日期:2017-04-16
路線:烏蛟騰-下苗田-大峒-觀音峒-(近)紅石門坳-紅石門-牛角涌-黃竹涌-馬尿河-下苗田-烏蛟騰
時間:7小時15分

紅石門
印洲塘一角

今個周日的目標是紅石門,我對這個地方已經心儀很久。自己清單上這類未實現的路線還有很多,可以了結一個目標實在太好。上一次與紅石門有關的路線,已經是13年9月,走船灣淡水湖郊遊徑時,順道尋找在紅石門坳的入口。那次漫長而炎熱的路線仍感受深刻,所以今次都準備充足,2.75L的水、山杖、帽,地圖和指南針都帶備了。九點在大埔火車站集合和食早餐,一行3人坐275R到新浪潭總站,行入烏蛟騰的郊野公園指示地圖,大約在10.45am起行。

2017年4月18日 星期二

[JS] Node.JS 的起手式 / D3.JS 的測試

這個其實是上上星期的嘗試,一是Node.JS, 另一個是D3.JS。

Node.JS

這次在圖書館的HyRead電子書庫見到Javascript的書,打算重溫一下之際,找到兩本專講Node.js的。之前就因為辦公室的環境很多程式語言都不能隨便安裝,Javascript 這種有瀏覽器就可以支援的語言一起引起興趣。聽過有了Node.js 以後的Javascript 也可以做伺服器端的語言,一些用JS做爬蟲也是指向Node.js。可惜之前未能弄懂如何入手這個。今次就裝起來可以一試了。

2017年4月16日 星期日

丫髻山 - 橫洲與周邊的發展

早前看到 文化葫蘆 Hulu Culture 在Facebook上有一個活動宣傳 — 「入鄉‧隨續」X 元朗 & 屯門 :元朗棕地問題考察團,上丫髻山看橫洲了解該處的棕地情況。這丫髻山最初是因為攝影界日落水田的景色而認識,去年橫洲事件之後,這篇《橫洲登山記》也勾起興趣該親自走走看看。
上周日,一行人下午三時才在朗屏村出發,經過巴士站後橫過朗屏路,上山的路徑在東莞學校對面。在這段路旁的屋外已見寫上「不遷不拆」等橫條。據帶隊的區議員張生講解,在朗屏路這邊路旁的舊屋,就是橫洲「第一期」4000伙公屋計劃的選址。收地涉及綠化地帶上的三條非原居民村 - 永寧村、鳳池村及楊屋新村。據指當年政府初步估計當中永寧村只有14伙住戶,計劃出台時才知有40多戶。沿小徑在「梁山后土之神」兩邊各有上山的路,右邊是石屎梯級,我們走左面的泥路。這段路線也是附近居民晨運行山的路,前行不久便會到一個風雨亭,旁邊有晨運花園和觀音廟。當日也有上來參拜的人。向右望對面的山頭就是丫髻山,山高只有約百米,但已是元朗平原上最高的小山丘,兩丘南北相連,形如頭上雙髻而得名。清明過後,一面山坡被山火燒成啡啡黑黑的,山上多墳,混凝土的灰白也格外顯眼。

2017年4月4日 星期二

R User Group 的 Machine Learning for Beginners (三月)

三月另一個開始的活動,是R User Group 辦的Machine Learning for Beginners。共四堂,暫時上了一半,雖然不幸收工前總有意外,兩次都錯過了開頭的部份,還好有source code 看著理解,和對基本的統計總算仍有概念,

第一堂主是R 的數據處理。主要用"tidyverse"套件包,"tidyverse"是打包了一組有著共同資料形態和'API'設計,方便一齊使用的套件。透過"tidyverse"處理這些套件的 install (core + select) 和 load (core)的工序。當晚用到的主要指令包括來自 "magritti" 的 piping operator %>%,可以將一個output當做另一個指令的1st input,這個比起要括號配對括號的寫法的確方便很多。另外,還有來自 "dplyr" 的6個指令,包括'select', 'filter', 'arrange', 'mutate', 'group_by', 'summarise' 。在dataframe的數據處理上算十分方便。還有n, top_n, tally等一起使用。之後我把這用在處理問卷資料上已比去年方便得多了。
  • select: 根據給定的變數名稱選擇column
  • filter: 根據設定的條件做篩選row
  • arrange: 根據選定的變數內容做排列
  • mutate: 根據給定的值賦予新變數,或是變更舊變數
  • group_by: 根據給定變數做group,以銜接summarise
  • summarise: 資料整併

這些專門處理dataframe的數據,tidyverse有一個叫lubridate的套件處理日期時間,但另一方面自己所仍要找尋xts, zoo 等財務上時間序列的處理方法。見到有另一個"tidyquant"的套件,大概之後可以一試。

"tidyverse"的介紹和教學可以到:
  1. https://blog.rstudio.org/2016/09/15/tidyverse-1-0-0/
  2. http://r4ds.had.co.nz/model-basics.html