自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

機(jī)器學(xué)習(xí)用戶寶典:使用SVM解讀情感

譯文 精選
人工智能
支持向量機(jī)(SVM)可能聽起來像一個(gè)復(fù)雜的術(shù)語,但它卻是機(jī)器學(xué)習(xí)領(lǐng)域一種簡單而強(qiáng)大的方法。你可以把它想象成一個(gè)智能邊界劃分者,幫助機(jī)器對數(shù)據(jù)進(jìn)行分類。

譯者 | 布加迪

審校 | 重樓

有沒有想過機(jī)器是如何識(shí)別人臉表情或分類物體的?答案在于支持向量機(jī)(SVM)。我們在這篇博文中將通過一個(gè)分步驟的項(xiàng)目來探究其工作原理。在介紹該項(xiàng)目之前,不妨簡要介紹一下SVM。

支持向量機(jī)

支持向量機(jī)(SVM)可能聽起來像一個(gè)復(fù)雜的術(shù)語,但它卻是機(jī)器學(xué)習(xí)領(lǐng)域一種簡單而強(qiáng)大的方法。你可以把它想象成一個(gè)智能邊界劃分者,幫助機(jī)器對數(shù)據(jù)進(jìn)行分類。無論是分類垃圾郵件、識(shí)別人臉還是檢測情感,SVM都能找到分離不同類別數(shù)據(jù)的最佳線(或超平面)。SVM之所以如此有效,是由于它不僅能夠處理簡單的任務(wù),還能夠輕松處理復(fù)雜的高維數(shù)據(jù)。我們在這篇博文中將深入探討SVM是如何工作的以及為什么它改變了機(jī)器學(xué)習(xí)領(lǐng)域的游戲規(guī)則。

為什么是SVM?

SVM之所以脫穎而出,是由于它善于找到分離圖像等復(fù)雜數(shù)據(jù)的最佳方法,只需要幾個(gè)關(guān)鍵點(diǎn)。CNN和KNN等其他方法需要大量數(shù)據(jù)和強(qiáng)大算力,而SVM可以很好地處理較小的數(shù)據(jù)集、多維圖像,仍然提供出色的結(jié)果。對于許多圖像識(shí)別任務(wù)來說,它可靠、高效和完美,沒有其他技術(shù)的繁重要求。此外,SVM避免了過擬合,使其適用于樣本有限的數(shù)據(jù)集。

注意:雖然SVM以用于分類任務(wù)最為出名,但也可以用于回歸,即用于預(yù)測連續(xù)值。

SVM是如何工作的?

SVM的工作原理是找到分離數(shù)據(jù)中不同類別的最佳邊界(超平面)。支持向量是最接近該邊界并幫助定義該邊界的數(shù)據(jù)點(diǎn)。

SVM試圖使邊界與這些支持向量之間的距離盡可能大,這有助于提高準(zhǔn)確率。如果數(shù)據(jù)無法用直線(或超平面)分離,SVM使用核函數(shù)(后面有進(jìn)一步介紹)將數(shù)據(jù)轉(zhuǎn)換到更高的空間,在那里它可以找到一個(gè)邊界。

項(xiàng)目概述

目標(biāo)

首先,該項(xiàng)目旨在演示如何使用支持向量機(jī)(SVM)利用標(biāo)記數(shù)據(jù)集將人臉表情分類為不同的情感。除此之外,它還旨在訓(xùn)練SVM模型,以便根據(jù)從人臉圖像中提取的特征對表情進(jìn)行準(zhǔn)確的分類。

數(shù)據(jù)集、工具和庫

這里演示的項(xiàng)目是使用人臉表情數(shù)據(jù)集創(chuàng)建而成的。該項(xiàng)目使用了一個(gè)含有大約28000個(gè)圖像的數(shù)據(jù)集,包括八種不同的表情(比如憤怒、悲傷、快樂等)。為了實(shí)現(xiàn)SVM,可以使用Pandas、Scikit-learn、OpenCV和NumPy等Python庫。

項(xiàng)目創(chuàng)建

有幾個(gè)步驟與之相關(guān)。不妨逐一介紹。

第1步:數(shù)據(jù)分離和預(yù)處理

首先,我們要加載數(shù)據(jù)集。該項(xiàng)目中使用的數(shù)據(jù)集由代表不同情感的文件夾組成。每個(gè)文件夾至少包含3000個(gè)圖像。為了確保數(shù)據(jù)集內(nèi)容平衡,我們從每個(gè)文件夾中隨機(jī)選擇2000個(gè)圖像,這樣就不會(huì)對特定的情感產(chǎn)生偏見。此外,2000是中等的批大小,因此過擬合和欠擬合的可能性似乎較小。下面是執(zhí)行相同功能的代碼。

# Load the dataset
csv_path = './Dataset/labels.csv'  # Path to the label CSV file
data = pd.read_csv(csv_path)

# Define parameters
image_folder = './Dataset/'  # Folder containing images
classes = ['neutral', 'happy', 'sad', 'surprise', 'fear',
 'disgust', 'anger', 'contempt']  # Emotion classes
samples_per_class = 2000  # Number of samples to take per class
image_size = (96, 96)  # Resize all images to 96x96

現(xiàn)在,我們確保每個(gè)情感類都有相同數(shù)量的樣本以獲得平衡的訓(xùn)練過程。使用pandas.DataFrame.sample()對圖像進(jìn)行隨機(jī)抽樣,以避免類不平衡。任何少于2000個(gè)圖像的類都會(huì)被跳過,以保持?jǐn)?shù)據(jù)集的一致性。

一旦數(shù)據(jù)集準(zhǔn)備好,我們將圖像轉(zhuǎn)換成灰度,這有助于簡化圖像數(shù)據(jù)。并提取方向梯度直方圖(HOG)特征,用于提取圖像的邊緣和紋理信息。

X = []
y = []
for _, row in balanced_data.iterrows():
    image_path = os.path.join(image_folder, row['pth'])  # Assuming 'pth' column contains image file paths
    if os.path.exists(image_path):
        # Read the image and convert to grayscale
        image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
        image = cv2.resize(image, image_size)

        # Extract HOG features
        features, _ = hog(image, orientations=9, pixels_per_cell=(8, 8),
                          cells_per_block=(2, 2), visualize=True, channel_axis=None)
        X.append(features)
        y.append(row['label'])
    else:
        print(f"Image not found: {image_path}")

第2步:降維和訓(xùn)練

在對數(shù)據(jù)集進(jìn)行歸一化之后,PCA和LDA等降維方法就可以派上用場了,以便通過只保留重要的模式、去除噪聲以及分別分離類,以減少特征的數(shù)量。

現(xiàn)在,訓(xùn)練前的最后一步是將數(shù)據(jù)集分成訓(xùn)練集和測試集,以評估模型針對未見過的數(shù)據(jù)時(shí)的性能。

pca = PCA(n_components=0.95) 
X_pca = pca.fit_transform(X)

lda = LDA(n_components=7)  
X_lda = lda.fit_transform(X_pca, y)

#Spliting into training and test sets
X_train, X_test, y_train, y_test = train_test_split(X_lda, y, test_size=0.2, random_state=42, stratify=y)

第3步:訓(xùn)練和評估模型

接下來是最重要的部分:訓(xùn)練。SVM模型使用線性核來訓(xùn)練,線性核有助于繪制一個(gè)直超平面來分離特征空間中的情感類。100的C值控制了最大化邊際和最小化分類錯(cuò)誤之間的平衡,兼顧了復(fù)雜性和準(zhǔn)確性。此外,class_weight='balanced'參數(shù)確保模型有效地處理類不平衡,使其面對不同的情感類別時(shí)有穩(wěn)定可靠的表現(xiàn)。使用訓(xùn)練數(shù)據(jù)擬合模型后,SVM就可以準(zhǔn)備使用測試集進(jìn)行性能評估了。

#Train the SVM model with fixed C value
svm = SVC(C=100, kernel='linear', gamma='scale', class_weight='balanced')
svm.fit(X_train, y_train)

#Evaluating the model
y_pred = svm.predict(X_test)

圖1. 線性核的圖像表示

注意:這里之所以使用線性核,是由于數(shù)據(jù)是線性可分的,它很適用于高維數(shù)據(jù)。

第4步:結(jié)論:結(jié)果和分析

Accuracy: 73.94%
Classification Report:
              precision    recall     f1-score    support

     neutral       0.71      0.73      0.72      1600
      happy       0.88      0.88      0.88      1600
        sad       0.68      0.68      0.68      1600
    surprise       0.69      0.68      0.69      1600
      anger       0.74      0.73      0.73      1600
    contempt      0.71      0.71      0.72      1600
       fear       0.74      0.72      0.73      1600
     disgust       0.71      0.71      0.73      1600

    accuracy                          0.74      8000
   macro avg       0.74      0.74      0.74      8000
weighted avg       0.74      0.74      0.74      8000

分析

我們的模型達(dá)到了73.94%的準(zhǔn)確率,面對Happy(快樂)類表現(xiàn)最好,精準(zhǔn)率和召回率為0.88,面對中性、憤怒、厭惡和蔑視類表現(xiàn)良好(約0.70-0.74)。然而,它在面對悲傷和驚喜類時(shí)表現(xiàn)欠佳(精準(zhǔn)率和召回率為0.68-0.69),可能是由于特征重疊。均衡的宏和加權(quán)平均值為0.74,表明面對各情感類,總體上性能一致。

模型的部署

在訓(xùn)練模型之后,我們還創(chuàng)建了一個(gè)網(wǎng)頁,讓用戶以互動(dòng)的方式檢測自己的情感。該網(wǎng)頁還沒有部署,但是你仍然可以在這里查看如何描述輸出的結(jié)果。

結(jié)論

我們已經(jīng)發(fā)掘了SVM的力量來解讀從快樂到驚喜的各種情感。結(jié)合使用關(guān)鍵概念、編碼和一些模型調(diào)優(yōu),我們看到了SVM如何幫助機(jī)器更好地理解我們?nèi)祟惖那楦?。完善模型可能需要一番調(diào)整,但SVM是一種強(qiáng)大的情感檢測工具。

當(dāng)我們繼續(xù)探索令人著迷的AI世界時(shí),想想機(jī)器如何慢慢地在識(shí)別和理解人類情感方面變得更好確實(shí)令人嘆為驚訝。不斷學(xué)習(xí),不斷嘗試!

原文標(biāo)題:Expressions Unveiled: Using SVM to Decode Emotions with Machine Learning,作者:Jay Mangukiya

責(zé)任編輯:姜華 來源: 51CTO內(nèi)容精選
相關(guān)推薦

2023-02-03 11:40:49

機(jī)器學(xué)習(xí)分析情感

2022-10-24 08:02:00

2020-05-21 21:14:38

機(jī)器學(xué)習(xí)ML數(shù)據(jù)

2018-01-04 13:07:43

Python機(jī)器學(xué)習(xí)情感分析

2009-09-17 10:05:49

CCNA學(xué)習(xí)用書CCNA

2020-02-07 22:18:32

機(jī)器學(xué)習(xí)人工智能AI

2019-08-25 08:02:16

2014-07-08 10:31:08

機(jī)器學(xué)習(xí)

2019-11-06 11:34:53

人工智能機(jī)器學(xué)習(xí)工具

2017-02-06 14:12:57

機(jī)器停車使用

2018-09-06 09:41:29

人工智能AI

2017-10-17 14:25:56

機(jī)器學(xué)習(xí)算法優(yōu)化

2017-09-27 16:23:53

2021-03-01 08:00:00

Linux開發(fā)虛擬環(huán)境

2009-09-23 11:21:32

學(xué)習(xí)Hibernate

2020-05-29 07:00:00

Python機(jī)器學(xué)習(xí)編程語言

2018-06-10 08:35:30

2017-03-30 14:27:58

機(jī)器人邏輯判斷情感選擇

2017-03-17 08:30:08

機(jī)器學(xué)習(xí)深度學(xué)習(xí)人工智能

2020-06-01 18:20:41

Git
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)