終於有時間了,前幾日正式開始了我的機器學習之旅,總結下目前已掌握的知識。
機器學習
機器學習本質是一項監督分類/迴歸問題,"監督"表示你有許多樣本,假設你知道這些樣本的正確答案,我們不斷地把樣本交給機器,並告訴機器這些樣本是正確或錯誤的,對機器進行訓練,最終達到機器學習的目的。
監督學習
簡單說:監督學習就是教會計算機去完成任務,如:根據你已經標記為垃圾郵件的郵件學習識別垃圾郵件,根據你喜歡的電影推薦其他你可能喜歡的電影...
監督學習可以理解為以下兩種模型:
- 迴歸模型 即:根據之前的資料預測出一個準確的輸出值
迴歸問題通常是用來預測一個值,如預測房價、未來的天氣情況等等,例如一個產品的實際價格為500元,通過迴歸分析預測值為499元,我們認為這是一個比較好的迴歸分析。
一個比較常見的迴歸演算法是線性迴歸演算法(LR)。另外,迴歸分析用在神經網路上,其最上層是不需要加上softmax函式的,而是直接對前一層累加即可。迴歸是對真實值的一種逼近預測。
- 分類模型 即:根據之前的資料和分類/標籤將輸入資料準確地進行分類
分類問題是用於將事物打上一個標籤,通常結果為離散值。例如判斷一幅圖片上的動物是一隻貓還是一隻狗,分類通常是建立在迴歸之上,分類的最後一層通常要使用softmax函式進行判斷其所屬類別。
分類並沒有逼近的概念,最終正確結果只有一個,錯誤的就是錯誤的,不會有相近的概念。最常見的分類方法是邏輯迴歸,或者叫邏輯分類。
- 如果還有其他模型,之後再補充...
分類模型和迴歸模型本質一樣,分類模型可將回歸模型的輸出離散化,迴歸模型也可將分類模型的輸出連續化。
兩者的區別在於輸出變數的型別。
- 定量輸出稱為迴歸,或者說是連續變數預測;
- 定性輸出稱為分類,或者說是離散變數預測。
舉個例子:
- 預測明天的氣溫是多少度,這是一個迴歸任務;
- 預測明天是陰、晴還是雨,就是一個分類任務。
無監督學習
無監督學習中,我們將讓計算機自己進行學習,無監督學習將在今後的進階文章中整理。
兩者的區別
機器的整個學習的過程非常像人類的學習習慣,人類通過觀察很多示例來進行學習,計算機進行機器學習也是如此,你給他提供很多示例,計算機分析發生了什麼並學習,而這個分析學習的過程便是機器學習要解決的核心問題。
下小節摘自知乎 - 什麼是無監督學習? - 王豐的回答:
是否有監督(supervised),就看輸入資料是否有標籤(label)。輸入資料有標籤,則為有監督學習,沒標籤則為無監督學習。
首先看什麼是學習(learning)?
一個成語就可概括:舉一反三。此處以高考為例,高考的題目在上考場前我們未必做過,但在高中三年我們做過很多很多題目,懂解題方法,因此考場上面對陌生問題也可以算出答案。
機器學習的思路也類似:我們能不能利用一些訓練資料(已經做過的題),使機器能夠利用它們(解題方法)分析未知資料(高考的題目)?
最簡單也最普遍的一類機器學習演算法就是分類(classification)。對於分類,輸入的訓練資料有特徵(feature),有標籤(label)。所謂的學習,其本質就是找到特徵和標籤間的關係(mapping)。
這樣當有特徵而無標籤的未知資料輸入時,我們就可以通過已有的關係得到未知資料標籤。在上述的分類過程中,如果所有訓練資料都有標籤,則為有監督學習(supervised learning)。
如果資料沒有標籤,顯然就是無監督學習(unsupervised learning)了,也即聚類(clustering)。
目前分類演算法的效果還是不錯的,但相對來講,聚類演算法就有些慘不忍睹了。確實,無監督學習本身的特點使其難以得到如分類一樣近乎完美的結果。
這也正如我們在高中做題,答案(標籤)是非常重要的,假設兩個完全相同的人進入高中,一個正常學習,另一人做的所有題目都沒有答案,那麼想必第一個人高考會發揮更好,第二個人會發瘋。
這時各位可能要問,既然分類如此之好,聚類如此之不靠譜,那為何我們還可以容忍聚類的存在?
因為在實際應用中,標籤的獲取常常需要極大的人工工作量,有時甚至非常困難。
例如在自然語言處理(NLP)中,Penn Chinese Treebank在2年裡只完成了4000句話的標籤……
終於有時間了,前幾日正式開始了我的機器學習之旅,總結下目前已掌握的知識。
機器學習
機器學習本質是一項監督分類/迴歸問題,"監督"表示你有許多樣本,假設你知道這些樣本的正確答案,我們不斷地把樣本交給機器,並告訴機器這些樣本是正確或錯誤的,對機器進行訓練,最終達到機器學習的目的。
監督學習
簡單說:監督學習就是教會計算機去完成任務,如:根據你已經標記為垃圾郵件的郵件學習識別垃圾郵件,根據你喜歡的電影推薦其他你可能喜歡的電影...
監督學習可以理解為以下兩種模型:
- 迴歸模型 即:根據之前的資料預測出一個準確的輸出值
迴歸問題通常是用來預測一個值,如預測房價、未來的天氣情況等等,例如一個產品的實際價格為500元,通過迴歸分析預測值為499元,我們認為這是一個比較好的迴歸分析。
一個比較常見的迴歸演算法是線性迴歸演算法(LR)。另外,迴歸分析用在神經網路上,其最上層是不需要加上softmax函式的,而是直接對前一層累加即可。迴歸是對真實值的一種逼近預測。
- 分類模型 即:根據之前的資料和分類/標籤將輸入資料準確地進行分類
分類問題是用於將事物打上一個標籤,通常結果為離散值。例如判斷一幅圖片上的動物是一隻貓還是一隻狗,分類通常是建立在迴歸之上,分類的最後一層通常要使用softmax函式進行判斷其所屬類別。
分類並沒有逼近的概念,最終正確結果只有一個,錯誤的就是錯誤的,不會有相近的概念。最常見的分類方法是邏輯迴歸,或者叫邏輯分類。
- 如果還有其他模型,之後再補充...
分類模型和迴歸模型本質一樣,分類模型可將回歸模型的輸出離散化,迴歸模型也可將分類模型的輸出連續化。
兩者的區別在於輸出變數的型別。
- 定量輸出稱為迴歸,或者說是連續變數預測;
- 定性輸出稱為分類,或者說是離散變數預測。
舉個例子:
- 預測明天的氣溫是多少度,這是一個迴歸任務;
- 預測明天是陰、晴還是雨,就是一個分類任務。
無監督學習
無監督學習中,我們將讓計算機自己進行學習,無監督學習將在今後的進階文章中整理。
兩者的區別
機器的整個學習的過程非常像人類的學習習慣,人類通過觀察很多示例來進行學習,計算機進行機器學習也是如此,你給他提供很多示例,計算機分析發生了什麼並學習,而這個分析學習的過程便是機器學習要解決的核心問題。
下小節摘自知乎 - 什麼是無監督學習? - 王豐的回答:
是否有監督(supervised),就看輸入資料是否有標籤(label)。輸入資料有標籤,則為有監督學習,沒標籤則為無監督學習。
首先看什麼是學習(learning)?
一個成語就可概括:舉一反三。此處以高考為例,高考的題目在上考場前我們未必做過,但在高中三年我們做過很多很多題目,懂解題方法,因此考場上面對陌生問題也可以算出答案。
機器學習的思路也類似:我們能不能利用一些訓練資料(已經做過的題),使機器能夠利用它們(解題方法)分析未知資料(高考的題目)?
最簡單也最普遍的一類機器學習演算法就是分類(classification)。對於分類,輸入的訓練資料有特徵(feature),有標籤(label)。所謂的學習,其本質就是找到特徵和標籤間的關係(mapping)。
這樣當有特徵而無標籤的未知資料輸入時,我們就可以通過已有的關係得到未知資料標籤。在上述的分類過程中,如果所有訓練資料都有標籤,則為有監督學習(supervised learning)。
如果資料沒有標籤,顯然就是無監督學習(unsupervised learning)了,也即聚類(clustering)。
目前分類演算法的效果還是不錯的,但相對來講,聚類演算法就有些慘不忍睹了。確實,無監督學習本身的特點使其難以得到如分類一樣近乎完美的結果。
這也正如我們在高中做題,答案(標籤)是非常重要的,假設兩個完全相同的人進入高中,一個正常學習,另一人做的所有題目都沒有答案,那麼想必第一個人高考會發揮更好,第二個人會發瘋。
這時各位可能要問,既然分類如此之好,聚類如此之不靠譜,那為何我們還可以容忍聚類的存在?
因為在實際應用中,標籤的獲取常常需要極大的人工工作量,有時甚至非常困難。
例如在自然語言處理(NLP)中,Penn Chinese Treebank在2年裡只完成了4000句話的標籤……
這時有人可能會想,難道有監督學習和無監督學習就是非黑即白的關係嗎?有沒有灰呢?Good idea。
灰是存在的。二者的中間帶就是半監督學習(semi-supervised learning)。對於半監督學習,其訓練資料的一部分是有標籤的,另一部分沒有標籤,而沒標籤資料的數量常常極大於有標籤資料數量(這也是符合現實情況的)。
隱藏在半監督學習下的基本規律在於:資料的分佈必然不是完全隨機的,通過一些有標籤資料的區域性特徵,以及更多沒標籤資料的整體分佈,就可以得到可以接受甚至是非常好的分類結果。
(此處大量忽略細節)因此,learning家族的整體構造是這樣的:
- 有監督學習(分類,迴歸)
- 半監督學習(分類,迴歸),transductive learning(分類,迴歸)
- 半監督聚類(有標籤資料的標籤不是確定的,類似於:肯定不是xxx,很可能是yyy)
- 無監督學習(聚類)
特徵和標籤
提取特徵
看下面一張圖:
已知A集合中的所有元素和B集合中的所有元素,你認為上圖最終元素應該屬於A集合還是B集合?
答案是B集合。也許圖中的例項數量不足以你進行準確判斷(當然這個例子太容易判斷啦),如果每個集合擴充套件到100個元素呢?
很顯然,集合中元素的數量越多,我們能夠發現出更多的特徵,進而做出更準確的判斷。
我們之所以能一眼將元素進行判定其屬於B集合,是因為我們可以最快識別出元素的特徵:角。
當我們大腦對元素的特徵進行分析和判斷後,大腦最終會一定會反饋出其中一個結果:
- 屬於A集合
- 屬於B集合
- 屬於C集合(如果有的話...)
- ...
最終我們發現B集合的條件滿足元素的特徵,於是最終確認元素屬於B集合。
在機器學習中,我們通常會把特徵作為輸入,然後嘗試生成標籤,最終進行分類。
散點圖
在上文中,我們將圖形的角數作為特徵,然而在實際的問題中,我們可能需要提取完全不一樣的特徵。
如:如果我們需要實現一個音樂的智慧推薦演算法,我們首先需要根據使用者已經喜歡的音樂中提取特徵,這些特徵可能是音樂對應的流派、聲音性別、節奏強度、平均分貝值...
分析出特徵後我們先嚐試將特徵資料視覺化,接下來,我們使用一個散點圖來表示上面音樂推薦的例子:
現在,假設Surmon?喜歡一首音樂叫《天馬座的幻想》,我們現在提取出這首音樂的一些特徵,包括:強度、歌曲節奏、聲音性別、歌曲流派...,
為了簡化問題,我們圖中在僅使用強度和節奏特徵,如圖:
《天馬座的幻想》這首音樂,節奏快,強度較高,我們在圖中用a點表示;
同樣的,我們可以提取其他音樂的這些特徵,因此,每首音樂都變成了圖中的一個資料點,圖中的b、c、d...分別代表其他歌曲;
假設a、b兩首音樂為Surmon喜歡的音樂(紅色背景標註的),且Surmon不喜歡其他之外的音樂,你認為Surmon會喜歡推薦的音樂n嗎?
答案是會喜歡,雖然無法完全確定,起碼從圖上來判斷是的。
又有假設了:
假設Surmon失戀了,又開始喜歡一些節奏比較溫柔的輕音樂,於是現在Surmon現在喜歡的音樂資料是這樣的,整體看來比較分散:
你認為Surmon會喜歡推薦的音樂n嗎?
答案是不確定。
但實際上,應該存在一個模式,計算出Surmon喜歡的音樂的資料集,如下,推薦的音樂n可能被包含在Surmon喜歡的音樂的資料集中:
也有可能這首音樂不被包含在Surmon喜歡的音樂的資料集中:
通過觀察Surmon喜歡的音樂的資料集,我們便能得出相對準確的結果,即Surmon是否會喜歡這首音樂。
再來一個比較現實的例子:
假設我們在研究汽車的無人駕駛技術,我們需要機器判斷出汽車當前面臨的環境並作出對應的操作;
假設我們將汽車行駛的環境特徵分為:路面平整度(1-3)、行駛坡度(3-6)兩個維度,如下圖;我們在散點圖中以軸線呈現出來,同時將軸線簡單分別分為三個維度,對應我們的特徵,最終我們會得到9個點:
當前,事實上,這兩個特徵是可能同時發生的,故這9個點代表汽車可能遇到的崎嶇程度和坡度所組成的所有特徵組合,我們暫且稱之為分類。
上圖中,汽車在輕微上坡但路面較為平坦時(5號路況),對應h類。
決策面
機器學習就是將資料根據特徵和標籤轉換為決策面(分類)。
如下圖例:
上圖中所有資料用圓形標識,我們使用特徵將資料分成了兩類:紅色和綠色,通過直覺判斷,資料點a應該被歸類於紅色資料集,而資料點b顯然無法判斷。
機器學習能做什麼,它可以為以上圖例中的資料集決定決策面(分割資料集/分類)。
像這樣,它可以計算出一個決策面,決策面左側即資料綠色資料,右側反之。
使用決策面,標記資料分類就簡單多了。
決策面分為:
- 線層決策面:決策面為一條直線
- 非線性局側面:決策面不是一條直線(一條直線無法決策的)
使用演算法
常見的計算決策面的演算法有:
- 樸素貝葉斯
- 支援向量機
- ...
其之間的不同和詳細使用會在之後的文章推出。
基礎庫:scikit-learn官網,scikit-learn是一個python學習演算法庫,包含了豐富的機器學習演算法。
完
這時有人可能會想,難道有監督學習和無監督學習就是非黑即白的關係嗎?有沒有灰呢?Good idea。
灰是存在的。二者的中間帶就是半監督學習(semi-supervised learning)。對於半監督學習,其訓練資料的一部分是有標籤的,另一部分沒有標籤,而沒標籤資料的數量常常極大於有標籤資料數量(這也是符合現實情況的)。
隱藏在半監督學習下的基本規律在於:資料的分佈必然不是完全隨機的,通過一些有標籤資料的區域性特徵,以及更多沒標籤資料的整體分佈,就可以得到可以接受甚至是非常好的分類結果。
(此處大量忽略細節)因此,learning家族的整體構造是這樣的:
- 有監督學習(分類,迴歸)
- 半監督學習(分類,迴歸),transductive learning(分類,迴歸)
- 半監督聚類(有標籤資料的標籤不是確定的,類似於:肯定不是xxx,很可能是yyy)
- 無監督學習(聚類)
特徵和標籤
提取特徵
看下面一張圖:
已知A集合中的所有元素和B集合中的所有元素,你認為上圖最終元素應該屬於A集合還是B集合?
答案是B集合。也許圖中的例項數量不足以你進行準確判斷(當然這個例子太容易判斷啦),如果每個集合擴充套件到100個元素呢?
很顯然,集合中元素的數量越多,我們能夠發現出更多的特徵,進而做出更準確的判斷。
我們之所以能一眼將元素進行判定其屬於B集合,是因為我們可以最快識別出元素的特徵:角。
當我們大腦對元素的特徵進行分析和判斷後,大腦最終會一定會反饋出其中一個結果:
- 屬於A集合
- 屬於B集合
- 屬於C集合(如果有的話...)
- ...
最終我們發現B集合的條件滿足元素的特徵,於是最終確認元素屬於B集合。
在機器學習中,我們通常會把特徵作為輸入,然後嘗試生成標籤,最終進行分類。
散點圖
在上文中,我們將圖形的角數作為特徵,然而在實際的問題中,我們可能需要提取完全不一樣的特徵。
如:如果我們需要實現一個音樂的智慧推薦演算法,我們首先需要根據使用者已經喜歡的音樂中提取特徵,這些特徵可能是音樂對應的流派、聲音性別、節奏強度、平均分貝值...
分析出特徵後我們先嚐試將特徵資料視覺化,接下來,我們使用一個散點圖來表示上面音樂推薦的例子:
現在,假設Surmon?喜歡一首音樂叫《天馬座的幻想》,我們現在提取出這首音樂的一些特徵,包括:強度、歌曲節奏、聲音性別、歌曲流派...,
為了簡化問題,我們圖中在僅使用強度和節奏特徵,如圖:
《天馬座的幻想》這首音樂,節奏快,強度較高,我們在圖中用a點表示;
同樣的,我們可以提取其他音樂的這些特徵,因此,每首音樂都變成了圖中的一個資料點,圖中的b、c、d...分別代表其他歌曲;
假設a、b兩首音樂為Surmon喜歡的音樂(紅色背景標註的),且Surmon不喜歡其他之外的音樂,你認為Surmon會喜歡推薦的音樂n嗎?
答案是會喜歡,雖然無法完全確定,起碼從圖上來判斷是的。
又有假設了:
假設Surmon失戀了,又開始喜歡一些節奏比較溫柔的輕音樂,於是現在Surmon現在喜歡的音樂資料是這樣的,整體看來比較分散:
你認為Surmon會喜歡推薦的音樂n嗎?
答案是不確定。
但實際上,應該存在一個模式,計算出Surmon喜歡的音樂的資料集,如下,推薦的音樂n可能被包含在Surmon喜歡的音樂的資料集中:
也有可能這首音樂不被包含在Surmon喜歡的音樂的資料集中:
通過觀察Surmon喜歡的音樂的資料集,我們便能得出相對準確的結果,即Surmon是否會喜歡這首音樂。
再來一個比較現實的例子:
假設我們在研究汽車的無人駕駛技術,我們需要機器判斷出汽車當前面臨的環境並作出對應的操作;
假設我們將汽車行駛的環境特徵分為:路面平整度(1-3)、行駛坡度(3-6)兩個維度,如下圖;我們在散點圖中以軸線呈現出來,同時將軸線簡單分別分為三個維度,對應我們的特徵,最終我們會得到9個點:
當前,事實上,這兩個特徵是可能同時發生的,故這9個點代表汽車可能遇到的崎嶇程度和坡度所組成的所有特徵組合,我們暫且稱之為分類。
上圖中,汽車在輕微上坡但路面較為平坦時(5號路況),對應h類。
決策面
機器學習就是將資料根據特徵和標籤轉換為決策面(分類)。
如下圖例:
上圖中所有資料用圓形標識,我們使用特徵將資料分成了兩類:紅色和綠色,通過直覺判斷,資料點a應該被歸類於紅色資料集,而資料點b顯然無法判斷。
機器學習能做什麼,它可以為以上圖例中的資料集決定決策面(分割資料集/分類)。
像這樣,它可以計算出一個決策面,決策面左側即資料綠色資料,右側反之。
使用決策面,標記資料分類就簡單多了。
決策面分為:
- 線層決策面:決策面為一條直線
- 非線性局側面:決策面不是一條直線(一條直線無法決策的)
使用演算法
常見的計算決策面的演算法有:
- 樸素貝葉斯
- 支援向量機
- ...
其之間的不同和詳細使用會在之後的文章推出。
基礎庫:scikit-learn官網,scikit-learn是一個python學習演算法庫,包含了豐富的機器學習演算法。
完