我有一个数据集,其中所有功能都是二进制的,每个数据点的类也是二进制的。我正在尝试将KNearestClassifier与用户定义的距离函数配合使用,如下所示:
KNN = KNeighborsClassifier(n_neighbors=3,
algorithm='ball_tree',
metric='pyfunc',
metric_params={"func": lev_metric})
x_train, x_test, y_train, y_test = train_test_split(df_sum,
y,
test_size=0.1,
random_state=0)
KNN.fit(x_train, y_train)
和我的自定义指标函数如下:
def lev_metric(a, b):
print(a)
print(b)
return levenshtein(a, b)
度量标准函数期望两个二进制数组,分别是0s和1s的二进制值。当knn.fit
调用度量函数时,“ b”看起来像预期的那样(例如[0 1 1 0 0 1 0 1 ...]),但“ a”看起来像胡言乱语,是具有介于0和0之间的实数值元素的ndarray。 1,例如:
[0.32222222 0.42222222 0.34444444 0.47777778 0.41111111 0.38888889
0.4 0.31111111 0.35555556 0.35555556 0.42222222 0.46666667
0.36666667 0.32222222 0.41111111 0.32222222 0.36666667 0.35555556
0.41111111 0.33333333 0.4 0.42222222 0.3 0.37777778
0.38888889 0.48888889 0.41111111 0.43333333 0.34444444 0.35555556
0.43333333 0.38888889 0.43333333 0.32222222 0.47777778 0.34444444...
我想念什么?在传递给分类器之前,我还检查了“ x_train”是否正确。