从特征向量分类

Classification from a feature vector

我对此很陌生;我尝试将纹理分类为有缺陷或无缺陷。我在 Matlab 中使用了 Gabor 滤波器组,它输出图像的 Gabor 特征的列向量。我有一组无缺陷图像和有缺陷图像的数据集。

我的问题是,我现在可以用这个(或这些)特征向量做什么来对纹理进行分类?我读过很多类型的分类,但找不到任何类似的实现类型来帮助我了解我在做什么。非常感谢。

如果您已经提取了特征向量,还有很多方法可以去。

  • 例如,您可以对来自两个 类.

  • 的样本使用 svm 方法
  • 更简单的方法包括最近邻、最近质心等

编辑:

我以为这会是一条评论,但它太大了,放不下。

关于你的样品的可分离性:

  • 确定线性可分性的一种方法是使用线性 svm 作为边界(除非您担心时间效率,所以无论如何您都会坚持使用线性)。此 svm 模型不会过度训练,并且可以提供有关可分离性的线索。
  • 其他选项包括一个 pca,它将您的样本投射到更少的维度,并且可以轻松地绘制这些减少维度的样本以进行视觉检查。这种方法具有目视检查的优势,但它取决于主成分分析步骤它代表样品可分离性的程度。也许可分离性在于非主成分(即样本的维度),然后 pca 就失败了。
  • 作为粗略的近似值,我经常将样本的随机尺寸绘制在一起,以便快速(当然也可能不准确)查看它们。例如,如果您有 100 维的样本,您可以仅绘制前两个维度(就像您有二维样本一样)以查看您的两个 类 是否在很大程度上发生碰撞。如果他们这样做,那么您可以检查其他维度,但如果他们不这样做,那么您知道他们至少在某些维度上是可分离的。

您可以使用支持向量机 (SVM) 或神经网络。 SVM 被广泛使用并给出了很好的结果。如何在 Matlab 中使用它的示例。

  1. 首先,您需要将您的数据分为'Training'和'Testing'组。
  2. 'Training' set 是你知道的那个,即在你的情况下你知道哪些纹理有缺陷,哪些没有缺陷。
  3. 'Testing' 集合是您要测试分类方法的集合。

假设 training 矩阵包含所有训练集图像的 Gabor 特征,其中每一行对应于图像的特征向量(转置列向量)。让我们假设前 25 个是无缺陷的,接下来的 25 个是有缺陷的。现在,您需要创建一个 group 矩阵来告诉 SVM 哪些有缺陷,哪些没有。所以,

group = [ones(25,1); -1*ones(25,1)]; // non-defective = 1, defective = -1    
SVMStruct = svmtrain(training, group);

SVMStruct 是您将用于对 'Testing' 数据进行分类的支持向量。假设 testing 矩阵包含之前的 Gabor 特征。

results = svmclassify(SVMStruct, testing);

results 是最终决策矩阵,其中包含 1 或 -1,具体取决于所做的决策。