我有以下代码片段尝试进行网格搜索,其中一个网格参数是用于 KNN 算法的距离度量。如果我使用“wminkowski”、“seuclidean”或“mahalanobis”距离度量,下面的示例将失败。
# Define the parameter values that should be searched
k_range = range(1,31)
weights = ['uniform' , 'distance']
algos = ['auto', 'ball_tree', 'kd_tree', 'brute']
leaf_sizes = range(10, 60, 10)
metrics = ["euclidean", "manhattan", "chebyshev", "minkowski", "mahalanobis"]
param_grid = dict(n_neighbors = list(k_range), weights = weights, algorithm = algos, leaf_size = list(leaf_sizes), metric=metrics)
param_grid
# Instantiate the algorithm
knn = KNeighborsClassifier(n_neighbors=10)
# Instantiate the grid
grid = GridSearchCV(knn, param_grid=param_grid, cv=10, scoring='accuracy', n_jobs=-1)
# Fit the models using the grid parameters
grid.fit(X,y)
我认为这是因为我必须设置或定义各种距离参数的范围(例如 p, w 代表“wminkowski” - WMinkowskiDistance )。“minkowski”距离可能有效,因为它的“p”参数默认为 2。
所以我的问题是:
- 我们可以为网格搜索的距离度量设置参数范围吗?如果可以,如何设置?
- 我们可以为网格搜索的距离度量设置参数值吗?如果可以,如何设置?
希望问题很清楚。TIA