《python機器學習基礎教程》筆記(第2章監督學習)(第1部分)

這是《python機器學習基礎教程》的第二章——監督學習,上一章筆記中說,我們需要讓模型去學習某種數據和正確答案之間的關係(比如鳶尾花的分類,機器在訓練時應該學習到花瓣和花萼的長度寬度是一個什麼關係時就是A類鳶尾花,什麼關係時又是B類鳶尾花),這一章我們將瞭解到那些天才想出來的讓機器可以學習到這些關係的一系列算法,不同算法都有它們各自存在的優勢。另外還介紹了泛化,過擬合和欠擬合分別是什麼意思,以及分類問題中的不確定度,就是說機器會認爲這個花是A類花的概率是80%,是B類的概率是20%,這個80%和20%就是不確定度,其實我們可以極其淺顯的說下爲什麼機器可以給出一個概率,這還要從兩個不同的函數說起,他們分別是這樣的
在這裏插入圖片描述
黑色的函數,給出的結果不是0 就是1 也就是相當於結果要麼是A類,要麼不是A類,然而藍色的函數,則可以在0-1之間給一個小數,於是可以反映出有百分之多少的可能性是A類。
好了下面開始整理部分

1、分類與迴歸,泛化過擬合和欠擬合

所謂分類,就是預測出標籤,迴歸,就是預測出一個連續的數(浮點數),上一章已經好多廢話了這裏就不再廢話了。泛化,或者叫做泛化能力,我們知道,我們的模型是通過訓練數據得到數據和結果之間的某種關係的,如果我們拿訓練數據去做測試,模型一定會給出正確的結果,但是我們實際應用的時候,一定是拿不再訓練數據中的數據給模型,希望得到正確的結果,這就是模型的泛化能力,表示是否對其他的數據也有正確分類的能力。過擬合,就是我的模型太過分的去擬合訓練數據和正確結果之間的關係了,比如訓練數據中所有男性都穿牛仔衣,用小米手機,帶藍色和綠色的手錶,右手食指戴三個戒指分別是綠色藍色紅色,機器得到結論,只要穿牛仔衣,用小米手機,帶藍色和綠色的手錶,右手食指戴三個戒指分別是綠色藍色紅色,就一定是男的。這樣的一條判斷男女的規律可能非常適用於用於訓練的那10000張圖片,但是對於其他圖片來說,這條規律顯然是沒有道理的。相對應的。欠擬合就是,機器認爲穿了牛仔衣的就很有可能是男的,這條規律顯然還可以繼續深入,比如牛仔衣是黑色的更可能是男的,而粉紅色的則更可能是女的,所謂欠擬合,就是還有繼續深入分析的空間。

2、監督學習算法

(1)K近鄰(分類,迴歸)

from sklearn.neighbors import KNeighborsClassifier #分類
from sklearn.neighbors import KNeighborsRegressor #迴歸

將所有訓練數據分佈到同一個空間上(比如兩個特徵時就可以理解爲分佈在一個平面上),然後把我們的測試數據也分佈到這個空間上,看看哪個訓練數據和測試數據的距離最近,我就認爲測試數據的結果就是該訓練數據的結果(我們也可以採用由K個鄰居決定該測試數據的結果,比如我們使用K=3,我們找到該測試數據最近的3個鄰居,發現他們2個屬於A類,1個屬於B類,那麼我們就認爲該測試數據屬於A類)。
同樣,K近鄰可以用於迴歸問題,這個時候就不是採取投票決定屬於哪個類了,而是將所有鄰居的結果取平均值,作爲該次測試的結果。
可以認爲,K近鄰分類器的結果好壞由兩個參數決定,一個是鄰居的個數,另一個是數據點之間的距離的計算方法,很可惜,對計算距離的討論超過了該書的討論範圍,也就超過了我的知識範圍…不過大多數條件下,採用歐氏距離,可以得到非常好的效果(歐式距離就是座標中兩點距離的計算公式計算出的距離)
缺點:
若是數據特徵非常多,或者訓練數據集非常大,該算法速度較慢,效果可能不好。特別的,對於大多數特徵的取值都是0的數據(稀疏矩陣),該算法的效果尤其不好

(2)線性模型(分類,迴歸)

就是用一條線(或者一個平面,或者更高維的超平面)來預測結果,可以想象,它可以應用到迴歸問題中

線性迴歸模型
from sklearn.linear_model import LinearRegression #線性迴歸,也叫普通最小二乘法

二維數據集中,就是想辦法找到 y=ax+b 中的a(權重)和b(偏移)的值,線性迴歸模型沒有參數這是一個優點,但是我們也因此無法控制模型的複雜度(線性迴歸在大量特徵(高維)的數據集中將發揮更好的性能)

from sklearn.linear_model import Ridge  #嶺迴歸模型

這也是一種線性模型,區別在於它對權重有約束存在,從而避免過擬合,這種約束也叫正則化,嶺迴歸用到的叫做L2正則化,同理還有L1正則化,他們的區別你可以認爲就是對權重的約束力度的不同
嶺迴歸有一個參數 alpha ,增大它,將使得模型權重趨於0,這會減小訓練集性能,但是可能會提高模型的泛化性,該參數的最佳取值取決於所用的數據集

from sklearn.linear_model import Lasso  #嶺迴歸模型

同樣是用到正則化的線性迴歸模型,和Ridge不同的是,lasso利用的是L1正則化

線性分類模型(二分類)
from sklearn.linear_model import LogisticRegression #有名的Logistic迴歸 叫回歸,但是是用於分類的
from sklearn.svm import LinearSVC   #支持向量分類器

兩者都有一個參數 c 決定對應的正則化強度,c越大,對應的正則化越弱,也就是說,c值越大,模型越強調把訓練數據擬合好,越容易出現過擬合

線性分類模型(多分類)

許多線性分類模型只適用於二分類問題,不能輕易推廣到多分類問題上去(除了Logistic迴歸)。線性分類用於多分類可使用“一對其餘”方法,也就是對每個類別都使用二分類,不詳細說了

總結

線性模型的主要參數是正則化參數(alpha 和 c)。線性模型訓練和預測速度都非常快,適用於非常大的數據集中,,如果特徵數量大於樣本數量(訓練數據數量),線性模型的表現通常較好,但是在低維(特徵數量較少)空間中,往往得不到較好的泛化能力

(3)樸素貝葉斯分類器

sklearn中實現了幾種樸素貝葉斯分類器,它們在下列路徑

from sklearn.naive_bayes import *

樸素貝葉斯分類器是一種和線性模型非常相似的模型,但是他的速度更快,代價是泛化能力要比線性模型稍弱。其中BernoulliNB模型和MultinomiaNB模型主要用於文本數據分類
樸素貝葉斯模型是很好的基準模型,常用於巨大的數據集,這些數據集即使使用線性模型也會花費大量時間

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章