Python Sklearn库源码学习--kmeans
前言:
分析体检数据希望不拘泥于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) 官方文档中文版
Python机器学习笔记:sklearn库的学习
sklearn中的聚类算法
聚类算法在sklearn中有两种表现形式:
类(和我们之前学过的分类算法以及数据预处理方法一样)
需要实例化,训练并使用接口和属性来调用结果
函数(function)
只需要输入特征矩阵和超参数,即可返回聚类的结果和各种指标
注意:该模块中实现的算法可以采用不同类型的矩阵作为输入
所有方法都接受形状[n_samples,n_features]的标准特征矩阵
这些可以从sklearn.feature_extraction模块中的类中获得
对于亲和力传播,光谱聚类和DBSCAN 还可以输入形状[n_samples, n_samples]的相似性矩阵
可以使用sklearn.metrics.pairwise模块中的函数来获取相似性矩阵
Python Sklearn库源码学习--kmeans相关推荐
- 彻底弄懂Python标准库源码(一)—— os模块
目录 第1~22行 模块整体注释.nt与posix 第24~46行 模块引入._exists方法._get_exports_list方法 第48~97行 根据系统不同导入不同的方法和属性 第100~1 ...
- 三方库源码学习2-Retrofit
文章目录 一.参考博客 二.Retrofit的介绍 三.什么是动态代理 四. Retrofit.Create()方法 五. ServiceMethod 六. 初看HttpServiceMethod 七 ...
- Python Requests库源码分析
1. Requests库简介 书籍是人类进步的阶梯,源码是程序员进步的阶梯.为了进步,我们就要不断地阅读源码,提升自己的技术水平.今天我们来剖析一下Python的Requests库. Requests ...
- 【Python】Webpy 源码学习
那么webpy是什么呢? 阅读它的源码我们又能学到什么呢? 简单说webpy就是一个开源的web应用框架(官方首页:http://webpy.org/) 它的源代码非常整洁精干,学习它一方面可以让我们 ...
- 【Python】Webpy 源码学习(转)
自己是个python新手,之前买了本<<python核心编程>>,但看了一半实在看不下去了(内容过于啰嗦,而且在关键点的地方又浅尝辄止),所以希望通过阅读一些简单的开源项目来快 ...
- 陈硕Muduo库源码学习:EventLoop
本人原本从事C++的学习的,现在进行即时通讯的网络开发学习,涉及到了muduo库顾muduo库进行深入学习,muduo库是给予reactor模型的并发处理的网络库,其广泛的利用了回调函数的特性. Ev ...
- 彻底弄懂Python标准库源码(三)—— pprint模块
目录 模块整体注释 依赖模块导入.对外暴露接口 saferepr函数--返回对象的字符串表示,并为无限递归数据结构提供保护 isreadable函数--返回对象的是否"可读" is ...
- Masonry 源码学习整理
@(第三方库源码学习) [TOC] Masonry框架的类结构 学习一.Masonry采用了经典的组合设计模式(Composite Pattern). 1.定义 将对象组合成树状结构以表示" ...
- PyCrypto密码学库源码解析(二)RSA参数生成
Python Crypto库源码解析(二) RSA参数生成 * 版权声明 * 引用请注明出处,转载请联系: h0.1c@foxmail.com 本文主要讲解pycrypto库中RSA参数生成的实现方法 ...
最新文章
- 时隔一个月,社区团购平台“邻邻壹”再获千万美金 Pre-A 轮融资
- 直播APP开发注意事项汇总
- Github 2020 年度报告:你以为新冠击溃了开发者?不!他们创造了更多代码...
- ajax登陆返回值判断,一个简单的ajax用户登陆返回值问题?有代码
- day15 Ui自动化元素的定位
- devops流程工具_您的DevOps工作流程依赖哪些工具?
- 【报告分享】元宇宙发展研究报告2.0-清华大学.pdf(附下载链接)
- Solar中跨控制器引用视图!
- 二级C语言选择题分类,全国计算机等级考试二级C语言填空与选择题简单分类.doc...
- QT5.15 安装教程
- 微信支付功能测试用例
- oneDrive 5T网盘空间申请教程
- 如何隐藏logo 高德地图api_iOS 高德地图隐藏logo
- 文人和书生 摘自《明朝那些事儿》
- 【MySQL】作业一
- Accumulation Degree题解
- 一个android控件资源网站
- 【GAOPS055】verilog 乘法、除法和取余
- 如果你一再做出错误的决定,很可能是认知出问题了
- python实现朴素贝叶斯垃圾邮件分类