如何使用Python使用最邻近算法对数据进行分类?
machine-learning
python
6
0

我需要使用(我希望)最近邻居算法对一些数据进行分类。我已经用谷歌搜索了这个问题,发现了很多库(包括PyML,mlPy和Orange),但是我不确定从哪里开始。

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

参考资料:
Stack Overflow
收藏
评论
共 1 个回答
高赞 时间 活跃

特别是考虑到您在Q中提到的技术(k最近邻),我强烈建议scikits.learn 。 [ 注意 :发布此答案后,该项目的首席开发人员向我通知了该项目的新主页

我认为有一些功能可以将此库与其他库区分开(至少是我使用的其他Python ML库,其中大多数是):

  • 广泛的诊断和测试库 (包括通过Matplotlib进行的绘图模块)-包括功能选择算法, 混淆矩阵 ,ROC,精确调用等;

  • 精选了“含电池” 数据集 (包括手写数字,面部图像等),特别适合ML技术;

  • 广泛的文档 (考虑到该项目只有两年的历史,这是一个令人惊讶的发现),包括教程和分步示例代码(使用提供的数据集);

毫无例外(至少我现在可以想到)python ML库非常出色。 (有关十二种左右最受欢迎的python ML库的列表,请参见PyMVPA homepag e。)

例如,在过去的12个月中,我使用了ffnet (用于MLP), neurolab (也用于MLP), PyBrain (Q学习), neurolab (MLP)和PyMVPA (SVM)(均可从Python软件包索引中获取 ) -它们的成熟度,范围和所提供的基础设施彼此之间差异很大,但是我发现它们的质量都很高。

尽管如此,最好的还是scikits.learn ;例如,除了scikits.learn之外,我不知道有任何Python ML库,它包含我上面提到的三个功能中的任何一个(尽管其中一些具有可靠的示例代码和/或教程,但我不知道集成这些都包含研究级数据集和诊断算法的库)。

其次,考虑到您打算使用的技术( k近邻 )scikits。learn是一个特别好的选择。 Scikits.learn包括用于回归 (返回分数)和分类 (返回类别标签)的kNN算法,以及每种算法的详细示例代码。

使用scikits.learn k-nearest邻居模块(从字面上看)再简单不过了:

>>> # 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最近邻的症结所在不是编码有效的分类器构建器,而是构建生产级k最近邻分类器/回归器的困难步骤是持久层-即, 存储和快速检索选择了最近邻居的数据点 。对于kNN数据存储层,scikits.learn包括一种球树算法(除了对kd-tree (k-NN的传统数据结构)明显优于kd-tree之外,我几乎一无所知。在高维特征空间中退化。

此外,k个近邻需要一个适当的相似性度量标准(欧氏距离是通常的选择,尽管并不总是最好的)。 Scikits.learn包括一个独立模块,该模块包含各种距离度量以及用于选择合适度量的测试算法。

最后,我也没有提到一些库,因为它们超出了范围(PyML,贝叶斯)。对于开发人员而言,它们不是主要的“库”,而是对于最终用户的应用程序(例如,Orange),或者它们具有异常或难以安装的依赖项(例如,mlpy,这需要gsl,而后者又必须从源代码构建) ),至少适用于我的操作系统(即Mac OS X)。

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

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号