在 knn 交叉网格搜索中定义距离参数 (V)(seuclidean/mahalanobis 距离度量)
Defining distance parameter (V) in knn crossval grid search (seuclidean/mahalanobis distance metrics)
我正在尝试使用 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
感谢任何帮助!
这也是我的第一个问题,所以任何反馈都会对这方面有所帮助。
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)}]}
]
问题是 euclidean
和 minkowski
指标不接受 V
参数。所以你需要把它们分开。
我正在尝试使用 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
感谢任何帮助!
这也是我的第一个问题,所以任何反馈都会对这方面有所帮助。
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)}]}
]
问题是 euclidean
和 minkowski
指标不接受 V
参数。所以你需要把它们分开。