目录
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算法。如有错误,欢迎大家指正,谢谢