在昨天的文章中,提到了 underfitting and overfitting 的問題,那麼我們可能會好奇,到底我們找出來的模型,跟真實世界狀況之間的誤差,也就是這個 error 到底是怎麼來的呢?
(圖片來源)
精確度(precision)和準確度(accuracy)是科學、工程及統計學常會用到的兩個詞。
如果以上面打靶圖為例,最左邊的圖代表著「高精確度、低準確度」,意思是我們每次打靶的結果,位置都差不多(高精確度),但是這個結果的位置跟我們要瞄準的靶心,平均起來還是有一段距離(低準確度)
如果看到左邊第二張圖,情況剛好相反,我們每次打靶的結果好像都散得很開(低精確度),但是平均起來這些點的位置離我們要瞄準的靶心很近(高準確度)。
當然最好的情況是,我們可以同時達到「高精確度、高準確度」
所以我們可以想像,機器學習的過程,就是要調整好一把槍,來打中我們要的靶心。但實際上,我們看不到靶心在哪裡,我們不會知道真實世界的資料,是由背後哪個上帝的方程式所產生出來的,另外我們也不可能窮盡所有的資料來訓練機器。
我們每一次所收集到資料,只能說是真實世界的抽樣資料,每一次有限的資料不能代表真實世界的實際狀況,但是如果我能不斷的抽樣資料出來,那麼就能夠越來越逼近真實世界的狀況,也就是越來越接近真實靶心的意思
然而,即便我們能夠盡可能地瞄準靶心射擊,但這時候還有另外一個問題,也就是槍枝調整的問題。我們很有可能都朝著靶心射擊,但實際上的結果卻四散各處,也就是精確度很低的狀況,以科學的角度來說,就是變異數(variance)很大。
所以如果要達到「高精確度、高準確度」的狀況,我們需要足夠的能力去找到靶心,同時有能力去調整槍枝,讓每一次的射擊都能接近靶心
所以回到機器學習上面,我們每次所準備的一組訓練資料,就是一次從真實世界來的抽樣資料,也因為資料不同,所以即便用同樣的模型下去跑,可能會得到不一樣的結果,如果我們將這些訓練好的模型「平均起來」就會接近真實世界那個上帝方程式。
不過使用不同的還是有所差異,如果用比較簡單的模型(譬如 y = a * x + b
),就會發現在不同訓練資料中所訓練出來的結果,可能差異不會太大,因為簡單的模型對於資料的「敏感度」比較低。因此不同訓練結果預測出來的,拿去做真實世界的預測的話,結果不會差異太大(高精確度),但是這些模型的平均值,可能不會真的很貼近真實世界的那個上帝方程式(低準確度)
另一方面,如果用比較複雜的模型(譬如 y = a * x^3 + b * x^2 + c * x + d
),可能會發現在不同訓練資料中所訓練出來的結果,差異會比較大,因為複雜的模型對於資料的「敏感度」比較高,拿不同訓練結果預測出來的,去做真實世界的預測的話,差異也會比較大(低精確度)。但是這些模型的平均值,可能會比較貼近真實世界的那個上帝方程式(高準確度)
所以剛剛這樣看下來,簡單的模型會有高精確度、低準確度,複雜的模型會有低精確度、高準確度,也就是說,隨著模型複雜度的提升,精確度會逐漸下降,準確度逐漸提升。
最後,我們要找的那個模型複雜度,會是在一個精確度和準確度的誤差和最小的地方。如果回想起昨天的例子,那麼可能我們要找的那個模型,就會是二次式的模型。(當然,昨天的例子只是個非常簡化的示範案例)
果然沒有這麼簡單啊!明天再讓我們繼續多聊聊吧,祝大家連假愉快!