空中飞马

今天真的懂得了好多知识:

今天真的懂得了好多知识:
  1. 归一化(即数据缩放0不是必须的,有时反而起反作用需要说明的事并不是任何问题都必须事先把原始数据进行规范化,也就是数据规范化这一步并不是必须要做的,要具体问题具体看待,测试表明有时候规范化后的预测准确率比没有规范化的预测准确率低很多.就最大最小值法而言,当你用这种方式将原始数据规范化后,事实上意味着你承认了一个假设就是测试数据集的每一模式的所有特征分量的最大值(最小值)不会大于(小于)训练数据集的每一模式的所有特征分量的最大值(最小值),但这条假设显然过于强,实际情况并不一定会这样.使用平均数方差法也会有同样类似的问题.故数据规范化这一步并不是必须要做的,要具体问题具体看待. [引自faruto ]
  2. 交叉验证没那么简单,我自己实验时testdata并没有参与到交叉验证中,不知道对不对。
  3. 训练集、测试集尽量按同样标准分类可能比较好,我训练集、测试集均是12288组提取7个特征

特征选择

http://kongzhongfeima.top/blog/libsvm%E7%89%B9%E5%BE%81%E9%80%89%E5%8F%96.html

交叉验证

把具有最小c的那组c和g认为是最佳的c和g,因为惩罚参数不能设置 太高,很高的惩罚参数能使得validation数据的准确率提高,但过高的惩罚参数c会造成过学习状态,往往都是惩罚参数c过高会导致最终测试集合的准确率并不是很理想。

1
2
[label,instance]=libsvmread('7features_train_dataset.txt');
[bestCVaccuracy,bestc,bestg]= SVMcgForClass(label,instance,-8,8,-8,8,10,1,1,4.5);




不行就用他的 感觉他的图更加对一些



-g 1 -c 2

模型训练

1
model=svmtrain(label,instance,'-t 2 -g 1 -c 2 ');

..
optimization finished, #iter = 282
nu = 0.001580
obj = -23.051163, rho = -0.169393
nSV = 88, nBSV = 0
Total nSV = 202
Cross Validation Accuracy = 67.1875%
Accuracy = 98.75% (79/80) (classification)


模型预测

1
2
[label_test,instance_test]=libsvmread('7features_test_dataset.txt');
[predictlabel]=svmpredict(label_test, instance_test,model);

 评论