1. 程式人生 > >2 監督學習與非監督學習

2 監督學習與非監督學習

2 機器學習演算法

2.1 監督學習

    首先給出一個例子來解釋什麼是監督學習,後面將給出更加正式的定義。假設你想預測房價(無比需要啊。。。。),某個學生從某地收集了資料集,其中一個數據集是這樣的。橫座標是房子的面積(平方英尺為單位),縱座標是房子的價格(單位千美元)。

假設你的朋友有個750平方米的房子,想要知道能夠賣多少錢。學習演算法怎麼可以幫助你呢?一種方法是學習演算法可以繪製一條直線,使這條直線儘可能的匹配到所有資料,從下圖可以看出,可能能夠買到15萬刀(一平米兩千刀,看來人家的房價也不低啊。。。。)。

    直線可能並不是最好的方法,可能會有更好的,在房價預測的例子中,可能一個二元函式能夠更好的匹配所有資料,即二次多項式更加符合資料集,如果你這樣做,預測結果就應該是20萬刀(我去,還讓人活嗎???)。後面會介紹怎麼決定是選擇線性函式還是二次函式來擬合數據。

    監督學習意指給一個演算法一個數據集,在這個資料集中正確的答案已經存在了(supervised learning refers to the fact that we gave the algorithm a data set in which the "right answers" were given.)。比如給定房價資料集,對於裡面的每一個例子,演算法都知道正確的房價,即這個房子實際賣出的價格,演算法的結果就是計算出更多的正確的價格,比如你朋友想要賣出的那個房子的價格。

    監督學習又叫做迴歸問題(應該是迴歸問題是監督學習問題的一種),意指要輸出一個連續的值,例如房價,雖然一般將房價記到美分單位,所以實際上還是一個離散值,但是通常將它看作為實際數字,是一個連續值的數。

迴歸問題是對於連續性資料,從已有的資料分析中,來預測結果。

監督學習與迴歸問題

另一個監督學習的例子,根據醫學記錄來預測胸部腫瘤的惡性良性。現在有一個數據集,可以表示為下圖所示,橫軸表示腫瘤的大小,縱軸表示腫瘤的惡性(1)、良性(0)。現在有5個良性腫瘤與5個惡性腫瘤,不幸的是有個朋友得了腫瘤,但是不知道腫瘤是惡性還是良性,機器學習的問題是,你能否算出一個概率,即腫瘤為惡性或者良性的概率?。專業的說,這是一個分類的問題,分類問題是要預測一個離散的輸出,這裡是0或1,惡性或者良性。事實證明,在分類問題中會有超過兩個的值,輸出的值可能會超過兩個,舉個例子。胸部腫瘤可能有三種類型,所以要預測的離散值是0,1,2,3。0代表良性,1代表1號癌症,2代表2號癌症,以此類推。

監督學習與分類問題

    在分類問題中,還有另一種作圖方式來描述資料集,需要用到不同的符號集合來描述資料。如果腫瘤大小被作為唯一的屬性來預測腫瘤的惡性良性,可以將圖畫成這樣,使用不同的符號來表示惡性與良性,不再統一畫叉叉,使用圈圈代表良性腫瘤,仍然使用叉叉代表惡性腫瘤,我所做的就是將上面的資料對映下來,再用不同的符號表示。

在這個例子中,只使用了一個屬性來預測腫瘤的惡性與良性,在其他機器學習問題裡,有著不只一個的特徵和屬性,例如現在病人的年齡和腫瘤大小都知道了,這種情況下,資料集表示如下圖所示,病人的年齡和腫瘤大小已知,不同的病人會不一樣,良性腫瘤使用圓圈表示,惡性腫瘤使用叉叉表示,假設有一個朋友得了腫瘤,腫瘤的大小以及朋友的年齡已知(在圖中對應的點如圖所示),那麼依據這個資料集,學習演算法畫出一條直線,分開惡性腫瘤和良性腫瘤,這樣就能判斷你的朋友是惡性腫瘤還是良性腫瘤了。在這個例子中,總共有兩個特徵,腫瘤的大小以及患者的年齡。在別的機器學習問題中,經常會用到更多的特徵,通常會用到這些特徵,比如塊的厚度,即胸部腫瘤的厚度,腫瘤細胞大小和形狀的一致性等,這表明機器學習演算法(我們講學習到的),能夠處理很多的特徵,無論是3個,5個,還是更多,這裡我們列舉出了5個特徵,但對於其他的ML(Machine Learning)問題,真正要用到的特徵不只5個,要用到許多的特徵以及屬性,所以,你的學習演算法要用到許多的屬性、特徵來進行預測,所以你如何處理無限多的特徵呢???甚至你又如何儲存無限多的東西到電腦裡,又要避免記憶體溢位呢???事實上,當我們介紹支援向量機(SVM)演算法時,就知道存在一個簡單的數學方法來讓電腦處理無限多的特徵。

多個特徵

    總結,在這一節我們介紹了監督學習,監督學習可以被分為迴歸問題與分類問題。監督學習的基本思想是,對於資料集中的每個資料,都有相應的正確的答案,演算法就是基於這些來進行預測,我們知道了輸出應該是什麼樣子的。例如那個房價的問題和腫瘤的問題。我們也介紹了迴歸問題,即通過迴歸來預測一個連續值輸出。我們還談到了分類問題,它的目標是預測離散值輸出。

下面是個小測驗題目:假設你有一個公司,希望通過機器學習演算法來解決兩個問題,第一個問題是你有一堆貨物清單,假設他們有幾千件可賣,你想預測出你在未來三個月能夠賣出多少貨物?第二個問題是你有許多使用者,你想寫程式來檢查每個使用者的賬戶,判斷這個賬戶是否被黑過?請判斷這兩個問題哪個是迴歸問題,哪個是分類問題?

答案:第一個問題是迴歸問題,因為輸出值是連續值,第二個問題是分類問題,因為輸出值是離散值。

    這就是監督學習,在下一節,我們將介紹非監督學習。

2.2 無監督學習

    在上一節中,我們已經講解了監督學習,這一節我們將講解非監督學習,回想上一節,資料集的資料被標記為正樣本和負樣本,即良性腫瘤和惡性腫瘤,所以對於監督學習中的我們已經被告知了什麼是正確的答案,及腫瘤是惡性還是良性的。在無監督學習中,我們用到的資料會和監督學習裡面的看起來有些不一樣,在無監督學習中,沒有屬性或標籤這一概念,也就是說所有的資料都是一樣的,沒有區別。在非監督學習中,我們被給與了一個數據集,但是沒有人教我們怎麼做,我們也不知道每個資料點表示什麼,相反,他只告訴我們這裡有一個數據集,你能夠找到其中的某種結構嗎???對於給定的資料集,非監督學習演算法可能判定這個資料集有兩個不同的聚類,你猜對了,非監督學習演算法,會將資料集分成兩個不同的聚類,如下圖所示,這就是所謂的聚類演算法,它被用在許多的地方。

非監督學習

舉一個聚類的例子,google新聞的例子,谷歌新聞每天都在幹些什麼呢???他們每天會去收集網路上成千上萬的新聞,然後將他們分組,組成一個個新聞專題,比如將所有油井事故相關的新聞放在一起。實際上聚類演算法和無監督演算法可以被用到許多其他的問題。這裡在列舉一個例子,關於基因的例子。

基本的思想是給定一組不同的個體以及各個個體所擁有的所有基因,機器學習演算法能夠做的是根據是否擁有某個特定的基因,將個體歸類到各個不同的類別中,即將各個個體歸為不同型別的人。紅綠藍展示了一個個體擁有某個基因的程度,你所能做的就是執行一個聚類演算法,將不同的個體歸入不同的類,這就是非監督學習。我們沒有提前告知這個演算法,這些是第一類人,這些是第二類人等等,相反,我們只是告訴演算法,這裡有一堆資料,但是不知道是什麼東東,不知道里面有什麼型別,然後你能找到其中的型別嗎???然後根據得到的型別將個體分類,雖然我事先不知道有哪些型別。因為,對於這些演算法,我們沒有給定一個正確的答案,所以這就是無監督學習。

    無監督學習還有其他許多的例子,如下圖所示。

  1. 管理叢集,找出哪些機器傾向於協同合作,將這些機器放在一起,可以大大提高叢集工作的效率。
  2. 用於社交網路的分析,知道哪些朋友用email聯絡的多,你的facebook的朋友等,知道了這些之後,我們可以自動分析出哪些是十分要好的朋友組,哪些是互相認識的朋友組。
  3. 許多公司擁有大量的客戶資訊資料庫,給你一個客戶資料集,你能否自動找出不同的市場分割,將客戶細分到不同的細分市場中,從而有助於在不同的細分市場中進行更加有效的營銷,我們有這些客戶資料,但是我們不知道有哪些細分市場,而且對於資料集的某個客戶,我們預先也不知道他們屬於哪個細分市場,我們必須讓演算法自己去資料中發現這一切。
  4. 無監督學習也被用於天文資料分析。

所有這些都是聚類演算法的例子。聚類演算法只是無監督學習的一種。

現在我們來介紹另一種無監督學習演算法:

先來談談雞尾酒會的問題。有一個宴會,有一屋子的人,大家都坐在一起,大家都在同時說話,許多的聲音混合在一起,因為所有人都是在同時說話的,在這種情況下,你很難聽清楚你面前的人說的話,因此,比如有這樣一個場景,宴會上只有兩個人,同時說話,我們準備好了麥克風,把它們放在房間裡面,因為這兩個話筒離這兩個人的距離是不同的,每個麥克風都記錄下了來自兩個人的不同聲音的組合,也許是A的聲音在第一個麥克風裡會響一點,也許B在第二個麥克風裡會響一點,有一個機器學習演算法可以將混合在一起的聲音分離開來。

你可能會想,實現這個演算法需要寫很多的程式碼吧?實際上只需要語句程式碼就夠了。

[W,s,v] = svd((repmat(sum(x.*x,1),size(x,1),1).*x)*x')

我們使用Octave的程式設計環境,可以使我們更加快速的學習機器學習這麼技術,不需要寫很多的程式碼,許多的演算法已經被封裝到庫中了。例如svd。

小練習。我們談到了無監督學習,它是一種學習機制,我們給演算法大量的資料,希望演算法自動找出資料中的蘊含的型別結構,下面的四個演算法中你認為哪個是無監督學習例子。

答案:第二個和第三個。