我怎样才能用Python的最近邻居algorithm分类数据?

我需要用(我希望)最近邻居algorithm分类一些数据。 我GOOGLE了这个问题,发现了很多库(包括PyML,mlPy和Orange),但我不确定从哪里开始。

我应该如何去使用Python来实现k-NN?

特别是考虑到你在Q中提到的技术(k-Nearest Neighbors),我强烈推荐scikits.learn 。 [ :本答案发布后,本项目的首席开发人员向我通报了本项目的新主页 。]

我相信区分这个库和其他的一些特征(至less是我使用过的其他Python ML库,其中大多数是):

  • 一个广泛的诊断和testing库 (包括绘图模块,通过Matplotlib) – 包括特征selectalgorithm, 混淆matrix ,ROC,精密调用等;

  • 一个很好的select,特别适合ML技术的“电池包括” 数据集 (包括手写数字,面部图像等);

  • 大量的文档 (这个项目只有大约两年的时间,这是一个惊喜),包括教程和分步示例代码(使用提供的数据集);

毫无例外(至less我现在可以想到)python ML库非常棒。 (请参阅PyMVPA homepag e了解十几个最受欢迎的Python ML库的列表。)

例如,在过去的12个月中,我使用了ffnet (用于MLP), neurolab (也用于MLP), PyBrain (Q-Learning), neurolab (MLP)和PyMVPA (SVM)(均可从Python Package Index获得 ) – 这些相互之间有很大的差别,但是我发现它们都是非常高的质量。

不过,其中最好的可能是scikits.learn ; 例如,我不知道任何Python ML库 – 除了scikits.learn – 包括我上面提到的三个特性中的任何一个(虽然有一些有可靠的示例代码和/或教程,但我不知道集成这些研究级数据库和诊断algorithm库)。

其次,考虑到你打算使用的技术( k-nearest neighbor )scikits.learn是一个非常好的select。 Scikits.learn包含用于回归 (返回分数)和分类 (返回类标签)的kNNalgorithm,以及每个algorithm的详细示例代码。

使用scikits.learn k-nearest neighbour模块(字面上)不会更容易:

>>> # import NumPy and the relevant scikits.learn module >>> import numpy as NP >>> from sklearn import neighbors as kNN >>> # load one of the sklearn-suppplied data sets >>> from sklearn import datasets >>> iris = datasets.load_iris() >>> # the call to load_iris() loaded both the data and the class labels, so >>> # bind each to its own variable >>> data = iris.data >>> class_labels = iris.target >>> # construct a classifier-builder by instantiating the kNN module's primary class >>> kNN1 = kNN.NeighborsClassifier() >>> # now construct ('train') the classifier by passing the data and class labels >>> # to the classifier-builder >>> kNN1.fit(data, class_labels) NeighborsClassifier(n_neighbors=5, leaf_size=20, algorithm='auto') 

更重要的是,与几乎所有其他ML技术不同的是,k最近邻的关键不在于对工作分类器构build器进行编码,而是构build生产级k-最近邻分类器/回归器的困难步骤是持久层 – 即, 存储和快速检索从中select最近的邻居的数据点 。 对于kNN数据存储层,scikits.learn包含一个球树的algorithm(除了kd-tree (k-NN的传统数据结构)之外,我几乎不知道其它algorithm,因为它的性能没有在更高维空间中降解。

此外,k最近邻居需要一个适当的相似性度量(欧几里得距离是通常的select,但并不总是最好的)。 Scikits.learn包含一个由各种距离指标组成的独立模块,以及用于select合适的一个的testingalgorithm。

最后,还有一些我没有提到的库,因为它们超出了范围(PyML,贝叶斯)。 他们主要不是开发者的“图书馆”,而是最终用户的应用程序(如Orange),或者他们有不寻常的或难以安装的依赖项(例如mlpy,这需要gsl,而gsl又必须从源)至less为我的操作系统,这是Mac OS X.

注意 :我不是scikits.learn的开发者/提交者。)