从特征向量分类
Classification from a feature vector
我对此很陌生;我尝试将纹理分类为有缺陷或无缺陷。我在 Matlab 中使用了 Gabor 滤波器组,它输出图像的 Gabor 特征的列向量。我有一组无缺陷图像和有缺陷图像的数据集。
我的问题是,我现在可以用这个(或这些)特征向量做什么来对纹理进行分类?我读过很多类型的分类,但找不到任何类似的实现类型来帮助我了解我在做什么。非常感谢。
如果您已经提取了特征向量,还有很多方法可以去。
例如,您可以对来自两个 类.
的样本使用 svm 方法
更简单的方法包括最近邻、最近质心等
编辑:
我以为这会是一条评论,但它太大了,放不下。
关于你的样品的可分离性:
- 确定线性可分性的一种方法是使用线性 svm 作为边界(除非您担心时间效率,所以无论如何您都会坚持使用线性)。此 svm 模型不会过度训练,并且可以提供有关可分离性的线索。
- 其他选项包括一个 pca,它将您的样本投射到更少的维度,并且可以轻松地绘制这些减少维度的样本以进行视觉检查。这种方法具有目视检查的优势,但它取决于主成分分析步骤它代表样品可分离性的程度。也许可分离性在于非主成分(即样本的维度),然后 pca 就失败了。
- 作为粗略的近似值,我经常将样本的随机尺寸绘制在一起,以便快速(当然也可能不准确)查看它们。例如,如果您有 100 维的样本,您可以仅绘制前两个维度(就像您有二维样本一样)以查看您的两个 类 是否在很大程度上发生碰撞。如果他们这样做,那么您可以检查其他维度,但如果他们不这样做,那么您知道他们至少在某些维度上是可分离的。
您可以使用支持向量机 (SVM) 或神经网络。 SVM 被广泛使用并给出了很好的结果。如何在 Matlab 中使用它的示例。
- 首先,您需要将您的数据分为'Training'和'Testing'组。
- 'Training' set 是你知道的那个,即在你的情况下你知道哪些纹理有缺陷,哪些没有缺陷。
- '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,具体取决于所做的决策。
我对此很陌生;我尝试将纹理分类为有缺陷或无缺陷。我在 Matlab 中使用了 Gabor 滤波器组,它输出图像的 Gabor 特征的列向量。我有一组无缺陷图像和有缺陷图像的数据集。
我的问题是,我现在可以用这个(或这些)特征向量做什么来对纹理进行分类?我读过很多类型的分类,但找不到任何类似的实现类型来帮助我了解我在做什么。非常感谢。
如果您已经提取了特征向量,还有很多方法可以去。
例如,您可以对来自两个 类.
的样本使用 svm 方法
更简单的方法包括最近邻、最近质心等
编辑:
我以为这会是一条评论,但它太大了,放不下。
关于你的样品的可分离性:
- 确定线性可分性的一种方法是使用线性 svm 作为边界(除非您担心时间效率,所以无论如何您都会坚持使用线性)。此 svm 模型不会过度训练,并且可以提供有关可分离性的线索。
- 其他选项包括一个 pca,它将您的样本投射到更少的维度,并且可以轻松地绘制这些减少维度的样本以进行视觉检查。这种方法具有目视检查的优势,但它取决于主成分分析步骤它代表样品可分离性的程度。也许可分离性在于非主成分(即样本的维度),然后 pca 就失败了。
- 作为粗略的近似值,我经常将样本的随机尺寸绘制在一起,以便快速(当然也可能不准确)查看它们。例如,如果您有 100 维的样本,您可以仅绘制前两个维度(就像您有二维样本一样)以查看您的两个 类 是否在很大程度上发生碰撞。如果他们这样做,那么您可以检查其他维度,但如果他们不这样做,那么您知道他们至少在某些维度上是可分离的。
您可以使用支持向量机 (SVM) 或神经网络。 SVM 被广泛使用并给出了很好的结果。如何在 Matlab 中使用它的示例。
- 首先,您需要将您的数据分为'Training'和'Testing'组。
- 'Training' set 是你知道的那个,即在你的情况下你知道哪些纹理有缺陷,哪些没有缺陷。
- '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,具体取决于所做的决策。