事实并非如此。
这个
BallTree
对象未更改您的数据。
-
它会创建数据的副本,因为:
注意:如果X是一个C连续的双精度数组,那么数据将不会
已复制。否则,将制作内部副本。
-
它计算对象与树节点边界之间的距离。如下面所示,您可以使用
get_arrays
函数获取内部数组,通过检查源代码,您可以意识到边界是
[7.5, 9. , 3.5]
,这是它将对象与之进行比较的对象。
Source
:
def get_arrays(self):
return (self.data_arr, self.idx_array_arr,
self.node_data_arr, self.node_bounds_arr)
和输出:
bt.get_arrays()
Out[x]:
(array([[12., 15., 0.],
[ 3., 3., 7.]]), array([0, 1]), array([(0, 2, 1, 1.)],
dtype=[('idx_start', '<i8'), ('idx_end', '<i8'), ('is_leaf', '<i8'), ('radius', '<f8')]), array([[[7.5, 9. , 3.5]]]))
因此,您的度量将应用于数据和节点,而不仅仅是您自身的数据,并且节点与您的数据不同。您可以尝试单词嵌入,这将允许您计算距离,而无需对数据进行解码。不确定您想做什么,但基于树的模型可能不是您用例的最佳方式。