今天整理资料时,发现了在学校时做的这个实验,当时整个过程过重偏向依赖分类器方面,而又很难对分类器性能进行一定程度的改良,所以最后没有选用这个方案,估计以后也不会接触这类机器学习的东西了,希望它对刚入门的人有点用。

SVM比较适合高维数据的二分类,本来准备对语音特征直接用SVM进行二分类,但是发现样本数据比较多,训练的2天都没有出收敛,最后想用VQ聚类的方法先抽取出具有代表性的语音,但是用这些代表性的训练集训练SVM分类器,效果还可以,用了一个下午就收敛了。识别结果还行,比较差的情况下,也有80%的准确率。

LibSVM是台湾大学林智仁设计的开发包:http://www.csie.ntu.edu.tw/~cjlin/

训练特征提取部分:

clc;
clear; train_feature0=[]; %A类特征
train_feature1=[]; %B类特征
%%%%%相关参数选取%%%%%
N=128;
ine = 1*10^(-3); %%%%%%%%%A类训练数据
root0='D:\model_train\train_orign';
list0=dir(root0);
list0(1:2)=[];
N0=length(list0);
for i=1:N0
file=[root0,'\',list0(i).name];
x=readwav(file);
[temp]=mfcc(x);
train_feature0=[train_feature0;temp];
disp(list0(i).name);
end
%%%%
[vector0,cent0]=VQ(train_feature0,N,ine);VQ聚类A类
%%%%
% for i=1:N
% train_feature=[train_feature;vector0(i).data(1:XQ,:)];
% end
% label0=ones(N*XQ,1);%文件标记 1 %%%%%%%%B类训练数据
root1='D:\model_train\train_tamper';
list1=dir(root1);
list1(1:2)=[];
N1=length(list1);
for j=1:N1
file=[root1,'\',list1(j).name];
x=wavread(file);
[temp]=mfcc(x);
train_feature1=[train_feature1;temp];
disp(list1(j).name);
end
%%%%%%%%%%%VQ聚类B类
[vector1,cent1]=VQ(train_feature1,N,ine);

模型训练与分类部分:

clc;clear;
%---------用SVM测试三种特征的准确率,单独检测,2012-3-19-------
addpath('svm-mat-2.89-3'); % add path with libsvm routines
display(datestr(now)); %------------------------装载训练数据----------------------------------------
load('train_feature.mat'); %语音特征训练数据
load('train_label.mat');%对应标签 load('test_feature.mat'); %用于归一化
%-------------直接指定参数-----------
G = 1/24; C = 1e8; %le
cmd=sprintf('-t 2 -g %.4e -c %.4e',G,C);
[train_scale,test_scale] = scaleForSVM_corrected(train_feature,test_feature,-1,1);% scale the training set and testing sets to [0,1]
model1=svmtrain(train_label,train_scale,cmd);% train the svm classifier 训练 按帧 save model1.mat model1;
save test_scale.mat test_scale;
clear;
load('model1.mat');
load('test_scale.mat');
%------------------------装载测试数据---------------------------------------- load('test_label.mat');%对应标签
load('test_file_frames.mat'); %帧级别
load('test_label_frame.mat');
%--------------------------------------------------------------------------
[predict_label,predict_accuracy_rate]=svmpredict(test_label_frame,test_scale,model1);% classify the testing set
N=length(test_file_frames);
temp1=0;
temp2=0; for i=1:N
temp2=temp2+test_file_frames(i);
temp1=temp2-test_file_frames(i)+1;
% zonghe=score(temp1:temp2);
same=ismember(predict_label(temp1:temp2),test_label_frame(temp1:temp2));
if sum(same)/test_file_frames(i)>0.5
predict_result(i)=test_label(i);
else
predict_result(i)=(~test_label(i));
end
end
predict_result=predict_result';
index=(predict_result==test_label);
num_correct=sum(index);
accuracy=num_correct/N;
fprintf('A类和B类综合 accuracy = %0.2f (%s%s%s)%s \n',accuracy,num2str(num_correct),'/',num2str(N),'(classification)');
display(datestr(now));
%%%%%%%%%%%%%%%%%%%A类准确率
index=(predict_result(1:200)==test_label(1:200));
num_z=sum(index);
accuracy=num_z/(N/2);
fprintf('A类 accuracy = %0.2f (%s%s%s)%s \n',accuracy,num2str(num_z),'/',num2str(N/2),'(classification)');
%%%%%%%%%%%%%%%%%%%B类准确率
index=(predict_result(201:400)==test_label(201:400));
num_f=sum(index);
accuracy=num_f/(N/2);
fprintf('B类 accuracy = %0.2f (%s%s%s)%s \n',accuracy,num2str(num_f),'/',num2str(N/2),'(classification)');

  

VQ结合SVM分类方法的更多相关文章

  1. Relation Extraction中SVM分类样例unbalance data问题解决 -松弛变量与惩罚因子

    转载自:http://blog.csdn.net/yangliuy/article/details/8152390 1.问题描述 做关系抽取就是要从产品评论中抽取出描述产品特征项的target短语以及 ...

  2. SVM 核方法

    在 SVM 中引入核方法便可使得 SVM 变为非线性分类器,给定非线性可分数据集 $\left \{ (x_i,y_i)\right\}_{i=1}^N$,如下图所示,此时找不到一个分类平面来将数据分 ...

  3. SGDClassifier梯度下降分类方法

    SGDClassifier梯度下降分类方法 这个分类器跟其他线性分类器差不多,只是它用的是mini-batch来做梯度下降,在处理大数据的情况下收敛更快 1.应用 SGD主要应用在大规模稀疏数据问题上 ...

  4. SVM-支持向量机(二)非线性SVM分类

    非线性SVM分类 尽管SVM分类器非常高效,并且在很多场景下都非常实用.但是很多数据集并不是可以线性可分的.一个处理非线性数据集的方法是增加更多的特征,例如多项式特征.在某些情况下,这样可以让数据集变 ...

  5. tensorflow实现基于LSTM的文本分类方法

    tensorflow实现基于LSTM的文本分类方法 作者:u010223750 引言 学习一段时间的tensor flow之后,想找个项目试试手,然后想起了之前在看Theano教程中的一个文本分类的实 ...

  6. CSS规范 - 分类方法

    CSS文件的分类和引用顺序 通常,一个项目我们只引用一个CSS,但是对于较大的项目,我们需要把CSS文件进行分类. 我们按照CSS的性质和用途,将CSS文件分成“公共型样式”.“特殊型样式”.“皮肤型 ...

  7. SVM-支持向量机(一)线性SVM分类

    SVM-支持向量机 SVM(Support Vector Machine)-支持向量机,是一个功能非常强大的机器学习模型,可以处理线性与非线性的分类.回归,甚至是异常检测.它也是机器学习中非常热门的算 ...

  8. EcShop调用显示指定分类下的子分类方法

    ECSHOP首页默认的只有全部分类,还有循环大类以及下面小类的代码,貌似没有可以调用显示指定大类下的子分类代码.于是就有这个文章的产生了,下面由夏日博客来总结下网站建设过程中ECSHOP此类问题的网络 ...

  9. SVM分类与回归

    SVM(支撑向量机模型)是二(多)分类问题中经常使用的方法,思想比较简单,但是具体实现与求解细节对工程人员来说比较复杂,如需了解SVM的入门知识和中级进阶可点此下载.本文从应用的角度出发,使用Libs ...

随机推荐

  1. NGUI架构和Draw Call合并原理

    http://bbs.9ria.com/thread-282804-1-1.html http://www.unitymanual.com/blog-97-238.html

  2. jquery左边滚动,完毕后跳转回来

    代码如下 function in_scroll(){ $liW = ; $num = $(".in-cy li").size(); $ulW = $liW*$num; $(&quo ...

  3. linux 下 zip unzip压缩与解压

    注:*压缩成限.zip格式文件 常用解压缩: [root@mysql test]# unzip -o test.zip -d tmp/ 将压缩文件test.zip在指定目录tmp下解压缩,如果已有相同 ...

  4. scanf 格式化字符串详解

    scanf格式控制的完整格式: %     *     m     l或h     格式字符 ①格式字符与printf函数中的使用方式相同,以%d.%o.%x.%c.%s.%f.%e,无%u格式.%g ...

  5. 【干货理解】理解javascript中实现MVC的原理

    理解javascript中的MVC MVC模式是软件工程中一种软件架构模式,一般把软件模式分为三部分,模型(Model)+视图(View)+控制器(Controller); 模型:模型用于封装与应用程 ...

  6. 2015年11月30日 spring初级知识讲解(一)装配Bean

    序,Spring的依赖注入是学习spring的基础.IOC为控制反转,意思是需要的时候就由spring生成一个,而不是先生成再使用. 写在前面 Spring提供面向接口编程,面向接口编程与依赖注入协作 ...

  7. PHP基础之 重载 的实现方式

    ===================PHP中的伪重载Overloading================== PHP中没有像C#或java中的重载,但可以通其它方法实现重载 重载:属性重载与方法重 ...

  8. cf.301.D. Bad Luck Island(dp + probabilities)

    D. Bad Luck Island time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  9. I’ve seen the world,lit it up as my stage now

    I've seen the world,lit it up as my stage now 阅尽繁华 点亮红尘做舞台 Channeling angels in,the new age now 粉末登场 ...

  10. Mac 如何安装Homebrew?

    到Github官网上搜索Homebrew,找到对应的Homebrew后,查看它的安装文档,链接如下: https://github.com/Homebrew/homebrew/blob/master/ ...