《OpenCV輕鬆入門》學習打卡第十天

2021-10-05 06:07:42 字數 2518 閱讀 3648

第十九章 繪圖與互動(暫定)

第二十章 k近鄰演算法

該章會粗略的涉及到機器學習,當然是比較基礎,也是比較簡單的機器學習。k近鄰演算法雖然在實際運用中應用的較少,但是適合於新手入門機器學習

機器學習演算法是從資料中產生模型,也就是進行學習的演算法。我們把經驗提供給演算法,它就能根據經驗資料產生模型。在面對新的情況的時候模型就會為我們提供預判(**)結果。從資料集中學得模型的這一過程稱為學習(learning)或者訓練(training)。在訓練過程中所使用的資料稱為訓練資料,其中的每個樣本稱為訓練樣本,訓練樣本所組成的集合稱為訓練集。大多數的機器學習演算法都**於日常生活實踐。k近鄰演算法是最簡單的機器學習演算法之一,主要用於將物件劃分到已知類中,在生活中被廣泛使用。

1.理論基礎

k近鄰演算法的本質是將指定物件根據已知特徵值分類。在實際的分類資料中往往引數特別多,因此為了提高演算法的可靠性,在實施的時候會取k個近鄰點,這k個點中屬於哪一類的較多,然後將當前待識點劃分為哪一類。為了方便判斷,k值通常取奇數,這和為了能得到明確的投票結果通常將董事會成員安排成奇數的道理是一樣的。

一般採用k近鄰演算法實現的具體步驟如下:

(1)對於各種類別收集一定數量的樣例形成資料集

(2)確定幾個用來識別類別的重要特徵,並使用這些特徵來標註不同類別的資料集裡的樣例。這樣每資料集各有n個這樣的特徵值,得到不同類別的數值特徵集

(3)計算待識別影象t的特徵,並使用特徵值表示影象t

(4)計算影象t的特徵值與中各特徵值之間的距離

(5)找出產生其中k個最短距離的樣本點(找出離t最近的k個鄰居),統計k個樣本點中屬於的樣本點數目,屬於哪個資料集的樣本點最多,就將t確認為哪個類別的影象

以上就是k近鄰演算法的基本思想

2.計算

1)歸一化

對於簡單的情況,直接計算與特徵值的距離(差距)即可,當有多個引數時,一般將這些引數構成列表(陣列)進行綜合判斷。當然,在計算與特徵值的距離時要充分考慮不同引數之間的權值。通常情況下,由於各個引數的量綱不一致等原因,需要對引數進行處理,讓所有引數具有相等的權值。

一般情況下,對引數進行歸一化處理即可。做歸一化處理時,通常使用特徵值除以所有特徵值中的最大值(或最大值與最小值的差)

2)距離計算

在之前的討論中,我們多次計算了距離。使用的方式是先將特徵值中對應的元素相減,然後再求和。而為了避免正負抵消的情況,我們通常會計算絕對值的和。取絕對值以後再求和,這種用絕對值之和表示的距離叫做曼哈頓距離。像這種計算距離基本上已經滿足要求了,但是還有更好的方法。更普遍的形式是計算平方和的平方根,這種距離就是被廣泛使用的歐式距離

3.手寫數字識別的原理

在實際應用中,可能存在著更多特徵維度需要計算。手寫數字識別的原理就是把手寫的數字依次與每個數字的影象比較,計算距離,與哪個數字影象最近,就認為是什麼數字

1)特徵值提取

步驟1:把數字影象劃分為很多小塊,此外每個小塊是由很多個畫素點組成的,我們把這些小塊記為b(bigger),將b裡面的畫素點記為s(smaller),所以可以將待識別的數字理解為乙個個b組成

步驟2:計算每個小塊b內,有多少個黑色的畫素點

步驟3:為了處理上的方便,我們把得到的特徵值排成一行(寫成陣列形式)

步驟4:與我們待識別的數字影象類似,每個數字影象的特徵值都可以用一行數字來表示,一般來說,類似於我們的身份證號碼,這一行數字具有唯一性

2)數字識別

數字識別要做的就是比較待識別影象與影象集中的哪個影象最近,這裡指的是二者之間的歐氏距離最短。

上面介紹的是k近鄰演算法中只考慮乙個近鄰的情況,相當於k近鄰中k = 1的情況

4.自定義函式手寫數字識別

opencv提供了函式cv2.knearest()用來實現k近鄰演算法,在opencv中可以直接呼叫高函式。為了進一步了解k近鄰演算法及其實現方式我們自己編寫乙個函式來實現這個

1)資料初始化

2)讀取特徵影象

3)提取特徵影象的特徵值

4)計算待識別影象的特徵值

5)計算待識別影象與特徵影象之間的距離

6)獲取k個最短距離及索引

7)識別

手寫數字識別就相當於機器學習的hello world,關於如何建立模型,有很多教程,我建議大家可以去看看齋藤康毅的《深度學習入門:基於python的理論與實現》1

到此為止,這本書的學習筆記就暫時結束了。這本書對於opencv庫講解的比較全面,也深入淺出的給我們介紹了一些函式原理。我認為還是需要結合專案實際來運用,不然很快就會慢慢遺忘。大家可以網上找找資源或者自己動手想想實現乙個小小的影象分割提取的任務,這樣能加深自己對函式的理解和效果,也能加深記憶。無他,但手熟爾。

本讀書筆記**於教材。2

齋藤康毅. 深度學習入門:基於python的理論和實現[m]. 北京. 人民郵電出版社: 齋藤康毅著. 陸宇杰譯. 2019.7 ↩︎

李立宗. opencv輕鬆入門: 面向python[m].北京. 電子工業出版社: 李立宗. 2019.5 ↩︎

第2章 OpenCV入門

配置環境變數 int main int argc,char ar argc arguments count 從外部輸入字串的總數目。ar arguments values 第乙個位址指向檔案的全路徑名,從第二項開始,依次指向輸入的字串。cv imread 函式源 mat cv imread cons...

第1章 OpenCV 入門

opencv 輕鬆入門 面向python 學習筆記 import cv2 img cv2.imread your path image.png cv2.imread unchanged cv2.namedwindow window name cv2.imshow window name img cv...

第22天學習打卡

即同一方法可以根據傳送物件的不同而採用多種不同的行為方式。乙個物件的實際型別是確定的,但可以指向物件的引用型別有很多。引用一般指 父類,有關係的類 有繼承關係 子類重寫父類方法 父類引用指向子類物件 instanceof 型別轉換,引用型別轉換 判斷乙個物件是什麼型別package com.oop....