如何使用 cosine_similarity 运行 KNN?

use*_*129 2 machine-learning knn scikit-learn

我正在尝试跑步cosine_similarity,但KNN Classifier没有成功。

from sklearn.metrics.pairwise import cosine_similarity
knn = KNeighborsClassifier(n_neighbors=10,  metric=cosine_similarity).fit(x, y)
Run Code Online (Sandbox Code Playgroud)

x 的形状(150 个样本,4 个特征):

(150, 4)
Run Code Online (Sandbox Code Playgroud)

y 的形状:

(150,)
Run Code Online (Sandbox Code Playgroud)

我收到错误:

ValueError: Expected 2D array, got 1D array instead
Run Code Online (Sandbox Code Playgroud)

我曾尝试重塑x,但无论成功reshape(-1,1)还是rehsape(1,-1)失败。

我如何 KNN Classifier在这个数据集(x 有 4 个特征)上运行cosine_similarity

afs*_*rov 5

问题是余弦相似度仅由最近邻算法的强力变体支持。您有两种选择来完成这项工作:

选项 1:明确指定使用暴力算法algorithm='brute'

from sklearn.datasets import make_classification
from sklearn.metrics.pairwise import cosine_similarity
from sklearn.neighbors import KNeighborsClassifier


X, y = make_classification(n_samples=150, n_features=4, random_state=42)

knn = KNeighborsClassifier(n_neighbors=10, algorithm='brute',  metric=cosine_similarity)
knn.fit(X, y)
Run Code Online (Sandbox Code Playgroud)

选项 2:指定metric='cosine'自动选择暴力算法:

from sklearn.datasets import make_classification
from sklearn.metrics.pairwise import cosine_similarity
from sklearn.neighbors import KNeighborsClassifier


X, y = make_classification(n_samples=150, n_features=4, random_state=42)

knn = KNeighborsClassifier(n_neighbors=10,  metric='cosine')
knn.fit(X, y)
Run Code Online (Sandbox Code Playgroud)

如果您想了解有关不同最近邻算法的更多信息,可以参考用户指南