我有一个带标签的数据集,特征维度为46D,样本数量约为5000个,我希望使用近似最近邻方法对其进行分类。
由于我熟悉Scikit-Learn,我想利用它来实现这一目标。
Scikit-Learn的文档中列出了LSHForest作为ANN的可能方法之一,但我并不清楚如何将其应用于分类目的。
回答:
非常好的问题。不幸的是,目前Scikit-Learn似乎不支持自定义邻居模型,不过,你可以自己实现一个简单的包装器,例如
from sklearn.neighbors import LSHForestimport numpy as npfrom scipy.stats import modeclass LSH_KNN: def __init__(self, **kwargs): self.n_neighbors = kwargs['n_neighbors'] self.lsh = LSHForest(**kwargs) def fit(self, X, y): self.y = y self.lsh.fit(X) def predict(self, X): _, indices = self.lsh.kneighbors(X, n_neighbors = self.n_neighbors) votes, _ = mode(self.y[indices], axis=1) return votes.flatten()