机器学习和生物信息学实验室联盟

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 8485|回复: 7
打印 上一主题 下一主题

【求助】libsvm不平衡分类

[复制链接]
跳转到指定楼层
楼主
发表于 2012-6-11 13:48:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用libsvm分类(分为两类0/1),类别权重参数设置为"-W", "0.1 0.9" ,详细参数设置如下:

String[] options = {"-S", "0", "-K", "2", "-D", "3", "-G", "0.16", "-R", "0.0", "-W", "0.1 0.9", "-N", "0.5", "-M", "40.0", "-C", "1.0", "-E", "0.0010", "-P", "0.1"};

程序运行时,出现一个warning: class label 1 specified in weight is not found"

有没有人知道为什么会出现上述的警告? 求指教呀
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享
回复

使用道具 举报

沙发
发表于 2012-6-11 14:03:03 | 只看该作者
本帖最后由 xmubingo 于 2012-6-11 14:07 编辑

你的权重是不是应该分开写

-wi weight : set the parameter C of class i to weight*C, for C-SVC (default 1)


svm-train的时候有个参数c和g。
你在指定wight的时候似乎需要参考之前设定的c值。
按照help说法,第i个类别的权重为weight*c。

w0 0.1 w1 0.9
权重为: 0.1*c 0.9*c
我没验证过,你试试

我们实验室有个不平衡分类的降噪采样法你可以参考
http://59.77.16.75/main/~zq/uns/index.htm
http://datamining.xmu.edu.cn/main/~qc/libDSCCBC.htm
回复 支持 反对

使用道具 举报

板凳
 楼主| 发表于 2012-6-11 14:21:23 | 只看该作者
xmubingo 发表于 2012-6-11 14:03
你的权重是不是应该分开写

如何权重分开写,就会出现“Zero Weights processed. Default weights will be used“ 这样的话,权重设置应该不成功,会使用默认的权重。
回复 支持 反对

使用道具 举报

地板
发表于 2012-6-11 14:29:12 | 只看该作者
fiona 发表于 2012-6-11 14:21
如何权重分开写,就会出现“Zero Weights processed. Default weights will be used“ 这样的话,权重设置 ...
"svm-train -c 10 -w1 1 -w-1 5 data_file

  Train a classifier with penalty 10 = 1 * 10 for class 1 and penalty 50
  = 5 * 50 for class -1."

It seems libSVM doesn't recognize -W0 (or -W equivalently). In the above
example the arguments -W1 and -W-1 are used to assign weights to the
attributes 1 and -1 respectively. Maybe -1 corresponds to the target
class, but I think you have to run some tests on that or ask the libSVM
guys.


你先参考下他说的,我试试
回复 支持 反对

使用道具 举报

5#
发表于 2012-6-11 14:36:03 | 只看该作者
本帖最后由 xmubingo 于 2012-6-11 14:37 编辑

我刚试了一下,网上这个说法可行。

你的训练文件里,如果是用0和1来区别两种类别,
那么参数就用-w0 0.1和-w1 0.9
如果是用-1和1来区别,
那么参数就用-w-1 0.1和-w1 0.9


还有,你的参数里有-k?貌似我的libsvm里没有这个参数
回复 支持 反对

使用道具 举报

6#
 楼主| 发表于 2012-6-11 15:51:06 | 只看该作者
xmubingo 发表于 2012-6-11 14:36
我刚试了一下,网上这个说法可行。

你的训练文件里,如果是用0和1来区别两种类别,

我的做法跟你的一样,还是说使用默认的权重,参数-K应该跟-t是一样的吧。
LibSVM有版本什么的差别吗?
回复 支持 反对

使用道具 举报

7#
发表于 2012-6-11 16:16:39 | 只看该作者
本帖最后由 xmubingo 于 2012-6-11 16:23 编辑
fiona 发表于 2012-6-11 15:51
我的做法跟你的一样,还是说使用默认的权重,参数-K应该跟-t是一样的吧。
LibSVM有版本什么的差别吗?




附件中是我用来做训练的训练文件和程序。

以下是我的svm输出信息:
(命令 F:\max_svm_parameter\libsvm\windows>svm-train -s 0 -t 2 -c 1.0 -g 0.16 -w0 0.1 w1 0.9 20.arff.libsvm )


如果我label输入出错就会提示错误:


建议你用的svm去官网下载:http://www.csie.ntu.edu.tw/~cjlin/libsvm/
你的参数很多都不需要设置。而且有参数和我的不一样。我不知道是不是你程序也和我的不一致。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

8#
 楼主| 发表于 2012-6-11 16:39:30 | 只看该作者
Ok,好详细哈,谢啦
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

机器学习和生物信息学实验室联盟  

GMT+8, 2024-11-2 01:36 , Processed in 0.089119 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表