国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

機器學(xué)習(xí)實戰(zhàn)-SVM模型實現(xiàn)人臉識別

這篇具有很好參考價值的文章主要介紹了機器學(xué)習(xí)實戰(zhàn)-SVM模型實現(xiàn)人臉識別。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

SVM建模進行人臉識別案例

1、導(dǎo)包

首先進行導(dǎo)包

from sklearn.decomposition import PCA
import numpy as np
from sklearn.svm import SVC
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.decomposition import PCA
from sklearn.metrics import accuracy_score
from sklearn.linear_model import LogisticRegression
from sklearn import datasets
from sklearn.model_selection import GridSearchCV

2、加載數(shù)據(jù)集

我們加載sklearn已經(jīng)幫我們收集好的人臉數(shù)據(jù)

# 加載人臉數(shù)據(jù) lfw->labled faces wild:野外標記的人臉
data = datasets.fetch_lfw_people(resize = 1, min_faces_per_person = 70)
data

查看結(jié)果:

svm定位人臉,機器學(xué)習(xí),機器學(xué)習(xí),支持向量機,sklearn,人工智能,python

我們?nèi)〕銎渲械臄?shù)據(jù)進行查看:

X = data['data']
y = data['target']
faces = data['images']
target_names = data['target_names']
display(X.shape,y.shape,faces.shape,target_names)

運行結(jié)果:

svm定位人臉,機器學(xué)習(xí),機器學(xué)習(xí),支持向量機,sklearn,人工智能,python

我們隨機選取一個人的圖片并通過索引獲取名字:

# 隨機取出一個人臉
index = np.random.randint(0,1288,size = 1)[0]
face = faces[index]
name = y[index] # 根據(jù)索引獲取名字
print(target_names[name])
display(face.shape)
plt.imshow(face, cmap = 'gray')

結(jié)果展示:

svm定位人臉,機器學(xué)習(xí),機器學(xué)習(xí),支持向量機,sklearn,人工智能,python

3、直接使用SVM模型建模

由于原來的數(shù)據(jù)很大,而且數(shù)據(jù)量多,我們首先對原始數(shù)據(jù)進行PCA降維

%%time
# 進行數(shù)據(jù)的降維
pca = PCA(n_components=0.95)
X_pca = pca.fit_transform(X)
display(X.shape,X_pca.shape)

結(jié)果展示:

svm定位人臉,機器學(xué)習(xí),機器學(xué)習(xí),支持向量機,sklearn,人工智能,python

然后對降維后的數(shù)據(jù)集進行訓(xùn)練和預(yù)測結(jié)果:

其中的C代表的是懲罰系數(shù),用來防止過擬合,我們先用默認的初始值測試下性能

%%time
# 降維之后的數(shù)據(jù)
X_train,X_test,y_train,y_test, faces_train,faces_test = train_test_split(X_pca,y,faces)
# C為懲罰項,越大,容忍錯誤越小
# C越大,趨勢:想方設(shè)發(fā),把數(shù)據(jù)分開,容易造成過擬合
svc = SVC(C = 1) 
svc.fit(X_train,y_train)
# 訓(xùn)練數(shù)據(jù)效果很好,測試數(shù)據(jù)效果不好就是過擬合現(xiàn)象
print('訓(xùn)練數(shù)據(jù)的得分:',svc.score(X_train,y_train))
print('測試數(shù)據(jù)的得分:',svc.score(X_test,y_test))
# 算法的預(yù)測值
y_pred = svc.predict(X_test)

結(jié)果展示:

svm定位人臉,機器學(xué)習(xí),機器學(xué)習(xí),支持向量機,sklearn,人工智能,python

4、數(shù)據(jù)可視化

然后我們隨機加載50張圖片,并可視化查看預(yù)測結(jié)果:

plt.figure(figsize=(5 * 2, 10 * 3))
for i in range(50):
    plt.subplot(10,5,i + 1) # 子視圖
    plt.imshow(faces_test[i],cmap = 'gray')
    plt.axis('off') # 刻度關(guān)閉
    # 貼上標簽,并且對比實際數(shù)據(jù)和預(yù)測數(shù)據(jù)
    true_name = target_names[y_test[i]].split(' ')[-1]
    predict_name = target_names[y_pred[i]].split(' ')[-1]
    plt.title(f'True:{true_name}\nPred:{predict_name}')

結(jié)果展示:

svm定位人臉,機器學(xué)習(xí),機器學(xué)習(xí),支持向量機,sklearn,人工智能,python
svm定位人臉,機器學(xué)習(xí),機器學(xué)習(xí),支持向量機,sklearn,人工智能,python
svm定位人臉,機器學(xué)習(xí),機器學(xué)習(xí),支持向量機,sklearn,人工智能,python

從結(jié)果來看,預(yù)測效果并不是很好,紅色框選出來的都是預(yù)測錯誤的名字,因此我們不得不對原來的性能優(yōu)化。

5、網(wǎng)絡(luò)搜索優(yōu)化確定最佳性能

sklearn為我們集成好了網(wǎng)絡(luò)搜索確定最佳性能的方法,只要吧要傳進的參數(shù)填進去,它會為我們自動搭配獲得最優(yōu)參數(shù)。

%%time
svc = SVC()
# C為懲罰系數(shù)(防止過擬合),kernel為核函數(shù)類型,tol為停止訓(xùn)練的誤差值、精度
params = {'C':np.logspace(-10,10,50),'kernel':['linear', 'poly', 'rbf', 'sigmoid'],'tol':[0.01,0.001,0.0001]}
gc = GridSearchCV(estimator = svc,param_grid = params,cv = 5)
gc.fit(X_pca,y)
gc.best_params_

結(jié)果展示:

svm定位人臉,機器學(xué)習(xí),機器學(xué)習(xí),支持向量機,sklearn,人工智能,python

6、使用最佳性能SVM建模

從上面的結(jié)果來看,獲得的最優(yōu)懲罰系數(shù)C為1.8420699693267165e-07,最優(yōu)核函數(shù)類型是linear線性模型,最優(yōu)精度為0.001.

基于上面的最優(yōu)參數(shù),對SVM進行優(yōu)化建模

svc = SVC(C = 1.8420699693267165e-07,kernel='linear',tol = 0.001)
# 隨機劃分的
X_pca_train,X_pca_test,y_train,y_test, faces_train,faces_test = train_test_split(X_pca,y,faces)
svc.fit(X_pca_train,y_train)
print('訓(xùn)練數(shù)據(jù)得分:',svc.score(X_pca_train,y_train))
print('測試數(shù)據(jù)的得分:',svc.score(X_pca_test,y_test))

結(jié)果展示:

svm定位人臉,機器學(xué)習(xí),機器學(xué)習(xí),支持向量機,sklearn,人工智能,python

從這個結(jié)果來看,相比于普通的SVM建模,優(yōu)化后的SVM在得分上明顯有提高。

7、優(yōu)化后的數(shù)據(jù)可視化

plt.figure(figsize=(5 * 2, 10 * 3))
for i in range(50):
    plt.subplot(10,5,i + 1) # 子視圖
    plt.imshow(faces_test[i],cmap = 'gray')
    plt.axis('off') # 刻度關(guān)閉
    # 貼上標簽,并且對比實際數(shù)據(jù)和預(yù)測數(shù)據(jù)
    true_name = target_names[y_test[i]].split(' ')[-1]
    predict_name = target_names[y_pred[i]].split(' ')[-1]
    plt.title(f'True:{true_name}\nPred:{predict_name}')

結(jié)果展示:

svm定位人臉,機器學(xué)習(xí),機器學(xué)習(xí),支持向量機,sklearn,人工智能,python
svm定位人臉,機器學(xué)習(xí),機器學(xué)習(xí),支持向量機,sklearn,人工智能,python
svm定位人臉,機器學(xué)習(xí),機器學(xué)習(xí),支持向量機,sklearn,人工智能,python
svm定位人臉,機器學(xué)習(xí),機器學(xué)習(xí),支持向量機,sklearn,人工智能,python

從優(yōu)化后的結(jié)果來看,雖然還是有分錯的結(jié)果,但是準確率較原來的準確率提高了很多。文章來源地址http://www.zghlxwxcb.cn/news/detail-763233.html

8、完整代碼

8.1未優(yōu)化的完整代碼

from sklearn.decomposition import PCA
import numpy as np
from sklearn.svm import SVC
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.decomposition import PCA
from sklearn.metrics import accuracy_score
from sklearn.linear_model import LogisticRegression
from sklearn import datasets
from sklearn.model_selection import GridSearchCV

# 加載人臉數(shù)據(jù) lfw->labled faces wild:野外標記的人臉
data = datasets.fetch_lfw_people(resize = 1, min_faces_per_person = 70)
data

# 進行數(shù)據(jù)的降維
pca = PCA(n_components=0.95)
X_pca = pca.fit_transform(X)
display(X.shape,X_pca.shape)

# 降維之后的數(shù)據(jù)
X_train,X_test,y_train,y_test, faces_train,faces_test = train_test_split(X_pca,y,faces)
# C為懲罰項,越大,容忍錯誤越小
# C越大,趨勢:想方設(shè)發(fā),把數(shù)據(jù)分開,容易造成過擬合
svc = SVC(C = 1) 
svc.fit(X_train,y_train)
# 訓(xùn)練數(shù)據(jù)效果很好,測試數(shù)據(jù)效果不好就是過擬合現(xiàn)象
print('訓(xùn)練數(shù)據(jù)的得分:',svc.score(X_train,y_train))
print('測試數(shù)據(jù)的得分:',svc.score(X_test,y_test))
# 算法的預(yù)測值
y_pred = svc.predict(X_test)

plt.figure(figsize=(5 * 2, 10 * 3))
for i in range(50):
    plt.subplot(10,5,i + 1) # 子視圖
    plt.imshow(faces_test[i],cmap = 'gray')
    plt.axis('off') # 刻度關(guān)閉
    # 貼上標簽,并且對比實際數(shù)據(jù)和預(yù)測數(shù)據(jù)
    true_name = target_names[y_test[i]].split(' ')[-1]
    predict_name = target_names[y_pred[i]].split(' ')[-1]
    plt.title(f'True:{true_name}\nPred:{predict_name}')

8.2優(yōu)化后的完整代碼

from sklearn.decomposition import PCA
import numpy as np
from sklearn.svm import SVC
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.decomposition import PCA
from sklearn.metrics import accuracy_score
from sklearn.linear_model import LogisticRegression
from sklearn import datasets
from sklearn.model_selection import GridSearchCV

# 加載人臉數(shù)據(jù) lfw->labled faces wild:野外標記的人臉
data = datasets.fetch_lfw_people(resize = 1, min_faces_per_person = 70)
data

# 進行數(shù)據(jù)的降維
pca = PCA(n_components=0.95)
X_pca = pca.fit_transform(X)
display(X.shape,X_pca.shape)

svc = SVC()
# C為懲罰系數(shù)(防止過擬合),kernel為核函數(shù)類型,tol為停止訓(xùn)練的誤差值、精度
params = {'C':np.logspace(-10,10,50),'kernel':['linear', 'poly', 'rbf', 'sigmoid'],'tol':[0.01,0.001,0.0001]}
gc = GridSearchCV(estimator = svc,param_grid = params,cv = 5)
gc.fit(X_pca,y)
gc.best_params_

svc = SVC(C = 1.8420699693267165e-07,kernel='linear',tol = 0.001)
# 隨機劃分的
X_pca_train,X_pca_test,y_train,y_test, faces_train,faces_test = train_test_split(X_pca,y,faces)
svc.fit(X_pca_train,y_train)
print('訓(xùn)練數(shù)據(jù)得分:',svc.score(X_pca_train,y_train))
print('測試數(shù)據(jù)的得分:',svc.score(X_pca_test,y_test))

plt.figure(figsize=(5 * 2, 10 * 3))
for i in range(50):
    plt.subplot(10,5,i + 1) # 子視圖
    plt.imshow(faces_test[i],cmap = 'gray')
    plt.axis('off') # 刻度關(guān)閉
    # 貼上標簽,并且對比實際數(shù)據(jù)和預(yù)測數(shù)據(jù)
    true_name = target_names[y_test[i]].split(' ')[-1]
    predict_name = target_names[y_pred[i]].split(' ')[-1]
    plt.title(f'True:{true_name}\nPred:{predict_name}')

到了這里,關(guān)于機器學(xué)習(xí)實戰(zhàn)-SVM模型實現(xiàn)人臉識別的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【機器學(xué)習(xí)】SVM支持向量機模型

    【機器學(xué)習(xí)】SVM支持向量機模型

    ?本站原創(chuàng)文章,轉(zhuǎn)載請說明來自 《老餅講解-機器學(xué)習(xí)》 ml.bbbdata.com 目錄 一. SVM的目標和思想 ?? 1.1 SVM硬間隔模型的原始目的 1.2 SVM的直接目標 1.3 什么是支持向量 ?二. SVM的支持平面的表示方式 2.1 支持面表示方式的初步思路 2.2 初步思路的缺陷與改進 2.3 支持面的最終表示

    2023年04月23日
    瀏覽(1042)
  • 機器學(xué)習(xí)實戰(zhàn)-系列教程8:SVM分類實戰(zhàn)3非線性SVM(鳶尾花數(shù)據(jù)集/軟間隔/線性SVM/非線性SVM/scikit-learn框架)項目實戰(zhàn)、代碼解讀

    機器學(xué)習(xí)實戰(zhàn)-系列教程8:SVM分類實戰(zhàn)3非線性SVM(鳶尾花數(shù)據(jù)集/軟間隔/線性SVM/非線性SVM/scikit-learn框架)項目實戰(zhàn)、代碼解讀

    本篇文章的代碼運行界面均在Pycharm中進行 本篇文章配套的代碼資源已經(jīng)上傳 SVM分類實戰(zhàn)1之簡單SVM分類 SVM分類實戰(zhàn)2線性SVM SVM分類實戰(zhàn)3非線性SVM 使用PolynomialFeatures模塊進行預(yù)處理,使用這個可以增加數(shù)據(jù)維度 polynomial_svm_clf.fit(X,y)對當前進行訓(xùn)練傳進去X和y數(shù)據(jù) SVM分類實戰(zhàn)

    2024年02月07日
    瀏覽(29)
  • 第29步 機器學(xué)習(xí)分類實戰(zhàn):支持向量機(SVM)建模

    第29步 機器學(xué)習(xí)分類實戰(zhàn):支持向量機(SVM)建模

    支持向量機(SVM)建模。 先復(fù)習(xí)一下參數(shù)(傳送門),需要調(diào)整的參數(shù)有: ① kernel:{‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’},默認為’rbf’。使用的核函數(shù),必須是“l(fā)inear”,“poly”,“rbf”,“sigmoid”,“precomputed”或者“callable”中的一個。 ② c:浮點

    2024年02月02日
    瀏覽(103)
  • 基于機器學(xué)習(xí)的情緒識別算法matlab仿真,對比SVM,LDA以及決策樹

    基于機器學(xué)習(xí)的情緒識別算法matlab仿真,對比SVM,LDA以及決策樹

    目錄 1.算法理論概述 2.部分核心程序 3.算法運行軟件版本 4.算法運行效果圖預(yù)覽 5.算法完整程序工程 ? ? ? ?情緒識別是一種重要的情感分析任務(wù),旨在從文本、語音或圖像等數(shù)據(jù)中識別出人的情緒狀態(tài),如高興、悲傷、憤怒等。本文介紹一種基于機器學(xué)習(xí)的情緒識別算法,

    2024年02月15日
    瀏覽(24)
  • 【Python機器學(xué)習(xí)】SVM——線性模型與非線性特征

    【Python機器學(xué)習(xí)】SVM——線性模型與非線性特征

    SVM(核支持向量機)是一種監(jiān)督學(xué)習(xí)模型,是可以推廣到更復(fù)雜模型的擴展,這些模型無法被輸入空間的超平面定義。 線模型在低維空間中可能非常受限,因為線和平面的靈活性有限,但是有一種方式可以讓線性模型更加靈活,那就是添加更多特征,比如輸入特征的交互式或

    2024年01月21日
    瀏覽(27)
  • 基于python-opencv,svm的開源人臉識別項目

    基于python-opencv,svm的開源人臉識別項目

    ? 前言 ? ? ? 本項目是我自己在學(xué)校里完成的一個小項目,本項目為基于python-opencv,svm的人臉識別開源項目,不同于其他的直接從kaggle等獲取劃分好的數(shù)據(jù)集,本項目致力于從無到有的完成機器學(xué)習(xí)的所有步驟,即: 目錄 項目展示: 一、數(shù)據(jù)采集 1.創(chuàng)建爬蟲項目 2.修改set

    2024年02月08日
    瀏覽(17)
  • 基于機器學(xué)習(xí)算法:樸素貝葉斯和SVM 分類-垃圾郵件識別分類系統(tǒng)(含Python工程全源碼)

    基于機器學(xué)習(xí)算法:樸素貝葉斯和SVM 分類-垃圾郵件識別分類系統(tǒng)(含Python工程全源碼)

    本項目采用樸素貝葉斯和支持向量機(SVM)分類模型作為基礎(chǔ),通過對垃圾郵件和正常郵件的數(shù)據(jù)進行訓(xùn)練,旨在實現(xiàn)垃圾郵件的自動識別功能。 通過訓(xùn)練這兩個分類模型,我們的目標是建立一個高效準確的垃圾郵件識別系統(tǒng)。當接收到新的郵件時,系統(tǒng)將對郵件文本進行預(yù)

    2024年02月09日
    瀏覽(32)
  • 【機器學(xué)習(xí)】HOG+SVM實現(xiàn)行人檢測

    【機器學(xué)習(xí)】HOG+SVM實現(xiàn)行人檢測

    任務(wù):利用INRIA Person數(shù)據(jù)集,提取HOG特征并采用SVM方法實現(xiàn)圖像中的行人檢測。 本文將給出詳細的操作步驟,以及可能會出現(xiàn)的坑點。 INRIA數(shù)據(jù)集含有直立或行走的人的圖像,被Navneet Dalal用于訓(xùn)練發(fā)表在CVPR 2005的人類檢測器。 坑點1 :官網(wǎng)http://pascal.inrialpes.fr/data/human/打開后

    2024年02月02日
    瀏覽(18)
  • 機器學(xué)習(xí)實戰(zhàn):Python基于支持向量機SVM-RFE進行分類預(yù)測(三)

    機器學(xué)習(xí)實戰(zhàn):Python基于支持向量機SVM-RFE進行分類預(yù)測(三)

    1.1 支持向量機的介紹 支持向量機( Support Vector Machine,SVM )是一種監(jiān)督學(xué)習(xí)的分類算法。它的基本思想是找到一個能夠最好地將不同類別的數(shù)據(jù)分開的超平面,同時最大化分類器的邊際(margin)。SVM的訓(xùn)練目標是最大化間隔(margin),即支持向量到超平面的距離。 具體地,

    2024年02月05日
    瀏覽(94)
  • 【OpenCV-Python】——機器學(xué)習(xí)kNN算法&SVM算法&k均值聚類算法&深度學(xué)習(xí)圖像識別&對象檢測

    目錄 前言: 1、機器學(xué)習(xí) 1.1 kNN算法 1.2 SVM算法(支持向量機) ?1.3 k均值聚類算

    2024年02月05日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包