【情感識別】基於matlab支援向量機(SVM)語音情感識別【含Matlab原始碼 543期】
阿新 • • 發佈:2021-06-27
一、簡介
支援向量機(Support Vector Machine)是Cortes和Vapnik於1995年首先提出的,它在解決小樣本、非線性及高維模式識別中表現出許多特有的優勢,並能夠推廣應用到函式擬合等其他機器學習問題中。
1 數學部分
1.1 二維空間
2 演算法部分
二、原始碼
clc; clear; load A_fear fearVec; load F_happiness hapVec; load N_neutral neutralVec; load T_sadness sadnessVec; load W_anger angerVec; sampleang=angerVec'; samplehap=hapVec'; sampleneu=neutralVec'; samplesad=sadnessVec'; samplefear=fearVec'; train(1:30,:)=sampleang(1:30,:); %每類三十個樣本作為訓練樣本 test(1:20,:)=sampleang(31:50,:);%每類二十個樣本作為測試樣本 train(31:60,:)=samplehap(1:30,:); test(21:40,:)=samplehap(31:50,:);% train(61:90,:)=sampleneu(1:30,:); test(41:60,:)=sampleneu(31:50,:);% train(91:120,:)=samplesad(1:30,:); test(61:80,:)=samplesad(31:50,:);% train(121:150,:)=samplefear(1:30,:); function rate=svmclassfiction(samples,test) %構造五種情感分類器 train1=samples(1:60,:);%用來構造生氣-高興分類模型訓練樣本 train2=[samples(1:30,:);samples(61:90,:)];%用來構造生氣-中性分類模型訓練樣本 train3=[samples(1:30,:);samples(91:120,:)];%用來構造生氣-悲傷分類模型訓練樣本 train4=[samples(1:30,:);samples(121:150,:)];%用來構造生氣-害怕分類模型訓練樣本 train5=[samples(31:60,:);samples(61:90,:)];%用來構造高興-中性分類模型訓練樣本 train6=[samples(31:60,:);samples(91:120,:)];%用來構造高興-悲傷分類模型訓練樣本 train7=[samples(31:60,:);samples(121:150,:)];%用來構造高興-害怕分類模型訓練樣本 train8=[samples(61:90,:);samples(91:120,:)];%用來構造中性-悲傷分類模型訓練樣本 train9=[samples(61:90,:);samples(121:150,:)];%用來構造中性-害怕分類模型訓練樣本 train10=[samples(91:120,:);samples(121:150,:)];%用來構造悲傷-害怕分類模型訓練樣本 for i=1:30 %正類樣本標記 trainlabel(i)=1; end for i=30:60 %負類樣本標記 trainlabel(i)=-1; end trainlabel=trainlabel'; svmStruct(1)= svmtrain(train1,trainlabel); %構造兩類SVM分類模型 svmStruct(2)= svmtrain(train2,trainlabel); svmStruct(3)= svmtrain(train3,trainlabel); svmStruct(4)= svmtrain(train4,trainlabel); svmStruct(5)= svmtrain(train5,trainlabel); svmStruct(6)= svmtrain(train6,trainlabel); svmStruct(7)= svmtrain(train7,trainlabel); svmStruct(8)= svmtrain(train8,trainlabel); svmStruct(9)= svmtrain(train9,trainlabel); svmStruct(10)= svmtrain(train10,trainlabel); sumang=0; %生氣情感正確識別個數 sumhap=0; %高興情感正確識別個數 sumneu=0; %中性情感正確識別個數 sumsad=0; %悲傷情感正確識別個數 sumfea=0; %害怕情感正確識別個數 for i=1:100 for k=1:5 votes(k)=0; %多個SVM分類器將待測樣本規定為某一類別個數 end for j=1:10 C(j) = svmclassify(svmStruct(j),test(i,:)); end if(C(1)==1) %第一個判決器結果 votes(1)=votes(1)+1; %生氣情感獲得票數 elseif(C(1)==-1) votes(2)=votes(2)+1; %高興情感獲得票數 end if(C(2)==1) %第二個判決器結果 votes(1)=votes(1)+1; %生氣情感獲得票數 elseif(C(2)==-1) votes(3)=votes(3)+1; %中性情感獲得票數 end if(C(3)==1) %第三個判決器結果 votes(1)=votes(1)+1; %生氣情感獲得票數 elseif(C(3)==-1) votes(4)=votes(4)+1; %悲傷情感獲得票數 end if(C(4)==1) %第四個判決器結果 votes(1)=votes(1)+1; %生氣情感獲得票數 elseif(C(4)==-1) votes(5)=votes(5)+1; %害怕情感獲得票數 end
三、執行結果
四、備註
版本:2014a
完整程式碼或代寫加1564658423