一、解决上周的疑惑
在使用 SVM 模型中要输入的有测试集数据和标签,训练集数据和标签,因为在输入之前
我们都需要给它打上标签将它归为某一类,如图所示
svmtrain 为训练模型函数,svmpredict 为测试(预测集),每个函数分别输入相对应的标签。
而在用 libsvm 库进行模型训练时需要分三个步骤:1、训练 2、测试 3、预测
1、训练——就是用训练数据集,不管你采用那种寻优方式,得到相对的最优参数,训练模
型。
2、测试——用刚刚得到的模型 svmtrain,对测试数据进行测试,此时测试数据集的 label 是
已知的,这主要是用来对刚刚的模型的检测,或者是对参数的检测、或者是对模型的泛化能
力的检测。此时会得到一个准确率,这时的准确率是有用的,是有实际意义的,因为原来的
label 是已知的。
3、预测——预测就是对未知类别的样本在测试确定了模型有好的泛化能力的情况下的预测
分类,这步才是真的预测能力功能的实现。此时数据的 label 随便给了,这样是为了满足
libsvm 对数据格式的要求。此时也会得到一个准确率,但是这个是没有实际意义的,因为原
始的 label 是随便给的,没有意义,我们只是关心的是最后得到的类别号——达到分类的目
的。
因此在我的程序中分有 train(训练)和 test(测试)两个数据,这两个数据的标签都是
已知的,并且由人工给它打上标签,而只有你已经用训练集和测试集训练好一个 svm 模型
后,即能达到最优分类的参数确定,将该参数用于未知数据进行预测是,这个预测数据的标
签则是随便打的,这个时候 svm 中的 accuracy 是没有意义的,我们需要关心的只是
predict_label 这个标签类别。
二、训练和测试
上一周用的是环境音进行简单的分类,而这次用的是配乐即纯音乐和有人声的音乐。
配乐分类
还是实现的二分类,有安静(quiet)和恐惧(horror)两种感情。其中 horror 和 quiet 有 9
首曲子,分别用其中的 6 首来进行训练,3 首用来测试;提取的特征是短时能量和短时过量
率这两个时域特征,和频域用快速傅里叶变换 FFT 的到的频域特征,我调整了 svm 的参数后
的到了不同的正确率。
(1)提取短时能量特征,当惩罚参数-c 和核函数参数-g 分别为 1 和 1 的时候得到的正确率
是 100%
评论0