KNN算法与线性分类器
一、圖像識別
1、簡單介紹
圖像識別的核心問題:矩陣。
圖像識別的任務就是給定圖像即矩陣后,對矩陣去做圖像識別,以得到一組概率,以此來判斷圖像的所屬類別。
2、不足之處
圖像識別的困難之處:準確率一直提升不上去。準確率提升不了的原因主要有如下幾個:
1、圖片視角不同:每個事物旋轉或者側視最后的構圖都完全不同。
2、圖片尺寸大小不統一:相同內容的圖片也可大可小。
3、圖片變形:很多東西處于特殊的情形下,會有特殊的擺放和形狀。
4、光影等干擾/幻象
5、背景干擾
6、同類內的差異:比如同一事物有多種類別,椅子有靠椅、吧椅、餐椅、躺椅等。
3、基本流程
圖像識別基本流程:
1、輸入:給定K個類別的N張圖片,作為計算機學習的訓練集。
2、學習:讓計算機逐張圖片地觀察和學習。
3、評估:評價計算機學習的學習成果,評價的方法是給定一些計算機不知道類別的圖片讓它判別,然后再比對我們已知的正確答案。
二、圖像識別算法
1、K最近鄰法(KNN)
顧名思義,KNN就是需要找到距離樣本最近的鄰居,那么這時候就需要有一個標準去衡量怎樣才算近,所以需要衡量樣本之間的距離。常見的主要有以下三類距離:
1、曼哈頓距離
2、歐式距離
3、余弦距離
有了距離準則之后,我們可以找到訓練集中最近的N個,以他們中最多的類別為結果。例如從1000張圖片中挑出與樣本圖片最接近的5張,如果在挑出的圖片中有3張是貓,2張是其它,則此樣本圖片就被認為是貓。
如上圖是原始數據,不同的顏色代表不同的類別,NN就是1NN,即每次只找和它最接近的一張圖片,根據這一張圖片的類別去判定它現在的類別。5NN是K=5的情況,每次挑最近的5個樣本來做一個綜合投票,投票最多的結果就標為這個類型。
N折交叉驗證:在使用模型時幫我們選擇參數。假設現在有一份訓練集和一份測試集。我們使用KNN算法時不知道K選擇多少,所以要有一個方法去判定K選擇多少最合適。數學上是沒有合適的公式來幫助我們判定的,我們只能夠通過實驗得到,驗證方式就是N折交叉驗證。
如上圖所示,例如N=5,就是分成5折,然后輪番的用其中的四折作為真正的訓練集,再用第五折做一個交叉驗證即評估在訓練集上拿到的模型在第五折上的效果怎么樣。
交叉驗證結果圖:
KNN做圖像識別缺點:
1、準確度不高
2、要記錄全部的訓練數據
3、速度比較慢
2、線性分類器
線性分類器會有一個得分函數,例如每張圖片是32323,即總共有3072個數,線性分類器要做的事情就是把這3072個數當成x,即x是一個13072的向量,我們會給這個向量x一個權重W。例如讓W=103072。假如最后要判定的類別有10種,如上圖所示,那么得分函數最后的結果是一個10*1的向量。
如上圖所示,如果樣本是一張貓的圖片,而在此權重下將圖片判定成了一條狗,即說明此權重不合適。
對于線性分類器的理解:
1:空間劃分
如上圖,對于得分函數f(x,W)=Wx+b,當W和b確定后直線也就確定了,就以上圖紅色的直線函數來說來說,當輸入x值代入到紅色直線的函數后得到的函數值非常大時,表明在小汽車上方,說明此樣本為小汽車的置信度很高。同樣,取不同的W,會得到不同的直線,當在其中一條直線上得分非常高時表明接近某一類。
空間劃分的效果并不是太好,因為它認為這些東西都是線性可分的。
2、模板匹配
如上圖所示,對于每一個得分yi_ii?是由yi_ii?=Wi_ii? x+bi_ii? 得到,這時把x當作一個輸入,Wi_ii?一旦確定后就可以看作是一個類別的模板,只不過這時的計算是像素點與模板之間內積的一個計算。意思就是輸入x后用不同的Wi_ii?去匹配,看哪個匹配度高。
損失函數:
前面我們說過貓的圖片識別過后卻變成的狗,說明W不是一個合適的權重,所以需要定義一個東西去衡量在現在的W和b下的結果與真實結果的差距有多大,損失函數由此得來。通俗的說就是判斷當前的W和b好不好,我們要做的事情就是調整參數W,使得映射結果和實際類別吻合。
損失函數有兩種類型:
1、支持向量機損失
對于訓練集中的第i張圖片xi_ii?,在權重W下會有一個得分函數f(xi_ii?,W),第j類的得分我們記作f(xi_ii?,W)j_jj?,則在該樣本上的損失我們由下列公式計算得到:
因為是線性模型,因此上式可以簡化成如下圖所示:
假設我們現在有三個類別貓、狗和船,而得分函數計算某張圖片的得分為f(xi_ii?,W)=[13,-7,11],實際的結果是第一類即這張圖片是一只貓。假設Δ\DeltaΔ=10,上面的公式把錯誤類別都遍歷了一遍,求值加和得到如下:
上述例子損失函數做的事情就是權衡自己判斷對的那一類即貓的得分13與判斷不對的這兩類得分-7與11相比是不是超出了某個量級或者高出了某個給定的Δ\DeltaΔ。
Δ\DeltaΔ是超參數,表明我們希望得分向量里判斷對的這一類比判斷不對的一類至少要多出多少,上例子中貓13是判斷對的那一類,max(0,-7-13+10)=0表明在狗這類上沒有損失,因為貓得分13比狗得分-7高出了20分,這20分已經滿足上訴提出的Δ\DeltaΔ=10分的要求了,所以這一類沒有損失。最后一類船的得分是11,而13只比11多了2,有些接近正確結果,這時衡量在船類別上有損失,因為我們沒有滿足最小間隔為10的要求。
損失函數2:互熵損失
對于訓練集中的第i張圖片數據xi_ii?,在W下會有一個得分結果向量fyi_{yi}yi?,則損失函數記作:
或者
其中一般:
上述損失函數實際上就是先將得分做了一個歸一化處理后將得分映射成了概率。例如樣本是貓的話正常概率為[1,0,,,0],而歸一化后的概率為[0.6,0.1,,0.1],互熵損失做的事情就是權衡這兩組概率分布之間的差距。
總結
以上是生活随笔為你收集整理的KNN算法与线性分类器的全部內容,希望文章能夠幫你解決所遇到的問題。