假设我的数据点具有许多特征,包括纬度、经度坐标。
我想使用 KNeighborsRegressor,在经纬度上使用度量“haversine”。如何为回归器准备数据X_train, Y_train
? .
k_clf = KNeighborsRegressor(n_neighbors=num_neigh,weights=myweights,algorithm='ball_tree',metric='haversine')
clf.fit(X_train,Y_train)
或者,如果我决定编写自己的指标,该函数会接收一个 numpy ndarray,每个点有 10 个值,我如何区分纬度和经度?
最佳答案
来自 sklearn 文档:http://scikit-learn.org/stable/modules/generated/sklearn.neighbors.DistanceMetric.html
对于问题的第一部分:使用半正矢度量进行 KNN 回归:
用于二维向量空间的度量:请注意,半正弦距离度量需要 [纬度、经度] 形式的数据,并且输入和输出均以弧度为单位。
因此,X_train
的第一列应该是纬度,第二列应该是经度。
现在,对于问题的第二部分,如果您想定义自己的指标,那么您可以选择 X_train
的格式。但请记住,如果您想使用“ball_tree”
算法,您的度量必须是数学距离:
Non-negativity: d(x, y) >= 0
Identity: d(x, y) = 0 if and only if x == y
Symmetry: d(x, y) = d(y, x)
Triangle Inequality: d(x, y) + d(y, z) >= d(x, z)
否则你将只能使用“brute”
算法。
关于python - 如何将 KNeighborsRegressor 与半正矢度量一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42511056/