python - 我有一些图像数据,我正在用它训练我的 SVM 分类器,我发现支持向量全部为零。这是什么意思?

标签 python image-processing machine-learning svm

这是我正在使用的代码。

nfiles=40
i=0
y=[1]*20
y.extend([-1]*20)
traindata =np.zeros((40,1024));
for im in glob.glob("/home/name/Desktop/database/20trainset/*.png "):
    img = cv2.imread(im)
    img = im2double(img)
    img = rgb2gray(img)
    traindata[i] =img.reshape((1,1024))
    i+=1

clf = svm.SVC( kernel='rbf',C=0.05)
clf.fit(traindata,y)
print clf.support_vectors_

i 用于记录文件数量。

有什么问题吗?

最佳答案

这意味着使用您的参数,最佳 SVM 不执行任何操作(构建一个简单的模型,仅回答一个标签)。

cl(x) = sign( SUM_i alpha_i y_i K(x_i, x) + b ) = sign( b ) = const.

所以,是的,有问题,因为您的模型根本不使用您的训练数据

原因是什么?为了使用 RBF-SVM,您需要拟合两个超参数:gammaC,特别是 C=0.05(可能)是幅度太小,无法正常工作。另外 - 请记住对数据进行标准化,因为图像通常表示为像素强度值 (0-255),而 SVM 对于正态分布值效果更好。 Gamma 也必须仔细拟合(它在 scikit-learn 中的默认值是 1/特征数,因此它实际上是对一个好的值的粗略猜测,很少是一个好的值)。

作为示例,请参阅 libsvm website以及显示 C 和 gamma 值与心脏数据集上获得的精度之间关系的图

enter image description here

关于python - 我有一些图像数据,我正在用它训练我的 SVM 分类器,我发现支持向量全部为零。这是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34482004/

相关文章:

python - celery python对象方法

r - 选择点的邻域并将其转换为向量

python - 使用 2D 图像在 Python 中进行 Lanczos 插值

python - 如何计算损失梯度 w.r.t 以模拟 Keras 模型中的输入?

machine-learning - 人工神经网络在姿态估计中的适用性

python - 从头开始实现决策树的分支时遇到困难(长)

python - 如何使用 MongoDB 2.4 对 2d 或 2dsphere 索引字段使用常规查询

python - 使用 python-nltk 请求的回指解析示例

matlab - matlab 中的 3D 互相关

python-3.x - cumalativive 所有其他列都需要 python ML 中带有 cumsum() 的日期列