名义上是一个很好的问题,但我很确定这是因为有趣的东西正在发生......
作为背景,我正在处理面部表情/识别空间中的问题,因此获得100%的准确性似乎令人难以置信地难以置信(并非在大多数应用程序中都是合理的......).我猜测数据集中存在一些一致的偏差,它使得SVM过于容易地得出答案,=或=,更可能的是,我在SVM方面做错了.
我正在寻找建议,以帮助了解发生了什么 - 是我(=我对LibSVM的使用)?还是数据?
细节:
事情尝试:
暂定结论?:
数据集的某些东西已经被摧毁 - 不知何故,在数据集中,SVM正在汲取一种微妙的,实验者驱动的效果.
(首先,这不解释为什么RBF内核会产生垃圾结果.)
非常感谢任何建议:a)如何修复我对LibSVM的使用(如果这实际上是问题)或b)确定LibSVM数据中的哪些微妙的实验者偏见正在接受.
artificial-intelligence machine-learning svm computer-vision libsvm
二值化是将实体的彩色特征转换为数字向量(通常是二进制向量)的行为,以便为分类器算法提供良好的示例.
如果我们将句子"猫吃狗"二进制化,我们可以先为每个单词分配一个ID(例如cat-1,ate-2,the-3,dog-4),然后简单地将单词替换为它的ID给出了矢量<3,1,2,3,4>.
给定这些ID,我们还可以通过给每个字四个可能的槽创建二进制向量,并将对应于特定单词的槽设置为1,给出向量<0,0,1,0,1,0,0,0 ,0,1,0,0,0,0,0,1>.据我所知,后一种方法通常被称为词袋方法.
现在,对于我的问题,一般来说,描述自然语言处理的特征,特别是基于转换的依赖解析(使用Nivres算法)时,最好的二值化方法是什么?
在这种情况下,我们不希望编码整个句子,而是编码解析的当前状态,例如堆栈中的顶部单词和输入队列中的第一个单词.由于订单具有高度相关性,因此排除了词袋方法.
有了最好的,我指的是,使数据的最可理解的分类方法,而无需使用了不必要的内存.例如,如果只有2%的双子星实际存在,我不想要一个单词bigram使用4亿个特征来获得20000个独特单词.
由于答案也取决于特定的分类器,我最感兴趣的是最大熵模型(liblinear),支持向量机(libsvm)和感知器,但是也欢迎适用于其他模型的答案.
我知道LIBSVM在多类SVM方面只允许一对一分类.但是,我想稍微调整它以执行一对一的分类.我试图在下面进行一对一的比赛.这是正确的方法吗?
代码:
TrainLabel;TrainVec;TestVec;TestLaBel;
u=unique(TrainLabel);
N=length(u);
if(N>2)
itr=1;
classes=0;
while((classes~=1)&&(itr<=length(u)))
c1=(TrainLabel==u(itr));
newClass=c1;
model = svmtrain(TrainLabel, TrainVec, '-c 1 -g 0.00154');
[predict_label, accuracy, dec_values] = svmpredict(TestLabel, TestVec, model);
itr=itr+1;
end
itr=itr-1;
end
Run Code Online (Sandbox Code Playgroud)
我可能犯了一些错误.我想听听一些反馈.谢谢.
第二部分:正如葡萄藤所说:我需要做汇总(或投票作为简化解决方案)来得出最终答案.我不知道该怎么做.我需要一些帮助; 我看到了python文件,但仍然不太确定.我需要一些帮助.
我正在使用libsvm与预先计算的内核.我为示例数据集heart_scale生成了一个预先计算的内核文件并执行了该函数svmtrain().它工作正常,支持向量被正确识别,即类似于标准内核.
但是,当我尝试运行时svmpredict(),它为预先计算的模型文件提供了不同的结果.在深入研究代码之后,我注意到该svm_predict_values()函数需要支持向量的实际特征,这在预计算模式下是不可用的.在预先计算模式中,我们只有每个支持向量的系数和索引,这被误认为是它的特征svmpredict().
这是一个问题还是我错过了什么.
(请告诉我如何svmpredict()在预先计算模式下运行.)
想了解如何在Windows 7下安装libsvm for python?
我下载了livsvm zip,但我不明白其中的说明.我已将libsvm.dll放在我的c:\ windows\system32目录中,但是当我尝试时
import svmutil
Run Code Online (Sandbox Code Playgroud)
要么
from svm import *
Run Code Online (Sandbox Code Playgroud)
我明白了
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "svmutil.py", line 3, in <module>
from svm import *
File "svm.py", line 16, in <module>
'../windows/libsvm.dll'))
File "C:\Python27\lib\ctypes\__init__.py", line 365, in __init__
self._handle = _dlopen(self._name, mode)
WindowsError: [Error 126] The specified module could not be found
Run Code Online (Sandbox Code Playgroud) 虽然libsvm提供了用于扩展数据的工具,但是使用Scikit-Learn(它应该基于用于SVC分类器的libSVM),我发现无法扩展我的数据.
基本上我想使用4个功能,其中3个范围从0到1,最后一个是"大"高度可变数字.
如果我在libSVM中包含第四个功能(使用自动扩展我的数据的easy.py脚本),我会得到一些非常好的结果(准确率为96%).如果我在Scikit-Learn中包含第四个变量,精度下降到~78% - 但如果我将其排除,我得到的结果与排除该功能时的libSVM相同.因此,我很确定这是一个缺少扩展的问题.
如何以编程方式(即不调用svm-scale)复制SVM的缩放过程?
我正在处理高度不平衡的数据集,我的想法是从我的libSVM模型中获取特征权重值.至于现在,我可以使用线性内核,在那里我可以获得特征权重,但是当我使用rbf或者poly,我无法实现我的目标.
在这里,我使用的sklearn是我的模型,很容易获得线性内核使用的特征权重.coef_.任何人都可以帮我做同样的事情rbf或poly?我到目前为止尝试做的事情如下:
svr = SVC(C=10, cache_size=200, class_weight='auto', coef0=0.0, degree=3.0, gamma=0.12,kernel='rbf', max_iter=-1, probability=True, random_state=0,shrinking=True, tol=0.001, verbose=False)
clf = svr.fit(data_train,target_train)
print clf.coef_
Run Code Online (Sandbox Code Playgroud) 我想使用package 的svm功能执行多类分类e1071.但是从我从文档中了解到的svm,它只能执行二进制分类.vignettes文档告诉它多类分类:" 为了允许多类分类,libsvm通过拟合所有二元子分类器并通过投票机制找到正确的类来使用一对一技术 ".
我仍然不明白的是,如果我们可以进行多级分类svm的e1071R中?如果是,请解释我们如何在iris数据集上完成.
我正在使用R中的包e1071来构建一个类SVM模型.我不知道该怎么做,我也没有在互联网上找到任何例子.
有人可以给出一个示例代码来表征,例如,使用一类分类模型在"虹膜"数据集中表示"setosa"类,然后测试同一数据集中的所有示例(以便检查哪些示例属于"setosa"类的特征和哪些例子没有)?