Python Sklearn库源码学习--kmeans
前言:分析体检数据希望不拘泥于Sklearn库中已有的聚类算法,想着改一下Kmeans算法。本着学习的目的,现在开始查看sklearn的源代码。希望能够写成一个通用的包。有必要先交代一下我使用的python版本:python3.9.2 环境:pycharm现在先学习学习Sklearn是如何写的~第一步:找到sklearn的源代码>>> import sys>>>
前言:
分析体检数据希望不拘泥于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
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文件中。
那么_tree.pxd文件在哪呢。
我在python的安装目录下,项目的目录下都没有找到。
1.4 问题解决
最终我在github上sklearn的官方开源项目里找到了完整的源代码。
经过分析得,我们在导入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) 官方文档中文版
sklearn中的聚类算法
聚类算法在sklearn中有两种表现形式:
-
类(和我们之前学过的分类算法以及数据预处理方法一样)
-
需要实例化,训练并使用接口和属性来调用结果
-
函数(function)
-
只需要输入特征矩阵和超参数,即可返回聚类的结果和各种指标
注意:该模块中实现的算法可以采用不同类型的矩阵作为输入
-
所有方法都接受形状[n_samples,n_features]的标准特征矩阵
-
这些可以从sklearn.feature_extraction模块中的类中获得
-
对于亲和力传播,光谱聚类和DBSCAN 还可以输入形状[n_samples, n_samples]的相似性矩阵
-
可以使用sklearn.metrics.pairwise模块中的函数来获取相似性矩阵
更多推荐
所有评论(0)