【发布时间】:2024-01-13 15:01:01
【问题描述】:
我将在一个数据集上尝试 kNN 分类,该数据集除其他特征外,还包含称为“一天中的时间”的特征。在应用程序的上下文中,星期一 23:58 与星期五 00:04 一样接近星期二 00:02。重要的是钟面上时针的角度。如果不是那个圆形特征,欧几里得距离就可以了。
到目前为止,我知道class::knn() 和caret::knn3()。但是,我看不到一种方法可以向他们提供我自己的自定义距离度量,甚至没有预先计算的距离矩阵。你知道这样做的方法吗?
一个可能的替代方案是数据准备中的一个额外步骤,即用两个线性(角度 θ 变为一个点 (cosθ,sinθ) )替换圆形特征,或者在 00:00 复制训练集中的数据点边界导致边界消失:https://stats.stackexchange.com/questions/51908/nearest-neighbor-algorithm-for-circular-dimensions 但是,如果可能的话,我宁愿避免将一维替换为二维并创建数据点的副本。
另一种方法是自己计算距离矩阵,然后实现kNN。这听起来很像重新发明*。
我正在寻找一种方法来插入我自己的自定义距离度量的另一个原因如下。虽然周二 15:01 点到周三 15:02 点之间的距离为 1 分钟,但周日 23:00 UTC(货币交易市场开市)被认为与其他任何一天的 23:00 相距“远”。也可能出现其他特殊情况。
【问题讨论】: