2018年9月28日 星期五

初試 YOLO


放低了「機器學習」一段時間,又是時候進修一下。每次學習之前,我都會訂立一個成果,然後找方法達成。今次,我想用 iPad 鏡頭去辨認物件;在網上搜尋相關的做法,找到了一個較新的 YOLO 算法像乎不錯,於是嘗試一下。這篇文章對 YOLO 算法進行解說,清楚易明。

YOLO 的官方網頁是 https://pjreddie.com/darknet/yolo/。按照指示安裝好 Darknet,下載已訓練好的模型便能使用。不過,要執行 Darknet 需要花一點功夫去設定好運行環境;而我的過程不太順利。經過一輪版本問題後,終於成功輸入圖片並檢測當中的物件。我用的是 YOLO v2,預設能檢測 80 樣不同的物品。需要下載或自行製作 .cfg 及 .weights 檔。前者是定義智能網絡的結構,後者是該結構每一個節點的比重值。有了這兩組數據,便能進行偵測。

2018年9月25日 星期二

micro:bit 示範程式


早前想買一塊 BBC 的 micro:bit 來玩玩;到大阪日本橋時找到它,但最後沒有購買。昨天,女兒從中學帶回來一塊 micro:bit 及 robot:bit,於是我研究了一下,並編寫了第一個程式:

//----------------------------------------------------------------------------------------
//  micro:bit DEMO Program 01
//----------------------------------------------------------------------------------------
//  Platform: micro:bit Javascript or Blocks
//  Written by Pacess HO
//  Copyright Pacess Studio, 2018.  All rights reserved.
//----------------------------------------------------------------------------------------

let x = 0
let y = 0
let led1 = 0
let led2 = 0
let led3 = 0
let led4 = 0
let step = 0
let offset = 0
let direction = 0

led1 = 0
led2 = 50
led3 = 100
led4 = 150
step = 20
offset = 0
direction = 1

music.beginMelody(music.builtInMelody(Melodies.Birthday), MelodyOptions.OnceInBackground)
basic.forever(() => {

   offset = offset + direction
   if (offset <= 0) {
      direction = 1
   }
   if (offset >= 5 * 5 - 1) {
      direction = -1
   }

   x = offset % 5
   y = offset / 5

   led.plot(x, y)
   basic.pause(80)
   led.unplot(x, y)

   robotbit.rgb().setPixelColor(0, neopixel.hsl(led1, 50, 30))
   robotbit.rgb().setPixelColor(1, neopixel.hsl(led2, 50, 50))
   robotbit.rgb().setPixelColor(2, neopixel.hsl(led3, 50, 50))
   robotbit.rgb().setPixelColor(3, neopixel.hsl(led4, 50, 30))
   robotbit.rgb().show()

   led1 = led1 + step
   led2 = led2 + step
   led3 = led3 + step
   led4 = led4 + step
})

2018年9月24日 星期一

外幣兌換率數據


這個星期收集了不少數據,有些還沒有想到用途;然而,有些數據則會拿來作為投資趨勢分析,再加上 LINE Bot 作為訊息媒體,希望能及時通知自己關於投資的機會。其中一樣,就是外幣兌換率數據。利用定時執行的程式,去找出哪隻外幣值得買入,又或是留意有哪隻外幣應該拋售。

2018年9月23日 星期日

香港恆生指數數據


朋友介紹我玩期指。做了咁多年人,知道自己沒有橫財命,所有成就都要靠一雙手,腳踏實地去掙回來;炒股賭博不是我杯茶。不過,我絕對不介意從數學角度出發,去探求提升勝算之方法。研究是需要數據,於是花了一個小時,收集起恆生指數數據。

2018年9月22日 星期六

地震數據


又花了一個小時編寫數據抓取程式。今次爬的是世界各地的地震數據。原來一天內有不多地震...。目前這些數據雖然沒有特定用途,但日後把它們導入「機器學習」中,可能會發掘出人類發現不了的模式。雖然香港政府沒有做統一數據開放,但想要數據的人,目前還是有方法能抓到所需。

2018年9月21日 星期五

香港潮汐漲退數據


除了日落日出數據外,還有甚麼天文數據可以抓下來?我發現了潮汐漲退數據。只要把原先用的數據擷取程式稍微改動一下,便能抓取潮汐漲退數據。暫時還沒有想到確切的用途,不知道是否能從數據中推斷出天災的降臨呢?

2018年9月20日 星期四

香港日落日出數據


我正在一點一滴地收集不同的數據;雖然還未想到怎麼用,但有些事情還是越早開始越好;這樣才能收集到數據的變化。自從學習術數後,知道日月星辰的軌跡能影響人類的表現,所以一提起收集數據,我便特別希望收集天文相關的數據。香港的溫度數據收集了,下一組便是日出日落數據。花了一小時完成了程式,設定好定時器,每天自動收集數據,又多了一點點資源去應付未來的需要。

2018年9月7日 星期五

香港樓宇成交數據


同事希望取得香港樓宇成交數據作為分析之用,給我一個參考網址。認為數據除了能幫到他外,也能滿足到我的好奇心;於是花了兩個半小時編寫出一個數據擷取程式。它會每天自動執行,收集租賃及售樓的成交數據,儲存在 MySQL 數據庫中。

既然數據到手,我也嘗試看看當中的啟示。首先是顯示 2018 年 6-8 月份售樓成交量最多的地區:
SELECT min(contractDate) AS min, max(contractDate) AS max, district, COUNT(*) AS count, avg(price/saleableArea) AS average_price FROM `estate_price` WHERE contractDate>="2018-06-01" AND contractDate<"2018-07-01" GROUP BY district ORDER BY count DESC, min ASC, max ASC LIMIT 10;




得出最近三個月,元朗區的樓盤成放宗數一直上升;不過每尺價錢回落了,每尺售價 HK$12817。大埔區也很利害,每個月的成交宗數都破 400。

之後是顯示 2018 年 6-8 月份租賃成交量最多的地區:
SELECT min(contractDate) AS min, max(contractDate) AS max, district, COUNT(*) AS count, avg(price/saleableArea) AS average_rent FROM `estate_rent` WHERE contractDate>="2018-06-01" AND contractDate<"2018-07-01" GROUP BY district ORDER BY count DESC, min ASC, max ASC LIMIT 10;




原來沙田區是最受租賃歡迎;跟售樓一下,七月份每尺租金上升後,到八月份回落少許,每尺租 HK$43.17。

再看看八月份最多成交的元朗區,最受歡迎的十大樓盤:
SELECT min(contractDate) AS min, max(contractDate) AS max, district, estate, COUNT(*) AS count, avg(price/saleableArea) AS average_price FROM `estate_price` WHERE contractDate>="2018-08-01" AND contractDate<"2018-09-01" AND district="元朗" AND saleableArea>0 GROUP BY estate ORDER BY count DESC, min ASC, max ASC LIMIT 10;


原來是「Yoho Midtown」!尺價達 HK$16706,年輕人怎樣才能供得起?!

有了這些數據,只要編寫一個報告板,便能顯示走勢;若配合 LINE Bot 的話,更可以在運算出投資建議時發出即時訊息呢。