zoukankan      html  css  js  c++  java
  • sklearn 翻译笔记:KNeighborsClassifier

    今天做机器学习knn的实现想使用sklearn这个模块,但是里面的函数不懂,无奈只能查文档,但是一大片英文看见我就烦,也不是说不能看  但是以我低下的英语水平实在是太费劲了。幸好找到一篇前人翻译的比较好的解释。给大家推荐一下:一位来自简书的作者:吃着苹果写代码   感谢作者的分享,希望能帮到更多的人。

    sklearn 翻译笔记:KNeighborsClassifier - 简书

    顺便把今天实现的代码也分享出来吧:诚然,代码实现顺利运行的呢一刻真的很开心

    本代码是在python 中文文本分类 - 相国大人 - CSDN博客(相国大人)的代码基础上实现的

    相国大人是使用的贝叶斯分类实现的分类模型,由于我的实际需要,我将相国大人的最后一个分类器模型NBayes_Predict.py修改了,使用了sklearn.neighbors这个pycharm自带的模块,具体源码如下:

    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    """
    @version: python3.6
    @author: XiangguoSun
    @file:Neighbors.py
    @time: 2019/6/20 16:12
    @software: PyCharm
    """
    
    
    from sklearn.neighbors import KNeighborsClassifier # 导入k近邻算法
    from sklearn import metrics
    from Tools import readbunchobj
    import os
    
    # 导入训练集
    path = os.getcwd()  # 获取当前路径
    trainpath = os.path.join(path,"train_word_bag/tfdifspace.dat")
    train_set = readbunchobj(trainpath)
    
    # 导入测试集
    testpath = os.path.join(path,"test_word_bag/testspace.dat")
    test_set = readbunchobj(testpath)
    
    # 训练分类器:输入词袋向量和分类标签,
    clf=KNeighborsClassifier(n_neighbors=5,radius=1.0,algorithm='auto',leaf_size=30,
    metric='minkowski',p=2,metric_params=None,n_jobs=1).fit(train_set.tdm, train_set.label)
    """
    n_neighbors: int, 可选参数(默认为 5)
    algorithm(算法): {‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’}, 可选参数(默认为 'auto')
    leaf_size(叶子数量): int, 可选参数(默认为 30)
    p: integer, 可选参数(默认为 2)
    metric(矩阵): string or callable, 默认为 ‘minkowski’
    metric_params(矩阵参数): dict, 可选参数(默认为 None)
    n_jobs: int, 可选参数(默认为 1)
    用于搜索邻居的,可并行运行的任务数量。如果为-1, 任务数量设置为CPU核的数量。
    """
    
    # 预测分类结果
    predicted = clf.predict(test_set.tdm)
    
    """
    target_name: 是一个list,存放的是整个数据集的类别集合
    label: 是一个list,存放的是所有文本的标签。
    filenames: 是一个list,存放的是所有文本文件的名字。
    contents: 是一个list,分词后文本文件(一个文本文件只有一行)
    """
    for flabel, file_name, expct_cate in zip(test_set.label, test_set.filenames, predicted):
        if flabel != expct_cate:
            print(file_name, ": 实际类别:", flabel, " -->预测类别:", expct_cate)
    
    print("预测完毕!!!")
    
    # 计算分类精度:
    
    def metrics_result(actual, predict):
        print('精度:{0:.3f}'.format(metrics.precision_score(actual, predict, average='weighted')))
        print('召回:{0:0.3f}'.format(metrics.recall_score(actual, predict, average='weighted')))
        print('f1-score:{0:.3f}'.format(metrics.f1_score(actual, predict, average='weighted')))
    
    
    metrics_result(test_set.label, predicted)
    

     readbunchobj()方法在Tool.py文件,若要复现,请下载相国大人完整代码再修改或者联系我,我可以提供修改好的Knn代码和训练集测试集。

    作者:求知鱼

    -------------------------------------------

    个性签名:你有一个苹果,我有一个苹果,我们交换一下,一人还是只有一个苹果;你有一种思想,我有一种思想,我们交换一下,一个人就有两种思想。

    如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

    独学而无友,则孤陋而寡闻,开源、分享、白嫖!

  • 相关阅读:
    更博更博233 总结一点点vue
    码几篇过两天要用的jq拦截器和导航插件
    整理两篇不错的关于rgba兼容和线性渐变
    1-新一期的技术难点
    决定把工作bug写到这好了 省的记到本本上还要带着(QAQ我啥时候变这么懒呢)。。。
    小知识点,jQuery把一个已知的值赋值给input
    bootstrap3踩过的坑~具体来说这是在制作一个接地气的功能块时碰到的各种小坑坑!
    自己写的一个banner动画
    自己做了一个左边侧边栏展开的效果
    模仿qq音乐播放字母效果
  • 原文地址:https://www.cnblogs.com/Qiuzhiyu/p/11059944.html
Copyright © 2011-2022 走看看