【问题标题】:Defining distance parameter (V) in knn crossval grid search (seuclidean/mahalanobis distance metrics)在 knn crossval 网格搜索中定义距离参数 (V)(seuclidean/mahalanobis 距离度量)
【发布时间】:2020-05-06 21:20:09
【问题描述】:

我正在尝试使用 python sklearn 的 KNN 算法执行 k 折交叉验证网格搜索,搜索中的参数是邻居数 K 和距离度量。我将 mahalanobis 和 seuclidean 作为距离度量,并且理解它们有一个需要指定的参数,即 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) (*)

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

TypeError: __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

任何帮助表示赞赏!

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

【问题讨论】:

    标签: python scikit-learn knn gridsearchcv mahalanobis


    【解决方案1】:
    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 参数。所以你需要将它们分开。

    【讨论】:

      猜你喜欢
      • 2013-04-22
      • 2012-06-20
      • 2021-06-25
      • 2014-07-09
      • 1970-01-01
      • 2010-12-28
      • 1970-01-01
      • 1970-01-01
      • 2018-10-08
      相关资源
      最近更新 更多