我对OpenCV和支持向量机都很陌生。我想使用SVM训练具有两个标签的数据集,然后预测给定集合的标签。我当前的集包含大约600行,具有相同的类分布(300表示1,300表示-1),包含34列。
这是我目前设置OpenCV的SVM的代码。我正在使用OpenCV 3.0.0
fig,ax = plt.subplots()
plt.plot(dates.to_pydatetime(), df.A)
years = mdates.YearLocator() # every year
months = mdates.MonthLocator() # every month
yearsFmt = mdates.DateFormatter('%Y')
ax.xaxis.set_major_locator(years)
ax.xaxis.set_major_formatter(yearsFmt)
ax.xaxis.set_minor_locator(months)
SVM培训似乎运作良好。但是当我预测一行时,响应总是显示" 1"无论输入如何。即使我试图使用" -1"来预测使用训练行我之前使用的标签,响应仍然是" 1"。 我试图将终止条件的max iteration参数增加到一个很大的数字。培训过程需要更多时间,但结果仍然相同。
我尝试使用libsvm库(https://www.csie.ntu.edu.tw/~cjlin/libsvm/)来查看是否发生了相同的行为。有趣的是,它运作良好。我使用Windows" svm-train.exe"和" svm-predict.exe"命令验证它并且响应是准确的。 我甚至试图通过使用一些脏系统调用和文件I / O来运行OpenCV程序上的可执行文件。使用训练行得到的答案是正确的。
我怀疑我的SVM参数有问题。即使使用train_auto函数,SVM模型仍然显示奇怪的行为。我想知道是否有人可以帮我在OpenCV 3.0中正确设置SVM参数?