我想使用knnimpute填充数据集中的一些缺失值。事情是,我想使用我自己的距离函数,而不是典型的距离函数(Euclidean,曼哈顿......)。
对于我所读到的内容,knnimpute
允许我使用函数句柄,根据Heterogeneous Euclidean-Overlap Metric (HEOM)计算距离
我已将此函数实现为常规函数,但不是作为句柄函数。所以,我不能使用我的“普通”函数中的距离矩阵,因为这必须在knnimpute
内完成,不知何故,作为处理程序......
我很困惑,有人可以帮我理解我需要做什么吗?
答案 0 :(得分:2)
只要您的距离函数的实现具有与标准距离函数相同的签名,那么您应该能够轻松地传递您的函数。
来自 knnimpute 文档(matlab knnimpute),它声明您可以传递" 使用@指定的距离函数的句柄,例如@distfun "然后它会引导读者阅读 pdist 函数,该函数提供有关自定义距离函数的更多详细信息(matlab pdist):
使用@指定的距离函数: D = pdist(X,@ distfun) 距离函数必须是形式 d2 = distfun(XI,XJ) 取对应于X的单行的1×n向量XI和对应于X的多行的m2-by-n矩阵XJ作为参数.distfun必须接受具有任意行数的矩阵XJ。 distfun必须返回距离d2的m2-by-1向量,其第k个元素是XI和XJ之间的距离(k,:)。
因此,只要您的* .m文件中定义的距离函数与此签名匹配,因此可以支持这些输入,那么就不会有任何问题。
假设您的距离函数位于 mydistFunc.m 文件中,并且它的签名符合上述要求,那么您需要做的就是:
% call knnimpute with the data and your function
knnimpute(inputData,'Distance',@mydistFunc);