基于SVM的数据分类预测——语音识别

本文介绍了如何使用支持向量机(SVM)对基于BP网络的语音信号进行识别,包括数据预处理、模型训练和预测过程,以及通过实例展示了测试集的分类准确性和错误分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SVM是机器学习中的一种方法,在2011年前后深度学习爆发之前曾统治机器学习数十年。它实现简单,在很多情况下表现优秀,需要的数据量小,因此成为机器学习的经典方法之一。

数据:基于BP网络的语音识别-优快云博客

%% 清空环境变量

close all;
clear;
clc;
format compact;

%% 数据提取

%下载四类语音信号

load data1 c1
load data2 c2
load data3 c3
load data4 c4

%四个特征信号矩阵合成一个矩阵

data(1:500,:)=c1(1:500,:);
data(501:1000,:)=c2(1:500,:);
data(1001:1500,:)=c3(1:500,:);
data(1501:2000,:)=c4(1:500,:);

%随机提取1500个样本为训练样本,500个样本为预测样本

%从1到2000间随机排序
 

k=rand(1,2000);
[m,n]=sort(k);

%输入输出数据

input=data(:,2:25);
output =data(:,1);
train=input(n(1:1500),:);
train_labels=output(n(1:1500),:);
test=input(n(1501:2000),:);
test_labels=output(n(1501:2000),:);


%% 数据预处理

% 数据预处理,将训练集和测试集归一化到[0,1]区间

[mtrain,ntrain] = size(train);
[mtest,ntest] = size(test);

dataset = [train;test];
% mapminmax为MATLAB自带的归一化函数
[dataset_scale,ps] = mapminmax(dataset');
dataset_scale = dataset_scale';

train = dataset_scale(1:mtrain,:);
test = dataset_scale( (mtrain+1):(mtrain+mtest),: );


%% SVM网络训练

model = svmtrain(train_labels, train, '-c 2 -g 1');

%% SVM网络预测

[predict_label, accuracy,predict_values] = svmpredict(test_labels, test, model);

%% 结果分析

% 测试集的实际分类和预测分类图

figure;
hold on;
plot(test_labels,'o');
plot(predict_label,'r*');
xlabel('测试集样本','FontSize',12);
ylabel('类别标签','FontSize',12);
legend('实际测试集分类','预测测试集分类');
title('测试集的实际分类和预测分类图','FontSize',12);
grid on;

%找出判断错误的分类属于哪一类

k=zeros(1,4);  
for i=1:500
    if test_labels(i,1)~=predict_label(i,1)
        c=test_labels(i,1);
        switch c
            case 1 
                k(1)=k(1)+1;
            case 2 
                k(2)=k(2)+1;
            case 3 
                k(3)=k(3)+1;
            case 4 
                k(4)=k(4)+1;
        end
    end
end

%找出每类的个体和

kk=zeros(1,4);
for i=1:500
    c=test_labels(i,1);
    switch c
        case 1
            kk(1)=kk(1)+1;
        case 2
            kk(2)=kk(2)+1;
        case 3
            kk(3)=kk(3)+1;
        case 4
            kk(4)=kk(4)+1;
    end
end

%正确率

rightridio=(kk-k)./kk;
disp('正确率')
disp(rightridio);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值