前言:本課程是在慕課網上學習 Python3入門機器學習 經典算法與應用 課程時所做的筆記,供本人複習之用.學習這個的主要目的是爲了應付這學期的機器學習選修課.所以只會大概講解算法的意思,不會深入的進行實踐或講解原理.另外因爲主要是供本人複習以及不打算仔細學,所以不保證寫的一定對,只提供一個基本的理解.
目錄
1.5.3 參數學習(parametric Learning)
1.5.4 非參數學習(Nonparametric Learning)
第一章 機器學習基礎
1.1關於數據
我們使用著名的鳶尾花數據來說明,在這裏有三個不同種類的鳶尾花.
總共有150個鳶尾花的數據信息,每個數據信息包括四個方面的信息.分別是萼片的長度與寬度,花瓣的長度與寬度.
整個數據就可以表示成這個樣子.種類中我們標識了幾個數,因爲在計算機中我們希望將它們數字化.
我們根據三行的數據集來闡述一下在機器學習領域和數據相關的基本概念.
- 我們完成一個機器學習的任務,手裏肯定是有數據的,通常我們管這些數據的整體叫做數據集.
- 對於一個數據集,通常我們可以寫成一個表格的形式,在表格中每一行數據稱爲一個樣本.具體到鳶尾花的數據中,每一行數據其實就是一朵花的信息.包含這一朵花的萼片的長度寬度.那麼這一朵花就是一個樣本.
- 除了最後一列,每一列都表達了樣本的一個特徵.可以簡單的把一個特徵理解成一個屬性.比如說萼片的長度是一個特徵,萼片的寬度是另外一個特徵.
- 對這個數據來說,除了最後一列,其餘的部分都是在描述數據整體的特徵,通常在機器學習任務中,我們管這一部分用X來表示,之所是X是因爲通常這部分是一個矩陣,這個矩陣有多少行就說明有多少樣本,有多少列就說明有多少個特徵,通過我們把第i個樣本寫作
,第i個樣本第j個特徵值
- 最後一列是特殊的一列,它是我們機器學習真正想去學的內容,稱爲標記.在表示上,我們通常用y來表示.第i個樣本的標記寫作
- 對於數據的每一行本身也組成了一個向量,通常我們管這個向量叫做特徵向量
,在數學中我們通常會把向量表示爲列向量如圖1,正因如此我們的矩陣可以寫成圖2所示
圖1 圖2
我們抽出數據的前兩個特徵,即萼片的長度與寬度,用萼片的長度作爲橫軸,萼片的寬度作爲縱軸,可以想象,對於每一個樣本來說,都會在橫縱軸組成的座標系中表示成一個點.當然這是爲了我們可視化方便,所以我們選了兩個軸在一個平面上來表示它.如果我們有3個維度就可以在三維空間中表示它,如果有四個維度就可以在四維空間中表示它,甚至有1000維度的話我們就可以在1000維空間中表示它,每一個樣本的本質就是在這個空間中的一個點,這個空間我們稱之爲特徵空間(feature space).
我們在下圖中可以看出兩類鳶尾花的特徵分佈是有極大的不同的,分類任務的本質就是在特徵空間切分,不論低維還是高維空間.
這裏花瓣的長度寬度都是有明確的語義的,即我們知道每一個數字代表什麼意思,但是在機器學習領域中,特徵可以是非常抽象的一個東西.舉個例子對於圖像識別來說,每一個像素點都是一個特徵,對於28*28的圖像有784個特徵,換句話說,我們爲了描述這個圖像,我們可以使用784個數,每個數都代表着從左上角到右下角每一個像素點把它排開這個點對應的灰度值的深淺.然後利用這些特徵來進行數字的識別.
如果是彩色圖像特徵更多.特徵工程研究之一就是怎麼餵給機器比較好的特徵.
1.2 機器學習的主要任務
1.2.1 分類任務
比如判斷一張圖片是貓是狗,判斷一個數字是0到9中的哪一個,分類任務就是將給定的任務進行分類.分類任務包括以下幾種
二分類任務:
是貓是狗?是否是垃圾郵件?發給客戶信用卡有沒有風險?良性腫瘤惡性腫瘤?股票漲跌?
多分類任務:
數字識別,圖像識別(貓狗鳥鱷魚),信用卡風險評級(高中低)
很多複雜的問題也可以轉化成多分類問題,比如玩2048時,是往上下左右哪個方向移動?下圍棋的時候因爲棋盤的大小是有限的,所以機器就是根據現在的棋盤信息選一個方向進行落子,甚至現在大紅大紫的無人車,我們可以將它轉換成方向盤向左向右打多少度,油門分成幾個程度,具體踩多深等等.
當然這些問題是可以轉換成多分類問題,但不一定使用多分類來解決這些問題是最好的.
後續的學習過程中,我們會瞭解到:
多標籤分類:
之前的圖片是放在一個類別中進行分類,比較高級的機器學習系統能放在多個類別中進行比較.這是比較前沿的話題.
1.2.2 迴歸任務
我們之前的標籤列都是一個類別,但是在這個數據中,我們最終是一個價格.價格不是一個類別是一個連續的數字,這一類任務就是機器學習可以處理的另外一類任務了,叫做迴歸任務.
比如房屋價格,市場分析,學生成績,股票價格.
一些情況下,迴歸任務可以簡化成分類任務,比如剛纔提到的無人駕駛.方向盤打的角度是一個連續的數值,只不過我們將每一度看作一個類別.我們就將回歸任務簡化成了分類任務.
1.3 什麼是機器學習
大量的學習資料就是數據集,我們將數據集餵給我們的機器學習算法,我們的機器學習算法將根據我們的數據集訓練一個模型,當有了新的樣本資料以後,是通過這個模型來得到輸出結果的.這個輸出結果有兩類,一個是樣本的類別,另外一類是具體的數值.
我們的模型其實就是一個函數,這裏我們的函數需要的每一個小的x就是一個樣本資料.我們機器學習算法本質是獲得一個新的f(x).這樣當我們有新的樣本資料x時,只要把它送給我們訓練好的f(x),這個f(x)就會根據它的函數規則得到一個結果.如果結果時0,1,2,3,4這樣的類別的話,我們解決的就是一個分類問題,如果f(x)得到的是一個具體的數值的話,我們解決的就是一個迴歸問題.
上面我們說了分類和迴歸問題,其實是監督學習主要解決的是分類和迴歸問題,機器學習還可以解決很多其它的問題.
1.4 監督學習,非監督學習,半監督學習和增強學習
我們之前是根據能機器學習能解決的問題進行了分類,現在我們將根據機器學習的算法進行分類.
1.4.1 監督學習
給機器的訓練數據擁有標記或者答案.
監督學習算法:
k臨近,線性迴歸和多項式迴歸,邏輯迴歸,SVM,決策樹和隨機森林.
1.4.2 非監督學習
很多時候非監督學習是輔助監督學習的運行.
給機器的的訓練數據是沒有任何"標記"或者答案.
非監督學習可以完成分類任務.
比如電商網站上的人羣分類,某些人是理智型消費者,有些人是衝動型,有些人更在乎性價比等等...
非監督學習可以對數據進行降維處理和異常檢測.
降維處理包含兩部分內容,特徵提取和特徵壓縮.
特徵提取:當我面對一個數據時,這個數據有很多特徵,有時候根據經驗或深入分析,認爲某一些特徵對我們預測或者計算的結果是沒有貢獻的,比如銀行需要用收集的個人信息對個人信用進行評級,而個人的胖瘦與信用評級是沒有關係的,這叫做特徵提取.
特徵壓縮:PCA,我們並不扔掉任何特徵,下圖是一個二維的特徵平面,這個二維的特徵平面上分佈很多的數據點,但這些點是呈直線的形式,如果我們畫一根直線的話,把所有的點都映射在傾斜的直線上,那麼這些點的直線信息並沒有丟失多少,但是經過這樣的處理後,二維的點就變成了一維的點.
之前我們說28*28的圖片要784個特徵,經過特徵壓縮後,只需要十幾個特徵就行了.
降維處理的意義:方便可視化.對於人類來說是無法理解四維以上的信息的,有的時候我們可以把很高維的數據降到三維甚至二維,降到這麼低的維度可能已經丟失了很多信息,我們降到這麼低的維度主要是爲了對信息進行可視化.
異常檢測:有時候在我們的數據中存在一些點,這些點是存在異常的,這種點對於讓我們的算法發現一般性規律是沒有幫助的,對於二維的我們可以肉眼看到,對於高維的我們就需要用非監督學習算法剔除這些點.
1.4.3 半監督學習
一部分數據有"標記"或者"答案",另一部分數據沒有.因爲在實際生活種會因各種原因產生數據的缺失.
通常是使用無監督學習手段對數據做處理,之後使用監督學習手段做模型的訓練和預測.
1.4.4 增強學習
我們機器學習的算法通常叫做agent,我們機器學習的算法要根據周圍的環境來採取行動,在採取去了行動之後,我們的算法就會收到一些反饋,這個返回有時候是使用reward,有時候是使用state機制來進行反饋,agent算法得到了反饋之後就會改進自己的行爲模式,之後在面對環境的其它的情況下,根據改進的算法再做出相應的action.然後環境再反饋給我們的agent.依此類推,可以看出我們的agent在一輪一輪的行動反饋中逐漸增強自己的智能.所以稱之爲增強學習.
前沿領域的無人駕駛與機器人都需要增強學習.
監督學習與半監督學習是基礎.
1.5 批量學習,在線學習,參數學習,非參數學習
1.5.1 批量學習(Batch Learning)
批量學習就是收集一定量的樣本資料,送給我們的機器學習算法,我們的機器學習算法就可以訓練出一個模型,當我們訓練出這個模型後就可以直接投入到生產環境中了.在具體應用的時候可能又有新的樣例送進來,通過我們的模型來預測出相應的結果.這個過程中我們的模型不會再發生變化了.
優點:簡單
問題:
如何適應環境變化?如垃圾郵件,每年都會有新的種類的垃圾郵件
解決方案:定時重新批量學習,運算量巨大.
缺點:每次重新批量學習,運算量巨大.在某些環境變化非常快的情況下,甚至是不可能的.如股市.
1.5.2 在線學習(Online Learing)
在線學習就是每次我們輸入樣例到模型得到輸出結果之後,我們的輸入樣例並不浪費掉,有時我們會很快拿到輸入樣例的正確結果,如對股市進行預測,我們很快就能拿到樣例的真實結果,我們拿真實結果和預測結果進行比較,這些信息仍然是機器學習算法需要的學習資料.我們可以將這些信息迭代進機器學習算法.改進我們的模型,以此類推,這個過程不斷地循環,相當於在線的過程不僅是應用模型得到我們想要的結果,與此同時我們還再不斷訓練我們的模型,進行學習.
優點:及時反映新的環境的變化
問題:
有些不正常的新的數據帶來不好的變化.
解決方案:需要加強對數據進行監控.
其它:有時也適用於數據量巨大,無法完全批量學習的環境.
1.5.3 參數學習(parametric Learning)
如下圖所示,橫座標是房屋的面積,縱座標是房屋的價格,對應每一個房屋在這個特徵空間中就有一個點,基於這些數據點我們可以假設房屋的價格之間是一個線性的關係,即我們假設房租的價格是f(x)=a*x+b,當我們擁有了這個假設之後,我們整個機器學習的過程就是找到合適的a和b來描述房屋的面積和價格之間的關係.a和b就是參數.基於這樣的學習特點,相應的機器學習算法就叫做參數學習,那麼我們剛纔描述的學習的方法就是最爲基礎的線程迴歸機器學習方法.
剛纔我們預測是線性關係,事實上我們可以做出非常多的假設,在統計學領域有非常多的統計模型,我們可以假設我們的特徵和要預測的結果之間是某種統計模型可以涵蓋的,之後我們的任務就是學習統計模型中的參數.一旦學習到了這些參數之後,我們的預測相對是非常簡單的.不再需要原有數據集的參與.
1.5.4 非參數學習(Nonparametric Learning)
不對模型進行過多的假設,通常在預測的過程中,我們餵給算法的數據集也要參與進預測的過程中,要注意的是非參數不代表沒有參數,在後續的學習中會發現,很多非參數學習裏面的參數並不少.兩個種類的主要區別就是不把整個問題進行一個建模,不把整個問題理解成是學習一些參數.但是在學習過程中依然是需要一些參數來參與的.
1.6 和機器學習相關的哲學思考
1.6.1 數據的重要性
2001年微軟的一篇論文,這篇論文大意是指對於四個不同的機器學習算法,從算法的角度它們是有優有劣的,但是如果喂以足夠多的數據,橫座標是數據的規模,所有算法的準確率都在穩定的上升,縱座標是準確率.當數據大到一定程度後,算法的準確率相差並不多.
所以數據非常重要.
但是在2017年人工智能界有了新的突破,AlphaGo Zero不需要喂任何數據,所有數據都是由算法產生的,即使沒有數據,也可以人工生成數據,當然圍棋有它的特殊性,但是也說明了一些問題.
1.6.2 算法的選擇
奧卡姆的剃刀原則:
簡單的就是好的.對於一個問題,不要進行過多的假設,不要進行過多的複雜化.
可是容易引發爭議的問題是,到底在機器學習領域中,什麼叫"簡單"?
在這裏只是想說,機器學習處理的是不確定的世界中的真實的問題,對於很多問題來說,並沒有標準的答案.
沒有免費的午餐定理:
整個定理講述的是,可以嚴格地數學推導出:任意兩個算法,他們的期望性能是相同的.
既然任意算法的期望性能是相同的,那麼我們爲什麼還要學習新的算法呢?
因爲這裏值得是期望,但是具體到某個特定特定的問題,有些算法可能更好.所以我們還是要真正的去尋找,在我們要解決的領域裏,哪個算法更好.
但沒有一種算法,絕對比另一種算法好.脫離具體問題,談算法的好壞是沒有意義的.
在面對一個具體的我呢提的時候,嘗試使用多種算法進行對比實驗,是很有必要的.
1.6.3 其它思考
面對不確定的世界,怎麼看待使用機器學習進行預測的結果?比如美國的大選,有的團隊預測對了,有的團隊預測錯了,那麼預測對的到底是機器學習算法起到了重要作用還是僅僅是一個巧合?這同樣也類似於預測股票經濟歷史等等.
還有預測根據人的長相預測人成爲罪犯的概率,是否會得某種病的概率.我們該怎麼看待這種預測結果.
這種思考甚至會產生出一門新的學科,機器倫理學.
第二章 k近鄰算法 kNN
主要解決的是分類爲題.
下圖是腫瘤病人相關的數據,橫軸代表一個特徵是發現腫瘤病人腫塊的大小,縱軸是發現腫塊的時間.對於每一個病人,它的腫塊大小和發現的時間都成爲了特徵平面中的一個點,對於這個點我們又知道了它是一個惡性的腫瘤還是一個良性的腫瘤,惡性腫瘤用藍色來表示,良性腫瘤用紅色來表示.這樣如果新來了一個病人,用綠色的點表示,那麼我們怎麼知道他的腫瘤是良性的還是惡性的呢?
k臨近算法是這樣的,先選定一個k值,假設是3,對於每一個新的數據點,k近鄰算法做的就是在所有的點中,尋找離這個點最近的三個點,如果最近的點藍的多,那麼這個點就是藍的,紅的亦然.這裏藍色比紅色是3:0,所以這個腫瘤是惡性的.
第三章 線性迴歸法
對於分類問題問題,我們上面講的是橫軸代表腫瘤大小,縱軸代表腫瘤時間,樣本的輸出標記是被樣本是紅色的點還是藍色的點所表示的,藍色的點代表是惡性的,紅色的點代表是良性的.我們在這一小節舉得例子中,只有橫軸是樣本的特徵,縱軸就已經是樣本的輸出標記了也就是房租的價格,因爲在迴歸問題中我們真正要預測的是一個具體的數值,這個具體的數值是在一個連續的空間中,而不是可以用簡單的顏色來表示的,如果我們要想看有兩個樣本特徵的迴歸問題,我們需要在三維空間中觀察.在接下來的講解中爲了便於理解,我們對於線性迴歸這種可視化的講解使用只有一個特徵來講解.
3.1 簡單線性迴歸
對於樣本的特徵只有一個使用線性迴歸法進行預測,我們可以用簡單線性迴歸來稱呼它,簡單線性迴歸,顧名思義,相對來說是比較簡單的,我們可以通過對簡單線性迴歸的學習推廣到多個,樣本特徵有多個的話就叫多元線性迴歸.
下面是評估線性迴歸法性能的方法,因爲絕對函數不可導,所以我們這裏用平方的方法.
3.2 衡量線性迴歸方法的指標
對於一個數據集,我們把它分爲訓練數據和測試數據,在線性迴歸中,我們用我們的訓練數據找出最好的a,b,用測試數據來測試a,b的好壞.
現在有兩個訓練出的a,b那麼哪個比較好呢?
3.2.1 MSE
我們之前說的是將誤差的平方和相加,但是可能一個是1000個樣本數據誤差的累加,一個是100的誤差的累加,這樣難以說明問題,所以我們取樣本的平均值.
3.2.2 RMSE
我們之前用的是平方,但是這樣有可能會有量綱的問題,比如誤差是萬元,那現在的誤差是萬元的平方.一個簡單的優化方法是把MSE的值開一個平方.
3.2.3 MAE
之前在訓練的過程中我們不用相減絕對值去求是因爲絕對值不好求導,現在可以用它來評估誤差.
3.2.4 R Squared
RMSE與MAE還是有它們的問題,
當我們用房產數據進行預測的時候,用RMSE或MAE得到的數據是5萬元,而我們預測學生的成績,預測的最終結果是10分,那麼這種情況就難以說明我們的算法是作用在預測房產上好,還是預測學生成績上好.
這種情況是可以解決的,解決的方法是用一個新的指標R方.
看着比較麻煩,其實ssresidual就是預測結果減去真值平方和,sstotal就是平均結果減去真值的平方和.
另外:
3.3 多元線性迴歸
和之前講的簡單線性迴歸類似,只是這裏的特徵變成了n個.
當有n個特徵的時候,方程可以表示爲如下,表示的就是b,
表示的就是a.
預測值爲如下:
求解的思路也和簡單線性迴歸類似.主要是使損失函數儘量小
可變成一個列向量,X可以變成一個行向量,爲了保持一致性這裏我們加了一個X0.
上面只是一個樣本的預測,我們可以把X推廣到所有的樣本上.這個Xb有m行n+1列.是一個列向量.y hat(帶尖角的y)是一個列向量,是所有樣本的預測值.
這樣就能解出,但是時間複雜度過高.O(n^3)(優化O(n^2.4)),有更快的方法,如梯度下降法等.
第四章 梯度下降法(Gradient Descent)
梯度下降法不是一個機器學習算法,是一種基於搜索的最優化算法,作用是最小化一個損失函數.
我們的參數每次加上
就能保證向損失函數減少的方向移動,這樣一次次移動就能找到損失函數的最小值.比如在這裏我們的導數是負值,乘上-
,
便會增大,損失函數就會減小.
這裏是二維函數,對應的是導數,與x對應.如果是多維函數,對應的就是梯度.
成爲學習率,
的取值影響獲得最優解的速度,
取值不合適,甚至得不到最優解,
是梯度下降法的一個超參數.
並不是所有函數都有唯一的極值點.
解決方案:
多次運行,隨機化初始點,梯度下降法的初始點也是一個超參數.
4.1 線性迴歸中的梯度下降法
現在我們的樣本特徵變成了n個,之前是對一個求導,現在未知數多了,要對某個未知數求偏導.
我們希望我們求出來的值與m的個數是無關的,所以我們加上m分之一來消除m的影響.
按照上面這樣就求出來對應的梯度J(
)了,然後根據每次向梯度的方向進行一定的移動,直到找到極值就行了.基本步驟和二維的差不多.
第五章 多項式迴歸
之前學習線性迴歸的時候,需要預測的是直線,有的數據需要曲線等等擬合.這樣我們就需要多項式迴歸.我們可以把二次項看作另外一個特徵.
5.1 自己實現多項迴歸
添加一層x^2特徵,然後利用原來的線性迴歸去做就行了.
我們可以用sklearn來生成新的特徵,degree表示我們要爲原本的數據集添加幾次冪這樣的特徵.如果添加2次的話,一個
[2.44,2.59,-1.34,-0.33,-2.33]的矩陣就變成下圖所示.
值得注意的是sklearn不只是生成一個特徵,而是生成多個,當degree爲3,原本有x1,x2兩個特徵,用sklearn生成的特徵如下.
5.2 過擬合和欠擬合
如上面所說,按degree的不同會生成不同的特徵,如果degree過大,則預測的結果會過於擬合我們的測試數據集,如果過小,則會對測試數據集擬合結果不好.
5.3 模型的正則化
機器學習的主要挑戰,來自於方差.解決的方法有挺多,降低模型複雜度,減少數據維度,增加樣本數,使用驗證集等等,除了這些,解決高方差的一個主要手段就是模型正則化.
當我們過擬合時,模型的係數往往非常的大,下面是一個100次冪的係數.當係數過大時,就會越陡.如下左圖是係數,可以看到有10^11次方出現.
考慮到我們我們在計算結果的時候會使方差儘量小,我們又不希望過大,我們可以在方差中加入
來進行平衡.下圖我們在方差上加上了α
^2,這樣我們計算方差的時候
便不會過大.
下圖是隨着α逐漸增大,函數圖像的變化.
除了加上平方,還有一種方式.
第六章 邏輯迴歸
邏輯迴歸雖然是迴歸.但解決的卻是分類問題.這裏用了一個比較巧妙地函數將一個連續的值變成了0與1之間的值,我們還是通過剛纔的方法預測值,只不過預測的值要帶進sigmod函數中,可以看到sigmod函數的範圍在(0,1)之間,所以我們將預測的帶入後也將是一個(0,1)之間的值,所以可以作爲概率預測.
6.1 邏輯迴歸的損失函數
如果真值是1,那麼我們預測的p越小,cost越大.
如果真值是0,那麼我們預測的p越大,cost越大.
下面的兩個函數可以實現上訴要求,既越接近0,cost越大,與越接近1,cost越大.
爲了方便我們可以將上面兩式子合成一個.
這個式子沒有公式解,只能用梯度下降法求解.但這個損失函數是凸函數,沒有局部最優解,只有全局最優解,所以不用擔心求到的解不是最優解.
6.2 邏輯迴歸的決策邊界
決策邊界就是p等於二分之一,即 ^T * Xb =0 的X的取值.
如果有兩個特徵
剛纔的決策邊界是直線,我們可以直接將特徵帶入公式去計算,但是如果邊界是不規則的,如下面的圓形邊界,我們就需要按照多項式迴歸那樣,去自己構造特徵.可以用sklearn去生成特徵.
6.3 邏輯迴歸的正則化
這個我也不大懂,看看就好.