首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >支持向量机分类中如何缩放输入特征?

支持向量机分类中如何缩放输入特征?
EN

Stack Overflow用户
提问于 2015-09-12 20:12:08
回答 1查看 1.4K关注 0票数 2

我试图用MATLAB中的支持向量机进行两类分类.这两个类别分别为“正常”和“感染”,分别将细胞图像分为正常或受感染。

我使用了一个训练集,它由1000个正常细胞图像和300个感染细胞图像组成。我从每个细胞中提取了72个特征。因此,我的训练特征集矩阵是72x1300,其中每一行代表一个特征,每一列代表从相应图像测量的相应特征值。

代码语言:javascript
复制
data: 72x1300 double

我的类标签向量初始化为:

代码语言:javascript
复制
cellLabel(1:1000) = {'normal'};
cellLabel(1001:1300) = {'infected'};

正如在这些链接中所研究的:http://www.csie.ntu.edu.tw/~cjlin/papers/guide/guide.pdfsvm scaling input values,我开始缩放特性值,这样做:

代码语言:javascript
复制
for i=1:1:size(data,1)
mu(i) = mean(data(:,i));
sd(i) = std(data(:,i));
scaledData(:,i) = (data(:,i) - mu(i))./sd(i);
end

对于测试,我读取一个测试映像并计算一个72x1特征向量。在分类之前,我使用与“数据”对应的平均值和标准差值对测试向量进行缩放,然后进行分类。如果我这样做,我将获得0%的训练准确率。然而,如果我从每一个班级分别进行分级和串联,我将获得98%的训练准确率。有人能解释一下我的方法是否正确吗?为了训练准确性,我知道我使用的是什么图像,因此读取平均值和SD值。在图像标签未知的情况下,我该如何做?

我就是这样训练的:

代码语言:javascript
复制
[idx,z] = rankfeatures(data,cellLabel,'Criterion','wilcoxon','NUMBER',7);
rnkData = data(idx,:);
rnkData = rnkData';
cellLabel = cellLabel';
SVMModel = fitcsvm(rnkData,cellLabel,'Standardize',true,'KernelFunction','RBF','KernelScale','auto');

您可以看到,我尝试使用内置的缩放属性,但是无论输入是什么,分类都倾向于显示“正常”类。

EN

回答 1

Stack Overflow用户

发布于 2015-09-14 12:55:09

相应的均值和标准差值

您这是什么意思?你有刻薄和性病。dev.每一个特征?为什么不使用实际的min/max?

我不知道在Matlab中实现这个方法是否可行,但是在我的OpenCV/SVM代码中,我存储了每个特征的训练数据中的所有min/max值,并使用这些min/max值来缩放相应特征的测试数据。

如果测试数据的值经常超出训练数据的min/max范围,这是训练数据数量不足的强烈提示。使用平均值和性病。dev.值,您将不会如此显式地检测到这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32543258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档