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

機器學習用戶寶典:使用SVM解讀情感 原創(chuàng)

發(fā)布于 2025-1-6 08:32
瀏覽
0收藏

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

支持向量機

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

為什么是SVM?

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

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

SVM是如何工作的?

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

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

機器學習用戶寶典:使用SVM解讀情感-AI.x社區(qū)

項目概述

目標

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

數據集、工具和庫

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

項目創(chuàng)建

有幾個步驟與之相關。不妨逐一介紹。

第1步:數據分離和預處理

首先,我們要加載數據集。該項目中使用的數據集由代表不同情感的文件夾組成。每個文件夾至少包含3000個圖像。為了確保數據集內容平衡,我們從每個文件夾中隨機選擇2000個圖像,這樣就不會對特定的情感產生偏見。此外,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

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

一旦數據集準備好,我們將圖像轉換成灰度,這有助于簡化圖像數據。并提取方向梯度直方圖(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步:降維和訓練

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

現在,訓練前的最后一步是將數據集分成訓練集和測試集,以評估模型針對未見過的數據時的性能。

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步:訓練和評估模型

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

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

機器學習用戶寶典:使用SVM解讀情感-AI.x社區(qū)

圖1. 線性核的圖像表示

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

第4步:結論:結果和分析

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

分析

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

模型的部署

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

機器學習用戶寶典:使用SVM解讀情感-AI.x社區(qū)

結論

我們已經發(fā)掘了SVM的力量來解讀從快樂到驚喜的各種情感。結合使用關鍵概念、編碼和一些模型調優(yōu),我們看到了SVM如何幫助機器更好地理解我們人類的情感。完善模型可能需要一番調整,但SVM是一種強大的情感檢測工具。

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

原文標題:??Expressions Unveiled: Using SVM to Decode Emotions with Machine Learning?,作者:Jay Mangukiya

?著作權歸作者所有,如需轉載,請注明出處,否則將追究法律責任
收藏
回復
舉報
回復
相關推薦