機器學習之監督和無監督學習
這篇文章對吳恩達博士機器學習公開課中關於監督和無監督學習做了整理,以供學習。
一、監督學習(Supervised Learning)
首先課程中講解了一個關於房屋價格預測的例子。
例1)預測房屋價格
根據實際的房屋價格和麵積,我們已知了一定規模的資料集,如下圖中紅叉標註的,我們將其繪製到座標平面。水平軸上,不同房屋的尺寸是平方英尺,豎直軸上,是不同房子的價格,單位時(千萬$)。假設某人有一個面積為750平方英尺的房子,他要賣掉這棟房子,預計能賣多少錢?
那麼機器學習演算法能做的事是什麼呢?我們可以根據已知標註的資料,用一條直線擬合數據。然後找到750英尺的橫座標,相應找到縱座標,大概可能會賣150K美元。
當然,這不一定是唯一的學習演算法,我們也可以使用一個二次函式或二階多項式來擬合數據,這樣效果可能會更好。在這種情況下,該房子可能會賣到200K美元。
再深入的學習可能就是如何選擇演算法,是用直線還是二次函式進行擬合。
以上是監督學習的一個很好的例子,監督學習是指我們給定一個已知的資料集,包含正確答案。對應到上述例子,也就是給定房屋資料集,在這個資料集中的每個房屋面積,我們都給出正確的價格,也即這個房子賣出的實際價格。演算法的目的就是給定待售房屋的面積,儘可能給出相對正確的售價。這也被稱為迴歸問題(Regression : Predict continuous value output——price)。之所以稱為迴歸問題,是因為其預測連續的輸出值,即價格。
例2)預估腫瘤性質
第二個例子,是預測乳腺癌是惡性的還是良性的。假設某人發現了一個乳腺瘤,即乳腺上的腫塊,其中惡性瘤是危險的、有害的,良性瘤是無害的。
假設在資料集中,水平軸是瘤的尺寸,豎直軸是1或0,也可以是Y或N,表示是否是良性或者惡性。在已知腫瘤樣例中,惡性的標為1,良性的標為0。根據已有的醫療記錄,我們將相應尺寸的瘤和對應的是否良性、惡性標註在座標軸上。其中藍色的樣例是良性的,紅色的是惡性的。
假定某人得了乳腺癌,相應尺寸如圖中紫紅色箭頭指示的位置,那麼機器學習的任務就是預估該腫瘤是惡性的還是良性的概率。
這個例子就是屬於分類問題(calssification problem)。
分類是指我們設法預測一個離散值輸出,0或1,對應上述的惡性或良性。
實際上在分類問題中,可以有兩個以上的輸出值。在實際例子中,可能有三中型別的乳腺癌。因此,可能要預測離散值0,1,2,或3。其中0是良性的,即沒有癌症,1、2、3分別表示第一種、第二種、第三種癌症。
在分類問題中,可以用另一種方法來繪製這些資料,用一組不同的符號來繪製這組資料。如果腫瘤的大小是用來預測惡性或良性的特徵,可以用不同的符號表示良性或惡性,或者說陰性或陽性樣本。
我們可以用圈來表示良性,繼續用叉表示惡性腫瘤,只是把上面的資料集對應下來,對映到下面實線上,並且使用不同的符號,如下圖。
在這個例子中,我們僅使用了一個特徵或者說屬性,即腫瘤的大小,來預測腫瘤是惡性的還是良性的。在其他的機器學習中,可能會有多個特徵或者屬性。
再看一個例子,假設我們不僅知道腫瘤的大小,還知道病人的年紀,我們還是用圈表示良性,叉表示惡性,根據已有資料繪製如下的資料集。
假設某人得了腫瘤,根據年齡和腫瘤大小,位於紫色的位置。因此在給定的資料集上,機器學習演算法能做的就是在資料上畫出一條直線,設法將惡性瘤和良性瘤分開,用這樣的直線來分離兩類瘤,我們就可以通過這個判斷腫瘤型別,如下圖。
二、無監督學習(Unsupervised Learning)
在監督學習當中,每個樣本都被標為陽性樣本或陰性樣本,即良性或惡性。對於監督學習的樣本,我們已經知道了所謂的“正確答案”,即他們是良性還是惡性。
而在無監督學習中,我們所用的資料和之前不同,如下圖,沒有任何標籤,都具有相同的標籤或者都沒有標籤。我們有一個數據集,但不知道能用它來做什麼,也不知道每個資料點究竟是什麼。無監督學習的任務是從給定的資料集中,把資料分成兩個不同的簇。
對於上圖中的資料,無監督學習演算法可能將其分為兩類,這就是聚類演算法(Clustering Algorithm)。其中一個應用聚類演算法的例子就是谷歌新聞,谷歌新聞所做的就是每天去網路上收集到成千上萬的新聞,然後將它們組合成一個個新聞專題,相同主題的新聞被放到一起。
無監督學習也可以應用在基因組學中,以下是一個DNA微陣列資料的例子,基本的思想是給定一組不同的個體,對於每個個體,檢查他們是否擁有某個特定的基因,也就是特定基因的表達程度。執行一個聚類演算法,將不同的個體歸入不同的類。這些紅、綠、灰等顏色展示了不同的個體,擁有特定基因的程度。
我們有一堆資料,不知道這些資料有什麼型別,也沒有把資料集的正確答案給演算法,希望演算法能自動找出可能的型別,並自動將其分類。
以下還有其他應用場景:
左上角用於管理計算機叢集,在一個計算機管理中心,找出哪些計算機在進行著協同工作,就可以讓資料中心更高效的工作。
右上角用於社交網路的分析,如果可以得知你email最頻繁的聯絡人,或者知道你的Facebook好友或者Google+圈,我們是否可以自動識別同屬一個圈子的朋友,判斷哪些人互相認識?就能知道哪些好友是一個好友組,哪些僅僅是互相認識的好友。
左下角用於市場細分,許多公司擁有龐大的客戶資訊資料庫,對於一個客戶資料集,能否自動找出不同的市場分割,並自動將客戶分到不同的細分市場中,從而能夠自動高效地在不同的細分市場中進行銷售?
右下角用於天文資料分析,這些聚類演算法帶來了星系形成理論。
聚類演算法是無監督學習的一種,當然還有其他的演算法,比如吳恩達博士介紹的雞尾酒會問題,感興趣的可以在公開課中看到。