最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

目標

在本章中,將理解

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

理論

kNN是可用于監(jiān)督學習的最簡單的分類算法之一。這個想法是在特征空間中搜索測試數(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)建了一個新房屋,顯示為綠色圓圈。它應該被添加到這些藍色/紅色家族之一中。稱該過程為分類(Classification)。這個新會員應該如何分類?本文使用kNN算法解決上述問題。

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

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

OpenCV中的kNN

就像上面一樣,將在這里做一個簡單的例子,有兩個族(類)。 因此,在這里,將紅色系列標記為Class-0(用0表示),將藍色系列標記為Class-1(用1表示)。創(chuàng)建25個族或25個訓練數(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和響應以訓練kNN(它會構建搜索樹)。 然后,將在OpenCV中的kNN的幫助下將一個新樣本進行分類。在進入kNN之 前,需要了解測試數(shù)據(jù)(新樣本數(shù)據(jù))上的知識。數(shù)據(jù)應為浮點數(shù)組,其大小為number??of??testdata×number??of??features×number of features。然后找到新加入的最近鄰。可以指定我們想要多少個鄰居k(這里設置為3)。它返回:

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

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

# 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()

得到了如下的結果:

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

如果有大量數(shù)據(jù),則可以將其作為數(shù)組傳遞。獲得的相應的結果是以數(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的詳細內容,更多關于OpenCV理解KNN的資料請關注腳本之家其它相關文章!

相關文章

  • Python使用SQLAlchemy進行復雜查詢的操作代碼

    Python使用SQLAlchemy進行復雜查詢的操作代碼

    SQLAlchemy 是 Python 生態(tài)系統(tǒng)中非常流行的數(shù)據(jù)庫處理庫,它提供了一種高效、簡潔的方式與數(shù)據(jù)庫進行交互,在數(shù)據(jù)驅動的應用程序中,復雜查詢是必不可少的,本文將通過一些常見的示例介紹如何使用 SQLAlchemy 編寫復雜查詢,需要的朋友可以參考下
    2024-10-10
  • python爬取NUS-WIDE數(shù)據(jù)庫圖片

    python爬取NUS-WIDE數(shù)據(jù)庫圖片

    本文給大家分享的是使用Python制作爬蟲爬取圖片的小程序,非常的簡單,但是很實用,有需要的小伙伴可以參考下
    2016-10-10
  • Python文件讀寫處理日常任務終極工具實例

    Python文件讀寫處理日常任務終極工具實例

    Python文件的讀寫操作時,有很多需要考慮的細節(jié),這包括文件打開方式、讀取和寫入數(shù)據(jù)的方法、異常處理等,在本文中,將深入探討Python中的文件操作,旨在提供全面的指南,幫你充分了解Python文件的讀寫
    2023-11-11
  • Django如何實現(xiàn)網(wǎng)站注冊用戶郵箱驗證功能

    Django如何實現(xiàn)網(wǎng)站注冊用戶郵箱驗證功能

    這篇文章主要介紹了Django如何實現(xiàn)網(wǎng)站注冊用戶郵箱驗證功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • Django模板繼承與模板的導入實例詳解

    Django模板繼承與模板的導入實例詳解

    模板繼承主要是為了提高代碼重用,減輕開發(fā)人員的工作量,下面這篇文章主要給大家介紹了關于Django模板繼承與模板導入的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-03-03
  • 使用python在校內發(fā)人人網(wǎng)狀態(tài)(人人網(wǎng)看狀態(tài))

    使用python在校內發(fā)人人網(wǎng)狀態(tài)(人人網(wǎng)看狀態(tài))

    人人網(wǎng)怎么發(fā)狀態(tài)?下面使用python實現(xiàn)這個功能,大家參考使用吧
    2014-02-02
  • 對Python中type打開文件的方式介紹

    對Python中type打開文件的方式介紹

    下面小編就為大家介紹一下對Python中type打開文件的方式。具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python繪制土地利用和土地覆蓋類型圖示例詳解

    Python繪制土地利用和土地覆蓋類型圖示例詳解

    本文介紹了如何使用Python繪制土地利用和土地覆蓋類型圖,并提供了詳細的代碼示例,通過安裝所需的庫,準備地理數(shù)據(jù),使用geopandas和matplotlib等庫,可以繪制出土地利用和覆蓋類型圖,感興趣的朋友一起看看吧
    2025-01-01
  • Python實現(xiàn)使用dir獲取類的方法列表

    Python實現(xiàn)使用dir獲取類的方法列表

    今天小編就為大家分享一篇Python實現(xiàn)使用dir獲取類的方法列表,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python?FastApi結合異步執(zhí)行方式

    Python?FastApi結合異步執(zhí)行方式

    這篇文章主要介紹了Python?FastApi結合異步執(zhí)行方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06

最新評論

清远市| 阳春市| 师宗县| 新野县| 拜泉县| 金乡县| 山丹县| 公主岭市| 黎平县| 玛曲县| 静宁县| 竹北市| 杂多县| 白山市| 五原县| 湖州市| 青冈县| 鄂托克前旗| 忻州市| 武平县| 庆云县| 阜南县| 朝阳市| 福安市| 和林格尔县| 南漳县| 寿光市| 云霄县| 中超| 米易县| 治县。| 三门县| 马鞍山市| 上杭县| 那坡县| 通城县| 汾阳市| 顺平县| 清新县| 友谊县| 黄梅县|