亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

OpenCV之理解KNN鄰近算法k-Nearest?Neighbour

 更新時間:2023年05月06日 08:59:45   作者:uncle_ll  
這篇文章主要為大家介紹了OpenCV之理解KNN鄰近算法k-Nearest?Neighbour,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

目標

在本章中,將理解

  • k最近鄰(kNN)算法的概念

理論

kNN是可用于監(jiān)督學(xué)習的最簡單的分類算法之一。這個想法是在特征空間中搜索測試數(shù)據(jù)的最近鄰。用下面的圖片來研究它。

在圖像中,有兩個族類,藍色正方形和紅色三角形。稱每一種為類(Class)。他們的房屋顯示在他們的城鎮(zhèn)地圖中,我們稱之為特征空間( Feature Space)。 (可以將特征空間視為投影所有數(shù)據(jù)的空間。例如,考慮一個2D坐標空間。每個數(shù)據(jù)都有兩個特征,x和y坐標??梢栽?D坐標空間中表示此數(shù)據(jù);如果有三個特征,則需要3D空間;現(xiàn)在考慮N個特征,需要N維空間,這個N維空間就是其特征空間。在上圖中,可以將其視為2D情況。有兩個特征)。 現(xiàn)在有一個新成員進入城鎮(zhèn)并創(chuàng)建了一個新房屋,顯示為綠色圓圈。它應(yīng)該被添加到這些藍色/紅色家族之一中。稱該過程為分類(Classification)。這個新會員應(yīng)該如何分類?本文使用kNN算法解決上述問題。

一種方法是檢查誰是其最近鄰。從圖像中可以明顯看出它是紅色三角形家族。因此,它也被添加到了紅色三角形中。此方法簡稱為最近鄰(Nearest Neighbour )分類,因為分類僅取決于最近鄰。 但這是有問題的。紅三角可能是最近的。但是,如果附近有很多藍色方塊怎么辦?然后,藍色方塊在該地區(qū)的權(quán)重比紅色三角更大。因此,僅檢查最接近的一個是不夠的。相反,檢查一些k個近鄰的族。那么,看誰占多數(shù),新樣本就屬于那個類。在上圖中,假設(shè)設(shè)置k=3,即3個最近族。它有兩個紅色和一個藍色(有兩個等距的藍色,但是由于k = 3,只取其中一個),所以它應(yīng)該加入紅色家族。但是,如果我們?nèi)?code>k=7時,它有5個藍色族和2個紅色族,它應(yīng)該加入藍色族。因此,分類結(jié)果隨著k的值而變化。更有趣的是,如果k=4時,它有2個紅色鄰居和2個藍色鄰居,這是一個平局!因此最好將k設(shè)置為奇數(shù)。由于分類取決 于k個最近的鄰居,因此該方法稱為k近鄰。 同樣,在kNN中,在考慮k個鄰居時,對所有人都給予同等的重視,這公平嗎?例如,以k=4的情況為例,按照數(shù)量來說這是平局。但是其中的兩個紅色族比其他兩個藍色族離它更近。因此,它更應(yīng)該被添加到紅色。那么如何用數(shù)學(xué)解釋呢?根據(jù)每個家庭到新來者的距離來給他們一些權(quán)重。對于那些靠近它的人,權(quán)重增加,而那些遠離它的人,權(quán)重減輕。 然后,分別添加每個族的總權(quán)重。誰得到的總權(quán)重最高,新樣本歸為那一族。這稱為modified kNN或者** weighted kNN**。 因此,使用kNN算法時候,需要了解的重要信息如下:

  • 需要了解鎮(zhèn)上所有房屋的信息,因為必須檢查新樣本到所有現(xiàn)有房屋的距離,以找到最近的鄰居。如果有許多房屋和家庭,則需要大量的內(nèi)存,并且需要更多的時間進行計算
  • 任何類型的“訓(xùn)練”或準備幾乎是零時間。“學(xué)習”涉及在測試和分類之前記?。ù鎯Γ?shù)據(jù)

OpenCV中的kNN

就像上面一樣,將在這里做一個簡單的例子,有兩個族(類)。 因此,在這里,將紅色系列標記為Class-0(用0表示),將藍色系列標記為Class-1(用1表示)。創(chuàng)建25個族或25個訓(xùn)練數(shù)據(jù),并將它們標記為0類或1類。借助Numpy中的Random Number Generator來完成所有這些工作。然后在Matplotlib的幫助下對其進行繪制。紅色系列顯示為紅色三角形,藍色系列顯示為藍色正方形。

import cv2
import numpy as np
from matplotlib import pyplot as plt
# Feature set containing (x,y) values of 25 known/training data
trainData = np.random.randint(0, 100, (25, 2)).astype(np.float32)
# Label each one either Red or Blue with numbers 0 and 1
responses = np.random.randint(0, 2, (25, 1)).astype(np.float32)
responses
# Take Red neighbours and plot them
red = trainData[responses.ravel()==0]
plt.scatter(red[:, 0], red[:, 1], 80, 'r', '^')
# Take Blue neighbours and plot them
blue = trainData[responses.ravel()==1]
plt.scatter(blue[:, 0], blue[:, 1], 80, 'b', 's')
plt.show()

由于使用的是隨機數(shù)生成器,因此每次運行代碼都將獲得不同的數(shù)據(jù)。 接下來啟動kNN算法,并傳遞trainData和響應(yīng)以訓(xùn)練kNN(它會構(gòu)建搜索樹)。 然后,將在OpenCV中的kNN的幫助下將一個新樣本進行分類。在進入kNN之 前,需要了解測試數(shù)據(jù)(新樣本數(shù)據(jù))上的知識。數(shù)據(jù)應(yīng)為浮點數(shù)組,其大小為number??of??testdata×number??of??features×number of features。然后找到新加入的最近鄰。可以指定我們想要多少個鄰居k(這里設(shè)置為3)。它返回:

  • 給新樣本的標簽取決于kNN理論。如果要使用“最近鄰居”算法,只需指定k=1即可,其中k是鄰居數(shù)
  • k最近鄰的標簽
  • 與新鄰居的新距離相應(yīng)的距離

下面看看它是如何工作的,新樣本被標記為綠色。

# Feature set containing (x,y) values of 25 known/training data
trainData = np.random.randint(0, 100, (25, 2)).astype(np.float32)
# Label each one either Red or Blue with numbers 0 and 1
responses = np.random.randint(0, 2, (25, 1)).astype(np.float32)
# Take Red neighbours and plot them
red = trainData[responses.ravel()==0]
plt.scatter(red[:, 0], red[:, 1], 80, 'r', '^')
# Take Blue neighbours and plot them
blue = trainData[responses.ravel()==1]
plt.scatter(blue[:, 0], blue[:, 1], 80, 'b', 's')
newcomer = np.random.randint(0, 100, (1, 2)).astype(np.float32)
plt.scatter(newcomer[:, 0], newcomer[:, 1], 80, 'g', 'o')
knn = cv2.ml.KNearest_create()
knn.train(trainData, cv2.ml.ROW_SAMPLE, responses)
ret, results, neighbours, dist = knn.findNearest(newcomer, 3)
print("result: {}\n".format(results))
print("neighbours: {}\n".format(neighbours))
print("distance: {}\n".format(dist))
plt.show()

得到了如下的結(jié)果:

它說我們的新樣本有3個近鄰,一個來自Red家族,另外兩個來自Blue家族。因此,他被標記為藍色家庭。

如果有大量數(shù)據(jù),則可以將其作為數(shù)組傳遞。獲得的相應(yīng)的結(jié)果是以數(shù)組的形式出現(xiàn)。

# Feature set containing (x,y) values of 25 known/training data
trainData = np.random.randint(0, 100, (25, 2)).astype(np.float32)
# Label each one either Red or Blue with numbers 0 and 1
responses = np.random.randint(0, 2, (25, 1)).astype(np.float32)
# Take Red neighbours and plot them
red = trainData[responses.ravel()==0]
plt.scatter(red[:, 0], red[:, 1], 80, 'r', '^')
# Take Blue neighbours and plot them
blue = trainData[responses.ravel()==1]
plt.scatter(blue[:, 0], blue[:, 1], 80, 'b', 's')
# newcomer = np.random.randint(0, 100, (1, 2)).astype(np.float32)
newcomers = np.random.randint(0,100,(10,2)).astype(np.float32)  # 10 new-comers
plt.scatter(newcomers[:, 0], newcomers[:, 1], 80, 'g', 'o')
knn = cv2.ml.KNearest_create()
knn.train(trainData, cv2.ml.ROW_SAMPLE, responses)
ret, results, neighbours, dist = knn.findNearest(newcomers, 3)  # The results also will contain 10 labels.
plt.show()
print("result: {}\n".format(results))
print("neighbours: {}\n".format(neighbours))
print("distance: {}\n".format(dist))

附加資源

以上就是OpenCV之理解KNN k-Nearest Neighbour的詳細內(nèi)容,更多關(guān)于OpenCV理解KNN的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python中編寫config文件并及時更新的方法

    python中編寫config文件并及時更新的方法

    在pytorch或者其他深度學(xué)習框架中,有許多超參數(shù)需要調(diào)整,包括learning_rate,training_data_path等,因此編寫一個config文件統(tǒng)一存放這些參數(shù),方便調(diào)用/查看/修改還是很有必要,這篇文章主要介紹了python中一種編寫config文件并及時更新的方法,需要的朋友可以參考下
    2023-02-02
  • Python實現(xiàn)檢測服務(wù)器是否可以ping通的2種方法

    Python實現(xiàn)檢測服務(wù)器是否可以ping通的2種方法

    這篇文章主要介紹了Python實現(xiàn)檢測服務(wù)器是否可以ping通的2種方法,本文分別講解了使用ping和fping命令檢測服務(wù)器是否可以ping通,需要的朋友可以參考下
    2015-01-01
  • Python 專題六 局部變量、全局變量global、導(dǎo)入模塊變量

    Python 專題六 局部變量、全局變量global、導(dǎo)入模塊變量

    本文主要講述python全局變量、局部變量和導(dǎo)入模塊變量的方法。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-03-03
  • Python 實現(xiàn)淘寶秒殺的示例代碼

    Python 實現(xiàn)淘寶秒殺的示例代碼

    本篇文章主要介紹了Python 實現(xiàn)淘寶秒殺的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • OpenCV視頻流Python多線程處理方法詳細分析

    OpenCV視頻流Python多線程處理方法詳細分析

    為OpenCV是搞計算機視覺必須要掌握的基礎(chǔ),這篇文章主要給大家介紹了關(guān)于OpenCV視頻流多線程處理的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-11-11
  • 在python中實現(xiàn)同行輸入/接收多個數(shù)據(jù)的示例

    在python中實現(xiàn)同行輸入/接收多個數(shù)據(jù)的示例

    今天小編就為大家分享一篇在python中實現(xiàn)同行輸入/接收多個數(shù)據(jù)的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • PYTHON 中使用 GLOBAL引發(fā)的一系列問題

    PYTHON 中使用 GLOBAL引發(fā)的一系列問題

    這篇文章主要介紹了PYTHON 中使用 GLOBAL引發(fā)的一系列問題的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • Python pyside6編寫一個廣告圖片生成器

    Python pyside6編寫一個廣告圖片生成器

    這篇文章主要為大家詳細介紹了Python如何使用pyside6編寫一個廣告圖片生成器,可以快速制作包含產(chǎn)品圖片和文字的廣告圖片,需要的可以參考下
    2025-01-01
  • Python常用編譯器原理及特點解析

    Python常用編譯器原理及特點解析

    這篇文章主要介紹了Python常用編譯器原理及特點解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下
    2020-03-03
  • Python爬蟲DOTA排行榜爬取實例(分享)

    Python爬蟲DOTA排行榜爬取實例(分享)

    下面小編就為大家?guī)硪黄狿ython爬蟲DOTA排行榜爬取實例(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06

最新評論