python - 在 knn crossval 网格搜索中定义距离参数 (V)(seuclidean/mahalanobis 距离度量)

标签 python scikit-learn knn gridsearchcv mahalanobis

我正在尝试使用 python sklearn 使用 KNN 算法进行 k 倍交叉验证网格搜索,搜索中的参数是邻居 K 的数量和距离度量。我将马哈拉诺比斯和塞几里得作为距离度量,并理解它们有一个需要指定的参数,即 V 或 VI(特征的协方差矩阵或其逆矩阵)。

下面是我的代码:

X_train, X_test, y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=10,stratify=y)

knn=KNeighborsClassifier()

grid_param={'n_neighbors':np.arange(1,51),'metric':['euclidean','minkowski','mahalanobis','seuclidean'],'metric_params':[{'V': np.cov(X_train)}]} 

knn_gscv=GridSearchCV(knn,grid_param,cv=5)

knn_gscv.fit(X_train,y_train) (*)

(*) 行在执行时抛出此错误:

类型错误:__init__() 得到意外的关键字参数“V”

我也尝试过 VI 而不是 V,但得到了同样的错误。

我在下面遇到了潜在的解决方案,但这些没有帮助。

https://github.com/scikit-learn/scikit-learn/issues/6915

Scikit-learn: How do we define a distance metric's parameter for grid search

感谢任何帮助!

这也是我的第一个问题,因此任何反馈在这方面也会有所帮助。

最佳答案

grid_params = [
    {'n_neighbors': np.arange(1, 51), 'metric': ['euclidean', 'minkowski']},
    {'n_neighbors': np.arange(1, 51), 'metric': ['mahalanobis', 'seuclidean'],
     'metric_params': [{'V': np.cov(X_train)}]}
]

问题是 euclideanminkowski 指标不接受 V 参数。所以你需要将它们分开。

关于python - 在 knn crossval 网格搜索中定义距离参数 (V)(seuclidean/mahalanobis 距离度量),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59830510/

相关文章:

python - 在 python 中使用多个控制台

python - 将字符串格式化为 Python 中的特定字符限制

python - 带有置信带的机器学习二维回归

r - R中knn中所有分类的概率

python - 在 groovy 中识别 map

python - 指定 Scikit-learn 中某个误差度量的值越低越好

python - 使用 sklearn imputer 类时数组索引过多

python - 最后分层 K 折性能独特

machine-learning - 仅包含 "yes"个实例的二元分类

python - 当使用k个最近邻居时,有没有办法检索所使用的 "neighbors"?