我正在尝试使用 Mahalanobis 作为距离度量来实现 KNN 模型,但是当我执行代码时出现错误:
值错误:“V 的大小不匹配
其中 V 是特征的协方差矩阵。
我的代码的相关部分如下:
X_train, X_test, y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=10,stratify=y)
knn2=KNeighborsClassifier(n_neighbors=20, metric='mahalanobis', metric_params={'V': np.cov(X_train)})
knn2.fit(X_train,y_train) # this is the line that causes the error.
我在 github 上查看了 sklearn 的距离度量代码的 repo (从第 628 行开始是 Mahalanobis),并且可以看到错误来自以下原因:
cdef inline DTYPE_t rdist(self, DTYPE_t* x1, DTYPE_t* x2,
ITYPE_t size) nogil except -1:
if size != self.size:
with gil:
raise ValueError('Mahalanobis dist: size of V does not match')
我已经弄清楚了self.size
我的情况,但无法弄清楚size
是什么。
任何人都可以帮助解决这个错误吗?
谢谢