持續更新中... ...
0引言
最近開始讀模式識別與機器學習1這本書。本文主要是梳理一下第一章的知識。然後對第一章習題做一下梳理。
寫機器學習的書有很多,有李航老師的統計學習方法、周志華老師的機器學習導論(西瓜書)、還有就是今天用的這本模式識別與機器學習(Pattern Recognition and Machine Learning)。機器學習的書大體分爲兩類。概率派(統計機器學習)和貝葉斯派(概率圖模型):李航老師的統計學習方法更加偏向於頻率派,除了第一章的緒論和最後一章的總結,中間主要的內容有感、K、樸、決、邏、支、提、E、隱、條件等10章。而本本主要使用的模式識別與機器學習
主要是偏向貝葉斯學派的模型(當然也會介紹頻率派的內容),本書書除了第一章的緒論和第二章的分佈函數主要的內容有:回(迴歸)、分(分類)、神(神經網絡)、核(核方法)、稀(稀疏核機)、圖(圖模型)、混(混合模型和EM算法)、近(近似推斷)、採(採樣方法)、連(連續潛在變量)、順(順序數據)、組(組合模型)。下面開始梳理第一章的知識。
最好具備的知識儲備:線性代數、高等數學、數理統計、概率論等基礎課程
需要的高級編程語言:C、C++、matlab、python、R等其中的一個即可(注:本文涉及的代碼均使用R完成)。
1、基礎的概念梳理
1.1機器學習的學習模式
根據是否有真值以及真值的多少分爲有監督的學習模式、無監督的學習模式、半監督的學習
,此外除了這些還有強化學習(反饋學習)
的學習模式。是通過不斷的改變策略,評估獎懲來選擇最優的模式的。
常見的例子:
有監督的學習:迴歸,分類等有標籤或者實際的數據。
無監督的學習:聚類、主成分等
半監督的學習:只有部分數據含有真值,我們的策略一般是,做無監督的模型,有真值的數據作爲限制條件。
強化學習:阿爾法狗、深海等算法。
1.2訓練數據與測試數據
在機器學習中爲了訓練一個更加實用的模型,防止過擬合的情況。通常會把數據分爲訓練數據和測試數據。一般的數據滿足一下條件:
- 訓練數據和測試數據互斥。換句話是不能有一條觀測值即屬於訓練數據又屬於測試數據。
- 訓練數據和測試數據相互獨立。
- 訓練數據和測試數據來自同一分佈。
1.3均方根誤差(RMSE)和MSE均方誤差
- RMSE:Root Mean Square Error,均方根誤差是觀測值與真值偏差的平方和與觀測次數m比值的平方根。是用來衡量觀測值同真值之間的偏差
- MAE Mean Absolute Error ,平均絕對誤差是絕對誤差的平均值能更好地反映預測值誤差的實際情況.
- 標準差Standard Deviation ,標準差是方差的算數平方根是用來衡量一組數自身的離散程度
1.4泛化能力(generalization)
泛化能力是指訓練出的模型對於新的數據集的一種適應的能力。換句話說就是模型的可推廣性。
1.5預處理(pre-processed)
在做機器學習的模型中有一個板塊叫預處理,也叫特徵提取(featuer extraction)。
需要注意的是:做預處理需要同時對訓練集和測試集做相同的處理。
2、正文內容
2.1、多項式模型的引入
2.1.1內容概要
多項式模型貫穿了整個第一章,也是第三章中線性基函數迴歸模型一種特殊形式。本書在(1.1節)
中引入了多項式迴歸模型,並通過示例來說明模式識別的一些主要的概念。
- 過擬合問題的出現
- 通過劃分數據集合來評估模型
- 解決過擬合問題的兩種方式:
– 使用貝葉斯的方法代替頻率派的極大似然估計
好處:參數的有效數量數量會隨着數據集的自動調整。
壞處:未知
– 增加懲罰項的正則方法(例如:嶺迴歸)
好處:可以減少過擬合、簡化模型形式
壞處:有可能會損失一些重要的信息。例如一般的稀疏主成分會比主成分得到的方差信息要少。
– 尋求更加複雜的非線性方法
好處:往往能夠訓練出相對於顯示模型來說好的很多的精度。
壞處:不易操作,很難得到模型的機理。
在這一節也介紹了模型的形式,參數求解時是通過最小化誤差函數的方法進行參數估計。
2.1.2代碼推導
這部分附上一些R語言建模的部分代碼,供大家學習使用。
# 生成數據
N <- 11 # 生成數據的個數
(x <- seq(0, 1, length.out = N)) # 賦值並輸出構造自變量
set.seed(0) # 爲結果的可重複性,添加隨機種子
y <- sin(2*pi*x) + rnorm(N, 0, 0.2) # 構造y並添加噪聲
plot(x,y)
# 建立模型
fit2 <- lm(y ~ poly(x, 2))
fit3 <- lm(y ~ poly(x, 3))
fit9 <- lm(y ~ poly(x, 9))
# fit <- lm(y ~ x + I(x^2) + I(x^3)) # 多項式模型也可以用這個命令
pre3 = predict(fit3,data.frame(x = x),interval='confidence',level=0.99)
pre2 = predict(fit2,data.frame(x = x),interval='confidence',level=0.99)
pre9 = predict(fit9,data.frame(x = x),interval='confidence',level=0.99)
# 模型效果
plot(x,y)
lines(x, sin(2*pi*x), col='deepskyblue4', lwd = 4)
lines(x, pre3[,1], col='green', lwd = 3)
lines(x, pre2[,1], col='red', lwd = 3)
lines(x, pre9[,1], col='blue', lwd = 3)
運行結果就不貼了。感興趣的可以下載安裝R自行探索。
2.2 概率和貝葉斯
2.2.3頻率派VS貝葉斯派
3、習題的總結指導
4、參考文獻
Christopher M. Bishop. Pattern Recognition and Machine Learning. ↩︎