ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

<<从零入门机器学习>> 在PyCharm中以函数化封装代码并在JupyterNoteBook中调用-以KNN算法为例(K近邻算法)

2022-02-20 19:58:00  阅读:223  来源: 互联网

标签:中以 KNN 封装 代码 py 算法 knn


目录

1. 文章主要内容

       本篇博客致力于讲解在PyCharm中以函数化封装代码并在JupyterNoteBook中调用的技巧,通过本篇博客的学习,以KNN算法为例,意在用通俗易懂的语言掌握函数化代码的技巧。通读本篇博客大概需要5分钟左右的时间。
       本篇博客的内容是基于liuyubobobo老师讲解的机器学习课程为基础,加上本人的总结和思考制作出来的,更详细的原版视频请自行搜索bobo老师机器学习。

2. 函数化封装代码

       上一篇讲解KNN算法(KNN算法博客地址),在jupyterNotebook中通过python语言实现了其核心的算法逻辑。但为了之后我们能够方便的调用此算法逻辑,我们以面向对象的思想,专门创建一个文件,然后通过文件中的方法封装KNN核心算法代码。

2.1 Pycharm中定义类和函数(也可以叫做方法)

       我们仔细的可以发现,在JupyterNoteBook中新建的File的后缀名是ipynb,但我们创建的文件后缀名应该为py。总体思路是,我们通过Pycharm定义好文件和函数,然后通过jupyterNoteBook的upload功能上传到jupyter上去,即可完成对代码的封装。

2.2 Pycharm具体操作

       我们以上篇博客KNN算法核心代码为例,在PyCharm中新建一个名为knn.py的文件,定义一个名为kNN_classify的函数(方法),将KNN核心算法代码写入在此方法中,完成对代码的封装。如下图所示:在这里插入图片描述

2.3 JupyterNoteBook具体操作

       在主文件的同级目录中,我们新建一个名为kNN_function的文件夹,然后进入此文件夹,通过upload按钮,找到我们之前编写knn.py的目录,上传到jupyter服务器中,具体操作如下图所示:

       新建一个文件夹,具体操作如下:在这里插入图片描述
       修改文件夹的名字为kNN_function,操作如下图:
在这里插入图片描述
       进入到此文件夹中,通过upload找到knn.py文件所在位置并upload到jupyterNoterbook服务中,如下图所示:
在这里插入图片描述
在这里插入图片描述
       至此,我们已经将knn.py上传到jupyter服务器上。

2.4 JupyterNoteBook中调用knn.py文件

       我们在主文件中通过引入knn.py,然后就可以调用其kNN_classify方法,达到和上一篇博客一样的效果,具体整块代码如下所示:

import numpy as np 
import matplotlib.pyplot as plt

raw_data_X = [[3.393533211, 2.331273381],
              [3.110073483, 1.781539638],
              [1.343808831, 3.368360954],
              [3.582294042, 4.679179110],
              [2.280362439, 2.866990263],
              [7.423436942, 4.696522875],
              [5.745051997, 3.533989803],
              [9.172168622, 2.511101045],
              [7.792783481, 3.424088941],
              [7.939820817, 0.791637231]
             ]
raw_data_y = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]

X_train = np.array(raw_data_X)
y_train = np.array(raw_data_y)
x = np.array([8.093607318, 3.365731514])

%run kNN_function/knn.py # 引入knn.py文件
predict_y = kNN_classify(6, X_train, y_train, x) # 调用kNN_classify方法

predict_y

       knn.py文件中的代码:

import numpy as np
from math import sqrt
from collections import Counter


def kNN_classify(k, X_train, y_train, x):
    assert 1 <= k <= X_train.shape[0], "k must be valid"
    assert X_train.shape[0] == y_train.shape[0], \
        "the size of X_train must equal to the size of y_train"
    assert X_train.shape[1] == x.shape[0], \
        "the feature number of must be equal to X_train"

    distances = [sqrt(np.sum((x_train - x) ** 2)) for x_train in X_train]
    nearest = np.argsort(distances)
    topK_y = [y_train[i] for i in nearest[:k]]
    votes = Counter(topK_y)

    return votes.most_common(1)[0][0]

3. 总结

       通过本篇博客,主要讲解了如何通过PyCharm函数化封装代码,并在jupyter服务器中调用,函数化封装对于管理代码有很大的帮助。下一篇博客,介绍Scikit-Learn当中封装的KNN算法,并通过函数化封装代码形式自己实现简单的Scikit-Learn底层KNN算法。如有错误,欢迎大家指正,谢谢

标签:中以,KNN,封装,代码,py,算法,knn
来源: https://blog.csdn.net/qq_32575047/article/details/123030054

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有