scikit-learn报”ValueError: radius neighbours are not implemented for KDTree or BallTree yet “的原因以及解决办法

  • Post category:Python

该错误通常发生在使用scikit-learn库的KNeighborsRegressor或KNeighborsClassifier算法时,因为默认的算法是球树(BallTree)或K-D Tree(KDTree),但是球树和K-D Tree不支持半径邻居(Radius Neighbors)搜索。

因此,如果在使用KNeighborsRegressor或KNeighborsClassifier算法时,需要使用半径邻居搜索,则需要使用另一种算法来代替球树或K-D Tree,默认情况下使用Brute-Force算法。

下面是解决方案:

首先,需要将算法参数中的algorithm设置为’brute’。

knn = KNeighborsRegressor(n_neighbors=5, algorithm='brute', radius=0.5)

其次,需要将metric参数设置为’minkowski’,如果使用其他的距离度量方式,该参数需要相应的改变。

knn = KNeighborsRegressor(n_neighbors=5, algorithm='brute', metric='minkowski', p=2, radius=0.5)

最后,需要使用fit()函数将训练数据拟合到算法上。

knn.fit(X_train, y_train)