前言:

分析体检数据希望不拘泥于Sklearn库中已有的聚类算法,想着改一下Kmeans算法。本着学习的目的,现在开始查看sklearn的源代码。希望能够写成一个通用的包。

有必要先交代一下我使用的python版本:python3.9.2 环境:pycharm

现在先学习学习Sklearn是如何写的~

第一步:找到sklearn的源代码

>>> import sys
>>> sys.path
['', 'D:\\Python\\python39.zip', 'D:\\Python\\DLLs', 'D:\\Python\\lib', 'D:\\Python', 'D:\\Python\\lib\\site-packages']

可以查看到

  • 主要python代码和自带包在/usr/lib

  • 常用的一些第三方包会安装在/usr/local/lib/python/dist-packages和/用户/.local/lib/sit-packges中

  • 我们的sklearn就在/用户/.local/libsit-packges这个目录下

第二步:查看源代码使用的工具

1.直接使用Pycharm

1.1 源码路径

结合上面的路径,在左侧Project目录分类下:选择External Libraries–>Lib–>site-packages–>skllearn–>自己想看的源码,我选择的是cluster(聚类)–>kmeans

img

img

1.2 文件格式

在sklearn中,底层代码是由cpython编写的。cpython生成的文件格式主要有三种:.pxd .pyd .pyx

  • .pxd 文件是由 Cython 编程语言 “编写” 而成的 Python 扩展模块头文件,其中有 Cython 模块要包含的 Cython 声明 (或代码段),还可为 .pyx 文件模块提供 Cython 接口。

  • .pyx 文件是由 Cython 编程语言 “编写” 而成的 Python 扩展模块源代码文件,其中有 Cython 模块的源代码。不像 Python 语言可直接解释使用的 .py 文件,.pyx 文件必须先被编译成 .c 文件,再编译成 .pyd (Windows 平台) 或 .so (Linux平台) 文件,才可作为模块 import 导入使用。

  • .pyd 文件是非 Python,由其它编程语言 “编写-编译” 生成的 Python 扩展模块, Python 要导入 .pyd 文件,实际上是在 .pyd 文件中封装了一个 module。

1.3 问题:无源代码文件.pyx

那么问题来了,这里只有.pxd文件和.pyd文件,没有源代码文件.pyx。

查看_tree.pxd文件,可见决策树中一些结构的声明,但具体编写实现的代码应在_tree.pyx文件中。

img

那么_tree.pxd文件在哪呢。

我在python的安装目录下,项目的目录下都没有找到。

1.4 问题解决

最终我在github上sklearn的官方开源项目里找到了完整的源代码。

img

经过分析得,我们在导入sklearn库时,直接导入了编译转换好的,能为python所使用的.pyd文件,而不是cpython所写成的源代码.pyx。

2.使用VIM

2.1 VIM是什么

通过多篇文章看到的,特别查了一下VIM是什么

  • Vim是一个类似于 Vi 的著名的功能强大、高度可定制的文本编辑器 ,在Vi的基础上改进和增加了很多特性。 VIM是 自由软件 。
  • Vim已经有各主流系统的版本,尽管vim较vi已经改良了不少,但是初次使用还是会一头雾水,不知如何操作,所以学习vim要首先过2关。第一关是理解vim的设计思路,vim设计之初就是整个文本编辑都用键盘而非鼠标来完成,键盘上几乎每个键都有固定的用法,且vim的制作者希望用户在普通模式(也就是命令模式,只可输入命令)完成大部分的编辑工作,将此 模式设计为默认模式,初学者打开vim,如果直接输入单词,结果就会滴滴乱响,这是因为vim把用户输入的单词理解为命令了。第二关是命令关,vim有过百条命令对应编辑的需要,如果能熟练使用vim这些命令,编辑速度确实比鼠标要快很多,但是想全都记住它们也是一件难事,我想记住它们最好的方法就是多多来练习,确实把vim用在日常的文本编辑中去,且遇到难题不要放弃,而是查找解决的方法,每解决一个难题,你的vim技能就上升一级。
2.2 VIM安装教程

我使用VIM来查看源代码和编写代码。但是安装了spf13的插件。通过安装spf13可以使VIM像IDE一样好用。

spf13安装相关教程:VIM配置-傻瓜版

- 如何使用VIM来查看tag?
     1、ctags
     先到第三方库目录下使用 ctags -R
     接着进入相关python文件中就可以查看原函数位置了。
     常用跳转方法:
     光标处Ctrl-]键:跳到光标所在单词的tag。
     Ctrl-T键:跳回原来的位置。
     g]键(先按g再按]):如果有同名的多个tag,可以用这两个键进行跳转,会提示选择序号。
     2、tagbar
      快捷键 , t 使用后会显示该python文件的函数结构。
      ctags用来查看具体细节,tagbar用来查看整体结构。这两个tag工具双剑合壁。查看和调试代码简直不要太爽

第三步:原理与代码解读

参考资料:《菜菜的机器学习sklearn课堂》聚类算法Kmeans

scikit-learn (sklearn) 官方文档中文版

Python机器学习笔记:sklearn库的学习

sklearn中的聚类算法

聚类算法在sklearn中有两种表现形式:

  • (和我们之前学过的分类算法以及数据预处理方法一样)

  • 需要实例化,训练并使用接口和属性来调用结果

  • 函数(function)

  • 只需要输入特征矩阵和超参数,即可返回聚类的结果和各种指标

img

img

注意:该模块中实现的算法可以采用不同类型的矩阵作为输入

  • 所有方法都接受形状[n_samples,n_features]的标准特征矩阵

  • 这些可以从sklearn.feature_extraction模块中的类中获得

  • 对于亲和力传播,光谱聚类和DBSCAN 还可以输入形状[n_samples, n_samples]的相似性矩阵

  • 可以使用sklearn.metrics.pairwise模块中的函数来获取相似性矩阵

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐