0

我想通过 Matlab 中的 KNN 方法对数据集进行分类,但在计算具有不同数据类型的数据点的距离时遇到问题。

我的数据集中的每个点都具有数字和字符串类型的各种特征,例如X{Size,Lenght,Age,Coating,PipeType,Location} 前三个特征具有数字,后三个特征具有字符串(一个或两个单词)值。

如果我将字符串特征映射到二进制代码,例如涂层值包括{Concrete encased,Gunite,Tar Coating,Poliken Coating}如果我考虑两位{00,01,10,11} 如果我这样计算 X 和 Y 的距离是否合乎逻辑:

X:{Size,Lenght,Age,Coating,PipeType,Location}
Y:{Size,Lenght,Age,Coating,PipeType,Location}

Distance= Euclidean Distance (X,Y) on {Size,Lenght,Age} 
            + Hamming Distance (X,Y) on {Coating}
            + Hamming Distance (X,Y) on {PipeType}
            + Hamming Distance (X,Y) on {Location}

或者

Distance= Euclidean Distance (X,Y) on {Size,Lenght,Age} 
          + {1 if a x and y have similar coating values and 0 otherwise}
          + ...

我真的很感谢你的建议。这方面的建议文章和文件也很有用。

谢谢玛莎

4

1 回答 1

0

对于二进制向量,汉明距离和欧几里得距离实际上是相同的。
因此,您可以将特征转换为长度为 4'Coating'的二进制向量:

coating_vec( ii ) == 1 iff instance_coating == Coating_type{ii}

也就是说,对于具有涂层值“Tar”(第三个可能的涂层值)的实例,涂层的二元特征向量将是[0 0 1 0]

PipeType对和做同样的Location事情,你最终会得到一个长度为的特征向量3 + 4 + numPossible(PipeType) + numPossible(Location)。取这些组合特征向量之间的欧式距离应该可以解决问题。

于 2013-10-17T05:45:26.823 回答