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

python中opencv支持向量機(jī)的實(shí)現(xiàn)

 更新時(shí)間:2022年03月10日 16:13:53   作者:暴風(fēng)雨中的白楊  
本文主要介紹了python中opencv支持向量機(jī)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

支持向量機(jī)

支持向量機(jī)(Support Vector Machine, SVM)是一種二分類(lèi)模型,目標(biāo)是尋找一個(gè)標(biāo)準(zhǔn)(稱(chēng)為超平面)對(duì)樣本數(shù)據(jù)進(jìn)行分割,分割的原則是確保分類(lèi)最優(yōu)化(類(lèi)別之間的間隔最大)。

當(dāng)數(shù)據(jù)集較小時(shí),使用支持向量機(jī)進(jìn)行分類(lèi)非常有效。

支持向量機(jī)是最好的現(xiàn)成分類(lèi)器之一,“現(xiàn)成”是指分類(lèi)器不加修改即可直接使用。

在對(duì)原始數(shù)據(jù)分類(lèi)的過(guò)程中,可能無(wú)法使用線(xiàn)性方法實(shí)現(xiàn)分割。支持向量機(jī)在分類(lèi)時(shí),把無(wú)法線(xiàn)性分割的數(shù)據(jù)映射到高維空間,然后在高維空間找到分類(lèi)最優(yōu)的線(xiàn)性分類(lèi)器。

Python支持向量機(jī)的庫(kù): sk-learn , LIBSVM等

OpenCV也提供了對(duì)支持向量機(jī)的支持

理論基礎(chǔ)

用于劃分不同類(lèi)別的直線(xiàn),就是分類(lèi)器。

構(gòu)造分類(lèi)器時(shí),非常重要的一項(xiàng)工作就是找到最優(yōu)分類(lèi)器。

找到支持向量機(jī):在已有數(shù)據(jù)中,找到離分類(lèi)器最近的點(diǎn),確保它們離分類(lèi)器盡可能地遠(yuǎn)。

離分類(lèi)器最近的點(diǎn)到分類(lèi)器的距離稱(chēng)為間隔(margin)。希望間隔盡可能地大,這樣分類(lèi)器在處理數(shù)據(jù)時(shí),就會(huì)更準(zhǔn)確。

離分類(lèi)器最近的那些點(diǎn)叫作支持向量(support vector)。 決定了分類(lèi)器所在的位置。

將不可分變?yōu)榭煞?/p>

支持向量機(jī)會(huì)將不那么容易分類(lèi)的數(shù)據(jù)通過(guò)函數(shù)映射變?yōu)榭煞诸?lèi)的。

支持向量機(jī)在處理數(shù)據(jù)時(shí),如果在低維空間內(nèi)無(wú)法完成分類(lèi),就會(huì)自動(dòng)將數(shù)據(jù)映射到高維空間,使其變?yōu)椋ň€(xiàn)性)可分的。簡(jiǎn)單地講,就是對(duì)當(dāng)前數(shù)據(jù)進(jìn)行函數(shù)映射操作。

例如: 在分類(lèi)時(shí),通過(guò)函數(shù)f的映射,讓左圖中本來(lái)不能用線(xiàn)性分類(lèi)器分類(lèi)的數(shù)據(jù)變?yōu)橛覉D中線(xiàn)性可分的數(shù)據(jù)。

同時(shí): 支持向量機(jī)能夠通過(guò)核函數(shù)有效地降低計(jì)算復(fù)雜度。

實(shí)際上支持向量機(jī)可以處理任何維度的數(shù)據(jù)。在不同的維度下,支持向量機(jī)都會(huì)盡可能尋找類(lèi)似于二維空間中的直線(xiàn)的線(xiàn)性分類(lèi)器。

例如,在二維空間,支持向量機(jī)會(huì)尋找一條能夠劃分當(dāng)前數(shù)據(jù)的直線(xiàn);在三維空間,支持向量機(jī)會(huì)尋找一個(gè)能夠劃分當(dāng)前數(shù)據(jù)的平面(plane);在更高維的空間,支持向量機(jī)會(huì)嘗試尋找一個(gè)能夠劃分當(dāng)前數(shù)據(jù)的超平面(hyperplane)。

一般情況下,把能夠可以被一條直線(xiàn)(更一般的情況,即一個(gè)超平面)分割的數(shù)據(jù)稱(chēng)為線(xiàn)性可分的數(shù)據(jù),所以超平面是線(xiàn)性分類(lèi)器。

“支持向量機(jī)”是由“支持向量”和“機(jī)器”構(gòu)成的。

  • “支持向量”是離分類(lèi)器最近的那些點(diǎn),這些點(diǎn)位于最大“間隔”上。通常情況下,分類(lèi)僅依靠這些點(diǎn)完成,而與其他點(diǎn)無(wú)關(guān)。
  • “機(jī)器”指的是分類(lèi)器。

支持向量機(jī)是一種基于關(guān)鍵點(diǎn)的分類(lèi)算法。

SVM使用介紹

在使用支持向量機(jī)模塊時(shí),需要先使用函數(shù)cv2.ml.SVM_create()生成用于后續(xù)訓(xùn)練的空分類(lèi)器模型。

語(yǔ)法格式:

svm = cv2.ml.SVM_create()

獲取了空分類(lèi)器svm后,針對(duì)該模型使用svm.train()函數(shù)對(duì)訓(xùn)練數(shù)據(jù)進(jìn)行訓(xùn)練

語(yǔ)法格式

訓(xùn)練結(jié)果= svm.train(訓(xùn)練數(shù)據(jù),訓(xùn)練數(shù)據(jù)排列格式,訓(xùn)練數(shù)據(jù)的標(biāo)簽) 
  • 訓(xùn)練數(shù)據(jù):表示原始數(shù)據(jù),用來(lái)訓(xùn)練分類(lèi)器。
  • 訓(xùn)練數(shù)據(jù)排列格式:原始數(shù)據(jù)的排列形式有按行排列(cv2.ml.ROW_SAMPLE,每一條訓(xùn)練數(shù)據(jù)占一行)和按列排列(cv2.ml.COL_SAMPLE,每一條訓(xùn)練數(shù)據(jù)占一列)兩種形式
  • 訓(xùn)練數(shù)據(jù)的標(biāo)簽:原始數(shù)據(jù)的標(biāo)簽。
  • 訓(xùn)練結(jié)果:訓(xùn)練結(jié)果的返回值。

例如: 用于訓(xùn)練的數(shù)據(jù)為data,其對(duì)應(yīng)的標(biāo)簽為label,每一條數(shù)據(jù)按行排列,對(duì)分類(lèi)器模型svm進(jìn)行訓(xùn)練,所使用的語(yǔ)句為:

返回值 = svm.train(data, cv2.ml.ROW_SAMPLE, label) 

完成對(duì)分類(lèi)器的訓(xùn)練后,使用svm.predict()函數(shù)即可使用訓(xùn)練好的分類(lèi)器模型對(duì)測(cè)試數(shù)據(jù)進(jìn)行分類(lèi),其語(yǔ)法格式為:

(返回值,返回結(jié)果) = svm.predict(測(cè)試數(shù)據(jù)) 

OpenCV支持對(duì)多個(gè)參數(shù)的自定義,例如:可以通過(guò)setType()函數(shù)設(shè)置類(lèi)別,通過(guò)setKernel()函數(shù)設(shè)置核類(lèi)型,通過(guò)setC()函數(shù)設(shè)置支持向量機(jī)的參數(shù)C ( 懲罰系數(shù),即對(duì)誤差的寬容度,默認(rèn)值為0 )。

例子介紹

題目: 已知員工的筆試成績(jī)、面試成績(jī)及對(duì)應(yīng)的等級(jí)表現(xiàn),根據(jù)新入職員工的筆試成績(jī)、面試成績(jī)預(yù)測(cè)其可能的表現(xiàn)。

首先構(gòu)造一組隨機(jī)數(shù),并將其劃分為兩類(lèi),然后使用OpenCV自帶的支持向量機(jī)模塊完成訓(xùn)練和分類(lèi)工作,最后將運(yùn)算結(jié)果顯示出來(lái)。

具體步驟:

  • 生成模擬數(shù)據(jù)

    模擬生成入職一年后表現(xiàn)為A級(jí)的員工入職時(shí)的筆試和面試成績(jī)。

    構(gòu)造20組筆試和面試成績(jī)都分布在[95, 100)區(qū)間的數(shù)據(jù)對(duì):

    a = np.random.randint(95,100, (20, 2)).astype(np.float32) 

    上述模擬成績(jī),在一年后對(duì)應(yīng)的工作表現(xiàn)為A級(jí)。

    模擬生成入職一年后表現(xiàn)為B級(jí)的員工入職時(shí)的筆試和面試成績(jī)。

    構(gòu)造20組筆試和面試成績(jī)都分布在[90, 95)區(qū)間的數(shù)據(jù)對(duì):

    b = np.random.randint(90,95, (20, 2)).astype(np.float32) 

    上述模擬成績(jī),在一年后對(duì)應(yīng)的工作表現(xiàn)為B級(jí)。

    最后,將兩組數(shù)據(jù)合并,并使用numpy.array對(duì)其進(jìn)行類(lèi)型轉(zhuǎn)換:

    data = np.vstack((a, b)) 
    data = np.array(data, dtype='float32')     
  • 構(gòu)造分組標(biāo)簽

    為對(duì)應(yīng)表現(xiàn)為A級(jí)的分布在[95, 100)區(qū)間的數(shù)據(jù),構(gòu)造標(biāo)簽“0”:

    aLabel=np.zeros((20,1)) 

    為對(duì)應(yīng)表現(xiàn)為B級(jí)的分布在[90, 95)區(qū)間的數(shù)據(jù),構(gòu)造標(biāo)簽“1”:

    bLabel=np.ones((20,1)) 

    將上述標(biāo)簽合并,并使用numpy.array對(duì)其進(jìn)行類(lèi)型轉(zhuǎn)換:

    label = np.vstack((aLabel, bLabel)) 
    label = np.array(label, dtype='int32') 
  • 訓(xùn)練

    用支持向量機(jī)模塊對(duì)已知的數(shù)據(jù)和其對(duì)應(yīng)的標(biāo)簽進(jìn)行訓(xùn)練:

    svm = cv2.ml.SVM_create() 
    result = svm.train(data, cv2.ml.ROW_SAMPLE, label) 
  • 分類(lèi)

    生成兩個(gè)隨機(jī)的數(shù)據(jù)對(duì)(筆試成績(jī),面試成績(jī))用于測(cè)試。

    test = np.vstack([[98,90], [90,99]]) 
    test = np.array(test, dtype='float32') 

    使用函數(shù)svm.predict()對(duì)隨機(jī)成績(jī)分類(lèi):

    (p1, p2) = svm.predict(test) 
  • 顯示分類(lèi)結(jié)果

    將基礎(chǔ)數(shù)據(jù)(訓(xùn)練數(shù)據(jù))、用于測(cè)試的數(shù)據(jù)(測(cè)試數(shù)據(jù))在圖像上顯示出來(lái):

    plt.scatter(a[:,0], a[:,1], 80, 'g', 'o') 
    plt.scatter(b[:,0], b[:,1], 80, 'b', 's') 
    plt.scatter(test[:,0], test[:,1], 80, 'r', '*') 
    plt.show() 

    將測(cè)試數(shù)據(jù)及預(yù)測(cè)分類(lèi)結(jié)果顯示出來(lái):

    print(test) 
    print(p2)

完整程序

import cv2 
import numpy as np 
import matplotlib.pyplot as plt 
# 準(zhǔn)備數(shù)據(jù) 
a = np.random.randint(95,100, (20, 2)).astype(np.float32) 
b = np.random.randint(90,95, (20, 2)).astype(np.float32) 
data = np.vstack((a, b)) 
data = np.array(data, dtype='float32') 
    
# 建立分組標(biāo)簽,0代表A級(jí),1代表B級(jí) 
aLabel=np.zeros((20,1)) 
bLabel=np.ones((20,1)) 
label = np.vstack((aLabel, bLabel)) 
label = np.array(label, dtype='int32') 
    
# 訓(xùn)練 
svm = cv2.ml.SVM_create() 
# 屬性設(shè)置,直接采用默認(rèn)值即可 
#svm.setType(cv2.ml.SVM_C_SVC)    # svm type 
#svm.setKernel(cv2.ml.SVM_LINEAR) # line 
#svm.setC(0.01) 
result = svm.train(data, cv2.ml.ROW_SAMPLE, label) 
    
#預(yù)測(cè) 
test = np.vstack([[98,90], [90,99]]) 
test = np.array(test, dtype='float32') 
(p1, p2) = svm.predict(test)   # test 是 [[數(shù)據(jù)1],[數(shù)據(jù)2]] 結(jié)構(gòu)的
   
# 結(jié)果 
print(test)
print("res1",p2[0])
print("res2",p2[1]) 
plt.scatter(a[:,0], a[:,1], 80, 'g', 'o') 
plt.scatter(b[:,0], b[:,1], 80, 'b', 's') 
plt.scatter(test[:,0], test[:,1], 80, 'r', '*') 
plt.show() 

到此這篇關(guān)于python中opencv支持向量機(jī)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)opencv 向量機(jī)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mac安裝python3后使用pip和pip3的區(qū)別說(shuō)明

    mac安裝python3后使用pip和pip3的區(qū)別說(shuō)明

    這篇文章主要介紹了mac安裝python3后使用pip和pip3的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • Python configparser模塊常用方法解析

    Python configparser模塊常用方法解析

    這篇文章主要介紹了Python configparser模塊常用方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • python抖音表白程序源代碼

    python抖音表白程序源代碼

    這篇文章主要為大家詳細(xì)介紹了python抖音表白程序源代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • python async with和async for的使用

    python async with和async for的使用

    這篇文章主要介紹了python async with和async for的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Django haystack實(shí)現(xiàn)全文搜索代碼示例

    Django haystack實(shí)現(xiàn)全文搜索代碼示例

    這篇文章主要介紹了Django haystack實(shí)現(xiàn)全文搜索代碼示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Python運(yùn)算符重載用法實(shí)例

    Python運(yùn)算符重載用法實(shí)例

    這篇文章主要介紹了Python運(yùn)算符重載用法,實(shí)例分析了Python運(yùn)算符重載實(shí)現(xiàn)加法運(yùn)算的技巧,需要的朋友可以參考下
    2015-05-05
  • Python切換pip安裝源的方法詳解

    Python切換pip安裝源的方法詳解

    眾所周知pip是Python中非常方便易用的安裝包管理器,但是在實(shí)際安裝中,卻是非常的慢,該如何解決呢?那么下面這篇文章就給大家介紹了Python切換pip安裝源的方法,文中介紹的很詳細(xì),對(duì)大家學(xué)習(xí)或者理解具有一定的參考借鑒價(jià)值,有需要的朋友們下面來(lái)一起看看吧。
    2016-11-11
  • python數(shù)組循環(huán)處理方法

    python數(shù)組循環(huán)處理方法

    今天小編就為大家分享一篇python數(shù)組循環(huán)處理方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • python?numpy庫(kù)之如何使用matpotlib庫(kù)繪圖

    python?numpy庫(kù)之如何使用matpotlib庫(kù)繪圖

    Numpy的主要對(duì)象是同構(gòu)多維數(shù)組,它是一個(gè)元素表,所有類(lèi)型都相同,由非負(fù)整數(shù)元組索引,在Numpy維度中稱(chēng)為軸,這篇文章主要介紹了python?numpy庫(kù)?使用matpotlib庫(kù)繪圖,需要的朋友可以參考下
    2022-10-10
  • python繼承和抽象類(lèi)的實(shí)現(xiàn)方法

    python繼承和抽象類(lèi)的實(shí)現(xiàn)方法

    這篇文章主要介紹了python繼承和抽象類(lèi)的實(shí)現(xiàn)方法,實(shí)例分析了Python針對(duì)類(lèi)的繼承及抽象類(lèi)的定義及使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-01-01

最新評(píng)論