我尝试使用cosine_similarity
和KNN Classifier
运行,但未成功。
from sklearn.metrics.pairwise import cosine_similarityknn = KNeighborsClassifier(n_neighbors=10, metric=cosine_similarity).fit(x, y)
x的形状(150个样本,每个样本有4个特征):
(150, 4)
y的形状:
(150,)
我得到了以下错误:
ValueError: Expected 2D array, got 1D array instead
我尝试使用reshape(-1,1)
或rehsape(1,-1)
重塑x
,但都没有成功。
如何在这个数据集上(x有4个特征)使用cosine_similarity
运行KNN Classifier
?
回答:
问题在于余弦相似度仅支持最近邻算法的暴力变体。你有两个选项可以使其工作:
选项1:明确指定使用暴力算法,设置algorithm='brute'
:
from sklearn.datasets import make_classificationfrom sklearn.metrics.pairwise import cosine_similarityfrom sklearn.neighbors import KNeighborsClassifierX, 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)
选项2:指定metric='cosine'
,它将自动选择暴力算法:
from sklearn.datasets import make_classificationfrom sklearn.metrics.pairwise import cosine_similarityfrom sklearn.neighbors import KNeighborsClassifierX, y = make_classification(n_samples=150, n_features=4, random_state=42)knn = KNeighborsClassifier(n_neighbors=10, metric='cosine')knn.fit(X, y)
如果你想了解更多关于不同最近邻算法的信息,可以参考用户指南。