A brief introduction to Machine Learning 投影片

這是我在今年 RubyConf China 2017 演講的投影片,錄影官方也釋出了在 Youtube。這場分享總結了這兩年業餘接觸機器學習的一些知識點和心得,希望能在 Ruby 圈推廣一下資料科學和機器領域,以及主流的 Python 工具鍊。同一天另一場還有一場關於機器學習的 姜鹏 – 金数据是如何鉴黄的 也講的非常好,介紹一個真實的應用案例,也推薦大家一看。

老實說,就像做 Web 用 Rails 很棒,做數據分析和機器學習,就是要用 Python 這套方案。這不代表整套 production code 都要從 Ruby 換成 Python ,就像 Apple 做機器學習的 Core ML 也是用 Python 方案作數據分析和機器學習訓練,在得到模型和參數後,實際運作的 production code 當然還是用 swift 來進行預測。

另外,我覺得為什麼 Ruby 圈老是去黑 Python 呢?(的確,如果眼界只在做 Web 的話,我以前也是覺得學了 Ruby 就用不到 Python 了),我認為就培養個人技能來說,應該挑互補的,而不是挑做一樣的事。Python 可以做 A.I. 可以做數據分析,Ruby 有很好的 OO 物件導向設計,做應用程式非常適合,是可以互補的。反而例如去學 Elixir 跟用 Ruby 一樣是做 Web 開發,對個人的技能發展我認為是重疊的。

Tweets 整理 (2017 Q3)

2017/9

  • 2017-09-21 23:17 1. Python 是 Ruby 做 Data Science 最好的朋友 2. 透過 PyCall t.co/wbOpvsmP58 就可以調用 Pandas, seaborn, matplotlib, sciki… t.co/Bl37ZP7OfY
  • 2017-09-21 13:12 “科学式家|戴文渊:机器学习教科书的 7 大经典问题” t.co/b9zHC2xGeV # 神经网络不宜超过三层? 决策树不超过五层? 特征选择不超过一千个? 集成学习获得最好学习效果? 正样本和负样本均采样到1:1? 交叉验证是最好的测试方法? 过拟合一定不好?
  • 2017-09-17 17:27 @judithyhh 謝謝~~ 😄
  • 2017-09-17 09:33 “Packing your Ruby application into a single executable” t.co/TThHLL6vLU 把 Ruby 專案打包成一個執行檔,支援 Mac/Windows/Linux,牛逼!
  • 2017-09-15 11:43 RT @peter_szilagyi: Two months in the work, but Geth 1.7.0 (Megara) is finally here! Faster, slimmer, Byzantium enabled! #Ethereum ;) t.co/GztSNeLbA2
  • 2017-09-06 11:58 Wi-Fi: No hardware installed + Bluetooth not available + SD卡插槽失能,是在提醒我該換 MacBook Pro 了嗎? # 已重置 NVRAM t.co/d0QOD7GlWr 還是沒用 :(
  • 2017-09-04 23:02 @cowboy_ryan 是 Ropsten test network 測試網絡啦,這裡的以太幣不值錢
  • 2017-09-01 11:47 每個想學怎麼用 geth 編譯智能合約的工程師好像都要踩一次這個雷啊 t.co/JGhEXlGB5A “eth_compilers, eth_compileSolidity are gone in go-ethereum 1.6.0”

2017/8

  • 2017-08-31 01:24 “Scalable Blockchain Infrastructure” t.co/Mx5ZR73sI2 # 1. 連 geth 或 parity 都不用裝了,發 HTTPS call 就好了 2. 為什麼背景圖用哥吉拉啊,是有一點點諧音啦… XD
  • 2017-08-30 02:33 🔨 mined potential block 🔗 block reached canonical chain # 人生第一次挖到礦 # 挖了半小時拿到五顆以太幣 # 在 Ropsten test network 啦 # 真是太有趣了
  • 2017-08-29 22:13 在本機同步 Ethereum 或 Bitcoin 全節點的話,記得設定 Mac 的 TimeMachine 不要備份那些目錄啊 # TM 狂跑才想到這事
  • 2017-08-21 18:06 @jeffhung @number5 tig 太陽春啦
  • 2017-08-21 15:27 @number5 GitX 沒更新很久了….. 有bug沒人修啊
  • 2017-08-21 15:17 “Fork: a fast and friendly git client for Mac” t.co/wRbFIQo0LK # 看起來不錯,喜歡這種輕量級的
  • 2017-08-20 11:54 IBM 主推的 HyperLedger Fabric 區塊鏈跟它的智能合約是用 Go 語言寫的,然後官方安裝步驟是用 Docker 安裝,原來金融業也這麼潮了。
  • 2017-08-19 17:14 t.co/K12LueiFwV # 兩百行的 Node.js 區塊鏈簡單實作 1. 用 websocket 實作了 P2P 網絡 2. 用 express 做了 HTTP API 3. 可惜沒有實作共識系統,想看 PoW 機制
  • 2017-08-14 17:33 @hSATAC 快發一篇 LOGAN
  • 2017-08-07 21:35 “TodoMVC for the RealWorld” t.co/qMFcCguTFa # (任意前端框架 x 任意後端框架)的範例 app
  • 2017-08-05 23:25 RT @audreyt: 人們不再彼此相互信任,為什麼?我們怎麼改變這種情況?合作博弈論的互動講解手冊: t.co/gXKQ7LKOMP
  • 2017-08-04 10:36 RT @webmaxru: This day goes to #PWA history! Initial steps of #ServiceWorker in #Safari: t.co/WU4Uin6ZHP. Kudos to… t.co/VolDoNRo9O
  • 2017-08-04 01:39 記得你是何時加入 Twitter 的嗎?我記得!#我的Twitter週年紀念日 t.co/WyCkmOkq8d

2017/7

Git worktree: 同時開多個工作目錄

Git 的 worktree 是 Git 2.5 新增的功能,有點相見恨晚啊。

有在用 Git 的都知道如果工作目錄(working tree)修改到一半的話,是不能隨便切換 branch 的。解決方式是要麻是 git stash 先暫存起來,不然就是先暫時 commit 等會再 reset 回來。這都還好。

但是,還是會碰到一些需要同時處理不同 branch 的情況,例如想要同時修改或對照不同 branch,或是一邊跑測試一邊繼續寫code,甚至是想同時開發測試不同 branch 等等。這時候就得另外 clone 一個目錄,但這就是麻煩的開始,不同的 repo 目錄要怎麼同步最新的修改? 重新複製目錄? 先 git push 再 pull 一次? 總之就是有點繞啊。

git worktree 這個神奇的指令可以創造出另一個工作目錄,例如:

$ git worktree add -b hotfix ../hotfix master
Preparing ../hotfix (identifier hotfix)
HEAD is now at 46d363dc XXX

如此就會在上一層新建立一個 hotfix 目錄,並新建一個分支 hotfix。這種工作目錄叫做 linked working tree。

cd ../hotfix 就是一個乾淨從 master 分出來的 hotfix 分支,可以在這邊做事。最後 commit 完事之後,直接 rm -rf 砍掉這個 hotfix 目錄(放心,東西已經進 branch,這可以砍掉了),接著 git worktree prune 就會清除 linked working tree 記錄了。不清除也沒關係,三個月後也會自動清掉。

不過如果你把 linked working tree 放在會被移除的裝置上,例如外接硬碟上,這樣可能會不小心被 Git 清掉。這時候需要用 git worktree lock 指令。

最後,git worktree list 則會列出目前所有的工作目錄。

如何真正讓 Ruby Constants 常數無法被修改

大概翻了一下 Effective Ruby (中文原文),覺得其中第四個 Be Aware That Constants Are Mutable 有點意思,記錄下來。

在 Ruby 裡面大寫開頭的叫做常數,Ruby 開發者可能知道這個常數是可以被事後修改的,雖然會有警告啦,但是還是被修改到了,那有沒有辦法可以真正無法被修改呢? 原來要用 freeze,而且還需要點技巧。

讓我們看一下代碼:

Continue reading 如何真正讓 Ruby Constants 常數無法被修改

Tweets 整理 (2017 Q2)

2017/6

2017/5

  • 2017-05-26 16:36 @deduce 我不是說十年,你等了五年,自己算算看 😝
  • 2017-05-26 12:51 @deduce 一直都有默默更新啊,我的目標是從開始寫到完成出版,十年磨一劍。
  • 2017-05-25 01:08 RT @dhh: Webpacker 2.0 for Rails is out: t.co/QM1KaGn3gj – new config format, so some upgrading required. Kudos to @javan & Gaurav Tiwari 👏
  • 2017-05-23 13:00 「第一性原理」(First Principle) t.co/LlTEGfr3eI 1. 學習前期用具體技術成長比較快,但後期就需要掌握知識本質才能突破,產生知識爆炸點 2. 知識從沒有爆炸,現在爆炸的只是垃圾資訊
  • 2017-05-20 08:45 抵達 Vue Conf 會場 t.co/whQcXJP9xs
  • 2017-05-19 17:45 “全球首届Vue.js开发者大会” t.co/SipsflETVV 跟 “VueConf 2017” t.co/y93BL8E6vI # 兩個都說自己是第一個 Vue Conference… XD
  • 2017-05-18 13:13 “程序员面试什么最重要?” t.co/bSqqouqdzn # 性格 > 经验 > 基础 > 算法
  • 2017-05-13 19:19 “王垠: 我为什么不在乎人工智能” t.co/Uy0hcRnHzm # 如果 A.I. 取代了人類工作,我認為 “無條件基本收入” 會是正解,只是我也覺得自動編程是不可能的事情 XD
  • 2017-05-04 16:39 “去年雙 11 期間的 1.7 億個 BANNER,都來自阿里的設計人工智能「魯班」” t.co/eotytDtEJk # 連廣告 banner 圖片也是個性化推薦自動合成的啊,厲害 # 讓天下沒有難擼的 banner,諧音就是「魯班」… XD
  • 2017-05-04 15:30 “开撕:亚马逊的推荐到底行不行?” t.co/9w5zGiHkR6 # 如何评价推荐系统的作用
  • 2017-05-04 12:24 “NCurses Disk Usage” t.co/6Y9AjSyzu4 # disk usage analyzer # 在 server 上找大檔案刪的好工具

2017/4

  • 2017-04-28 08:39 RT @dhh: Rails 5.1 FINAL has been released! Loving JavaScript, System Tests, Encrypted Secrets, and more. Happy @RailsConf 🎉 t.co/M9KQlcLy4R
  • 2017-04-22 20:55 “因APCN2海纜障礙影響HiNet客戶連線歐美、日本部份網站之連線品質” t.co/xMbS2YSa23 # 多發生幾次後,就覺得要做生意的話,還是放島內的 Google Cloud Platform 比較放心啊
  • 2017-04-21 22:47 @larrylv 每個月會去一次北京待一週喔
  • 2017-04-20 16:17 “德鲁克谈真正的老师” t.co/Ecbx4TTDRu # 會教的老師少,會教你怎麼學的老師更少
  • 2017-04-20 13:43 有些人覺得付錢去上課是繳智商稅,學習技術就是要很苦逼一萬小時才能精通,任何加速學會的課程都是膚淺的。但是如果學習心態正確,花錢有個好老師可以善用,我認為進步會比自己摸索快很多。 t.co/Pf8c9tfJZ5
  • 2017-04-20 13:21 做開發還可以自己學,作維運 Operations 需要環境滋養啊 t.co/2fHeTgh01e
  • 2017-04-20 13:13 中國市場的話,用支付寶、微信支付比 Paypal 或 Stripe 更方便,手機逼一下 QR Code,按個確認就付款完成,比輸入信用卡卡號又更快了
  • 2017-04-20 12:55 “PayPal 台灣交易系統更新
    t.co/lIwJkvpD2R # PayPal 不能用、Stripe 也不能用。要好好收款只能把公司註冊在國外啊 XD
  • 2017-04-05 01:00 “Big List of Naughty Strings” t.co/joA6m1tKjk # 收集各種奇怪的字串,用來測試用戶輸入會不會弄壞系統 XD

Tweets 整理 (2017 Q1)

2017/3

  • 2017-03-19 22:41 t.co/nOaidxstej Web Developer 技能樹 # 1. 雖然說狂點技能會有 level up 成長的感覺,但是如果不是平常需要用到的技術,學了也是很快就忘記了 2. 大概知道那是什麼,有需要再學就好了
  • 2017-03-19 14:47 多看閱讀 t.co/U7cgQeUTD6 的中文字型真好看,而且 iPad 上翻頁好快,有種爽感
  • 2017-03-17 20:20 RT @danielteng: 柳依依说:其实我爸是个程序员 ,我大姐叫玲玲 ,二姐叫玲依 ,三姐叫依玲 ,我妹妹叫忆初。 t.co/mC9SvWdME4
  • 2017-03-13 22:05 @hlb @fukuball 是 @KKTIX 的前身 Registrano 的前身叫做一個 Bao.Ming.Web 的專題作業,用的是十年前的今天釋出的 Rails 1.2.3 (考古中)
  • 2017-03-11 22:17 聽了知乎 Live 覺得失望…. 本來以為是視訊演講,沒想到只有語音而已,而且還不是一直講,而是拆成三分鐘以內一段一段的聲音檔,然後有 1/3 的時間在發呆等聲音檔出來,有時候還要自己去點播放不會連續播放,這樣聽下來感覺好中斷好拖戲啊。
  • 2017-03-10 13:25 RT @tenderlove: People should really upgrade to Ruby 2.4. We’re seeing GC time cut in half for the same throughput of allocations
  • 2017-03-09 17:15 Turbolinks 5 之這是 feature 不是 bug 的最佳範例: 放在 body 的 script 會執行兩遍 t.co/EC2y5Pje85 # 似乎沒什麼好解法,只能 disable turbolinks-cache 最簡單
  • 2017-03-02 23:42 RT @dhh: Rails 5.1.0.beta1: Loving JavaScript, System Tests, Encrypted Secrets, and MORE. So. Much. Good. Stuff! 🎉❤️ t.co/QSij6qm01I

2017/2

  • 2017-02-26 13:38 RT @vuejs: Looks like Rails 5.1 will be supporting Vue + webpack out of the box: (thanks @ytbryan!) t.co/wlMc0WVBv1
  • 2017-02-02 12:38 “Too DRY – The Grep Test” t.co/z7k7y4EgVI 任何程式宣告或呼叫函示、類別、模組或變數,都應該可以被 grep 完整辨識找出來。特別是對動態語言來說,如果搜不到會影響那裡,改 legacy code 基本上是在踩地雷啊。
  • 2017-02-01 18:05 “2016前端开发技术巡礼” t.co/7U4DTZJAqx # IE8 死、babel 不會死、async/await 很威、jQuery 會凋零、Angular2 太複雜不看好、看好 Vue2、ReactNative 和同構框架還不成熟、來學d3資料視覺化

2017/1