我想在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}
+ ...
我非常感谢你的建议。 该领域的建议文章和文件也很有用。
由于 Mahsa
答案 0 :(得分:0)
对于二元向量,汉明距离和欧几里德距离实际上是相同的
因此,您可以将'Coating'
要素转换为长度为4的二进制向量:
coating_vec( ii ) == 1 iff instance_coating == Coating_type{ii}
也就是说,对于涂层值为“Tar”(第三个可能的涂层值)的实例,涂层的二元特征向量为[0 0 1 0]
。
对PipeType
和Location
执行相同的操作,您将获得长度为3 + 4 + numPossible(PipeType) + numPossible(Location)
的要素向量。取这些组合特征向量之间的Euslidean距离应该可以帮到你。