1.4 訓練簡單的分類器
上篇中,我們發現,調整線的斜率就可以進行分類,那麼他是怎麼做到的呢?
接下來,我來給大家剖析一下。
首先我們知道“毛蟲的的特點是長而細,瓢蟲的特點是短而粗”,我們用一個表格來表示,是這樣的;
以上的表格我們認為是一組“訓練資料”,這種資料有個特點,他們特真實。
現在我們知道的是,以上的資料是真實的,我們的訴求是找出那個分界線。
我們試著用座標圖去畫出以上的資料:
大家觀察一個,瓢蟲和毛蟲的位置可以認為一個在左上,一個在右下,人類的眼睛輕而易舉的就能觀察出來,但是對於機器來說,怎樣才能分出來呢?
上一篇曾說過,我們可以調整一個斜率來控制分類:
y = Ax
這個公式的表現形式就是一條經過原點(0,0)的斜線,作用就是分開這兩種昆蟲,說白了就是一臺分類器。
有同學就會想,為什麼不是“y = Ax + B”呢,而是簡單的“y = Ax”,別多想,只是因為我們用不著而已,不要多此一舉。
現在我們開始去進行分類吧,先從 A = 0.25 開始吧(我隨意猜的數字)。
當 A = 0.25 的時候, y = 0.25x,就會得到下方這個圖片的斜線;
感覺這個斜線毫無用處,因為他沒有做好本職工作-分類器。
那我們能不能直接否決機器呢?我們用肉眼來看的話,其實很簡單,把 A 加大不就好了,還記得我們以前講過的嗎,我們要小心謹慎地加大,防止“步子邁大扯著襠”,這一個過程而言,人類做起來其實是有難度的(人類本身比機器就是缺乏耐心),但是我們可以控制機器去做這些事情,可以透過一組程式讓機器不停的重複去完善,這組程式我們稱之為-演算法(algorithm)。
接下來我們將 A 帶進去,看看和我們的資料差多少。
y = Ax = 0.25 * 3.0 = 0.75
最後得到 y = 0.75 ,和我們看到的資料展現的模樣是一樣的,A 的值太小了。
雖然我們 A = 0.25 失敗了,但是我們得到了一個可以幫助我們的“誤差值”,我們可以利用他來調整我們的 A 。
調整 A 之前,我們考慮一個問題,他等於多少合適?難道等於0.3最合適嗎?當 A 等於0.3的時候,我們就會得到一個結果: y = 0.3 * 3.0 = 1.0 ,這是你會發現他與結果重合了,但是我們不是要一個結果,而是要一個分類器,是一個將昆蟲進行分類的分類器,所以我們單純的從 A 出發,思路是錯誤的,這時候我們應該把思路放在誤差值 E 上,只有這個是我們可以直接得到的結果。
我們延續以上的思路,假設需要一個 y 的值是 1.1(稍微大一點,避免步子邁大了),這時候我們的誤差值就是:
E = 1.1 - 0.75 = 0.35
現在我們把所有的資料放在一張圖上,進行比對,檢視結果:
這樣我們就看到了所有資料,理想值和現在的值還是有一定的差距的,這個差距就是我們的 E 誤差值,然而現在我們要做的是,怎麼來控制 E ,儘可能地讓他接近理想值;
我們考慮一下,y 的值怎麼來的,他的不同和誰有關係,對,他和 A 是有關係的,y 會隨著 A 的變化而變化,用一個線性函式表示:
t = (A + △A )x
這樣可能不是很直觀,我們再看下面的圖:
有點明白了吧,△表示增量,圖中你可以看出來, E 其實就是t - y的值,也就是:
E = t - y = (A + △A )x - Ax
E = △Ax
最終我們獲得一個結論:誤差值 E 和 △A存在著一個簡單的關係。
我們也可以反過來看:
△A = E / x
也就是,調整誤差值可以操控 △A ,因為我們的 E 是已知的,所以我們就可以求出 A 的值是:
△A = E / x = 0.35 / 3.0 = 0.1167
A = △A + A = 0.25 + 0.1167 = 0.3667
一頓操作我們獲得了一個到現在為止我們比較滿意的值,我們繼續,試著將現在的 A 帶到 x = 1.0 中,你會發現,y = 0.3366 * 1.0 = 0.3367 , 這個值和我們的理想值3.0 差了太多;
很顯然這樣不行 ,我們還是按照從前的思路,先設一個不是很離譜的值 y = 2.9 開始,這樣我們就會得到一個誤差值 E = 3.0 - 2.9 = 0.1 ,再透過得到的公式,這樣就會得到一個 A = 2.90,就像這樣:
看圖發現了一個問題,出現的兩個分類器,而且是各司其職,沒有統一起來,原因在哪?原因就是我們一直用單一的資料進行訓練,這樣就會得到單一的分類器,雖然你每一步對做得很對,但是這樣的情況來說對於我們來說毫無意義。那我們應該怎麼做呢?
接下來我來告訴你。