2016年2月27日 星期六

[超譯] 機器學習介紹

原文連結http://opensourceforu.efytimes.com/2016/02/an-introduction-to-machine-learning/


機器學習介紹

機器學習是計算機科學的一個領域,它探索「學習」與演算法的建構,從資料中學習,並依此做預測。機器學習涵蓋了模式辨認(pattern recognition)以及人工智慧中的計算式學習理論。它被用在許多應用中,像是自動駕駛車,有效率網頁搜尋,語音辨識…等。

編程(programming)基本上是告訴電腦要做什麼。傳統的編程習會假設寫程式的人已經理解問題,而且用這個理解,寫出一串清楚的指令來解決 某特定問題或完成特定任務。這類的例子非常多,事實上,絕大多數的程式都是這樣寫的,有著清楚可預期的輸入、輸出,與優美的演算法處理。例如,排序數字, 在文檔中移除某個字串,複製檔案…等等。
然而,有某些種類的問題,傳統編程或問題解決定方法不是這麼好使。例好,假設你有 50,000 個文件,必須分類成運動、商業、娛樂,又不能人工一個個處理。又例如,在上千個圖片裡找到特定的物件。在後面這個例子,物件可能是不同角度的相片,或是在 不同光線的條件下。你要如何分辨哪些相片有這個物件?另一個非常有用的例子是建立一個線上付款通道(online payment gateway)且希望防止詐欺交易。其中一個方法是辨認出潛在詐欺交易的跡象,在交易完成前啟動警報。這樣,你要如何準確預測而避免不必要的警報?
你可以簡單地說,這是不可能寫出非常準確的演算法來對付上述每個問題。我們能做的是,建立一個系統像人類專家一樣地工作。一個醫生可以檢驗報告看出病人生了什麼病。醫生的準確率不會是 100%,他多數時間會是正確的。沒人用程式寫出一個醫生,他這些知識來自學習與經驗。
我們需要的是一個系統能從經驗中學習,就算我們無法編程它叫它做特定的任務。我們做的是,給它看大量的範例,電腦是被編程為從大量的資訊中學習。在 它完成學習之後,就可以預測或做一些任務。這就是機器學習。醫生的例子有一點點與真正的機器學習不一樣,機器學習的核心思想是機器學習會有大量資料中學 習,而且會從經驗中改進。


機器學習與數學

許多機器學習演算法基本上企圖逼近一個未知的數學函數,而且絕大多數這些演算法本質上就是數學。因為資料有隨機性與不確定性,我們必須應用來自機率 與統計的概念。事實上,機器學習演算法非常依賴統計的概念,以致許多人認為機器學習該叫統計學習。離開統計,另一個被用到重要的數學分支是線性代數。矩陣 的概念,系統方程組的解,演算法的優化,都在機器學習中佔有重要地位。


機器學習與大數據

近來,機器學習與大數據走得很近。大數據指的是巨量的已存資料,而且是有意義地被使用。看一些例子來了解我說的。假設你已在交易平台上收集顧客交易 資料,這資料的量可以輕易地到達被認為是大數據的量,還有一些其他你存下的資料。現在,這些資料的用途是檢查顧客定單的狀態,計算商務會計上的盈虧,以及 其他技術或操作上的日常業務。除了這些,商業上也常想以獨特的方式利用這些資料。有些人對這分析使用特定的字。雖然直接地計算可以得到盈虧、總支出、總庫 存等答案,但稍進一步的資料操作會切片與切塊讓訊息顯現。我們依然會追求基本報表的背後訊息,辨認出不顯見的模式。我們也會想要建立預測模型。


不同的機器學習演算法

現在有兩種不同種類的演算法,受監督學習與無監督學習。受監督學習指的是,資料給序標籤,如下例所示:
中午12點時溫度 風速 風向 下午是否下雨
1 30度C 3 m/s
2 35度C 10 m/s 西
3 37度C 7 m/s 東北
4 34度C 8 m/s
假設我們必須預測下午是否下雨,使用溫度及風的資料。是否下雨記錄在「下午是否下雨」那一行,那就是標籤。這裡的溫度,風速、風向是預測子(predictor)或說是輸入變數,下午是否下雨則是輸出變數。
演算法從這樣的資料學習,叫做受監督學習演算法。有些資料是自動萃取/自動產生的,例如機器的日誌,多數需要人工加標籤,這樣增加資料獲得的成本。
受監督學習演算法的例子有「線性回歸演算法 linear regression algorithms」、「貝氏演算法 Naïve-Bayesan algorithms」「K近鄰演算法 k-nearest neighbour」…等等。
如果資料沒有標籤,它變成一個無監督學習演算法。例如:「K平均分群 k-means clustering」、「主成份分析 principal component analysis」…等等。
我們也可以用另一個邏輯來分類機器學習演算法,分成回歸演算法或是分類演算法。回歸演算法是指演算法真的預測一個數字,像是接下來幾天的溫度,股市收盤指數…等等。
分類演算法則是把輸入分類,例如是否下雨、股市漲還是跌、它是疾病 x、疾病 y 還是疾病 z……等等。


機器學習的工作

要理解與讚嘆的是,機器學習演算法基本上是數學演算法,我們可以用任何喜歡的電腦語言來實作。例如 C、PHP、Java、Python 甚至是 JavaScript。但我個人喜歡的是統計語言 R。在不同的語言有許多熱門的機器學習模組或函式庫,Weka 是強大的機器學習與資料採礦的軟體,它用 Java 寫的,而且很熱門。Scikit-learn 在 python 開發者中很熱門。Orange Machine Learning Toolbox 也是 pyhon 可用的工具。R 語言有許多非常基本的統計套件與模組,也有很多不同的套件像 e1071、Randomforest、Ann、…等依賴在不同的機器學習演算法上。Apache Mahout 是可拓展的機器學習演算法,通常用在大數據習統。Weka 非常強大,但它在商業使用上有授權問題,你可以用 Java-ML (Java machine learning algorithm)。雖然開發活動看起來停子了,它的函式庫仍值得一試,它擁有足夠的文件與教學讓人易於上手。我會建議有進一步需要的人可探索「深度學習演算法 deep learning algorithm」


原文作者

Mahesha Hiremath
The author is an independent data analytics consultant from Bengaluru. He is building a platform for electric vehicles-Project Vidyut. Project Vidyut is a not-for-profit initiative for promoting electric vehicles, and also to build open source electric vehicles. He can be reached at mahesha-at-projectvidyut-dot-org and tweets with handle@MaheshaHiremath.
Connect with him: Website

超譯系列是練習翻譯的技巧,順便分享給大家參考的資訊相關的資訊。
Exercise to translation. Give advise to me if something wrong.
譯者/translator: Ricky Teng
聯絡/contact: ricky-dot-teng-at-gmail-dot-com

2016年2月26日 星期五

[python]numpy array 的 reshape 練習

這裡收集 reshape 的練習。有時真的很常忘記。
import numpy as np
t1 = np.ndarray((10, 3,3), dtype=np.float32)
t2 = np.ndarray((10, 3 * 3), dtype=np.float32)

q = 0
for i in t1:
    t2[q]=i.reshape(9)
    q +=1
t3 = t1.reshape(10,-1)
t1
array([[[ 0., 0., 0.],
        [ 0.,  0.,  0.],
        [ 0.,  0.,  0.]],

       [[ 0.,  0.,  0.],
        [ 0.,  0.,  0.],
        [ 0.,  0.,  0.]],

       [[ 0.,  0.,  0.],
        [ 0.,  0.,  0.],
        [ 0.,  0.,  0.]],

       [[ 0.,  0.,  0.],
        [ 0.,  0.,  0.],
        [ 0.,  0.,  0.]],

       [[ 0.,  0.,  0.],
        [ 0.,  0.,  0.],
        [ 0.,  0.,  0.]],

       [[ 0.,  0.,  0.],
        [ 0.,  0.,  0.],
        [ 0.,  0.,  0.]],

       [[ 0.,  0.,  0.],
        [ 0.,  0.,  0.],
        [ 0.,  0.,  0.]],

       [[ 0.,  0.,  0.],
        [ 0.,  0.,  0.],
        [ 0.,  0.,  0.]],

       [[ 0.,  0.,  0.],
        [ 0.,  0.,  0.],
        [ 0.,  0.,  0.]],

       [[ 0.,  0.,  0.],
        [ 0.,  0.,  0.],
        [ 0.,  0.,  0.]]], dtype=float32)
t2
array([[ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.]], dtype=float32)
t3
 array([[ 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.]], dtype=float32)

2016年2月13日 星期六

[opensource]作業系統革命觀後筆記

#作業系統革命觀後筆記

2016.02.13


  1. 什麼是作業系統 -2:29
  2. Linus 說「他們把 Richard Stallman 當做哲學家,把我當成工程師。」(這兩個似乎是互看不爽) -3:47
  3. 開始實際由 FSF(GNU) 開始,但現在大家會想到 linux -4:02
  4. 自由的消失,因為密碼的出現。 -5:12
  5. open source 的點子其實電腦一開始就有。直到後來才變得不能看原始碼,也許 M$ 要負一些責任 -6:41
  6. 比爾蓋茲對於軟體所有權的公開信 -7:33
  7. 80 年代的作業系統授權讓 Stallman 很難過,然後成立自由軟體基金會 -9:25
  8. 1984 年 1 月,Stallman 開始 GNU 作業系統開發 -11:35
  9. GNU 的關鍵點就在於 free,指的是 freedom 而不是 free beer。是說擁有修改的權利。 -15:12
  10. 自由軟體還是有著作權的,只是作者給你自由散佈複製修改的權力,但是使用者也要一樣地對待別人 -17:01
  11. 1990年,整個 GNU 系統的核心,現在才要開始。而此時,Linus 的核心出現補上了缺的一塊 -23:12
  12. GNU/Linux system? -30:23
  13. Apache 是 linux 的殺手級應用 -32:05
  14. 作業系統套件散佈商的出現 -34:58
  15. 兩種軟體開發的模式 -38:58
  16. Netscape 是下一棒的抵抗專利軟體的軟體 -40:04
  17. "Netscape Source Code as Netscape Product"「Nestscape 的原始碼也是產品」-43:15
  18. 從 free software 到 open source -46:01
  19. free software 名稱是個問題,人們第一個想到的是免費而不是自由 -46:49
  20. 用 open source 取代 free software 的起源 -47:38
  21. open source 與 free software 的不同。理查史托曼 -48:10
  22. debian 的 open source 定義 -50:32
    1. 自由散佈
    2. 原始碼
    3. 可延伸 寫作(Derived Works Permitted)
    4. Integrity of the Author's Source Code (作者完整的原始碼)
    5. No Discrimination Against Persons or Groups (對任何個人或團體沒有歧視)
    6. No Discrimination Against Fields of Endeavor (不歧視任何領域)
    7. Distribution of License (散佈授權證)
    8. License Must Not be Specific to a Product (授權證不受產品限制)
    9. License Must Not Contaminate Other Software (授權證不污染其他軟體)
  23. database 軟體跟進 -53:28
  24. 主機哥很正常啊?你看滿滿都是。 -57:06
  25. windows 退貨日 -59:22
  26. 我真的很愛看兩個針鋒相對 -1:12:23
  27. 泡沫 -1:20:45
  28. 翻譯 WiDE (wide@edirect168.com) 2004.09.07 修訂/jserv 2015.03.11

2016年2月4日 星期四

[RPI]rpi-raspbian-設定網路增強版

因為我換個 ap 之後就連不上,研究之後發現除了之前提到的招數之外,還有一個很重要的,就是因為 wpa/wpa2 的關係,在 /etc/network/interface 裡無法處理,必須要用 wpa_supplicant 來處理(wep 可以直接在 interface 裡處理),所以,設定的方式就得要改變。

要注意的重點是
(1) wpa2 不支援 iface wlan0 inet static,要指定 ip 就一定要改成 iface wlan0 inet manual。(這是說 /etc/network/interface)
(2) 如果你的密碼不是 hex,就要在把密碼用雙引號夾起來。(這是指 /etc/wpa_supplicant/wpa_supplicant.conf)
(3) 要使用 wpa2,/etc/wpa_supplicant/wpa_supplicant.conf 裡,proto=RSN 與 key_mgmt=WPA-PSK 要設定。
(4) scan_ssid=1 照 參考[2] 的說法很好用。會自動連到可用的 ap。但是從 參考[5]、參考[6] 來看好像又是另外一回事。讓我日後再確認吧。

參考:
[1] https://www.raspberrypi.com.tw/2152/setting-up-wifi-with-the-command-line/

[2] http://www.algissalys.com/how-to/how-to-raspberry-pi-multiple-wifi-setup-through-the-command-line

[3] http://stackoverflow.com/questions/14119446/iwconfig-connect-network-via-wifi-on-terminal

[4] http://weworkweplay.com/play/automatically-connect-a-raspberry-pi-to-a-wifi-network/

[5] http://lynn770707.pixnet.net/blog/post/334312943-%5Blinux%5D-wifi-wpa_supplicant%E8%A8%AD%E5%AE%9A%E6%AA%94

[6] https://www.daemon-systems.org/man/wpa_supplicant.conf.5.html