最新放弃了原来注册的 .com 域名,改为直接用 github 提供的二级域名,以前的一些链 接可能会受影响,以后再慢慢改回来。
read moreOther articles
最近的更新:KNN算法自定义距离时的并行化,时间序列的分类
最近在好几个地方用到了KNN这个最简单的分类算法。KNN虽然原理和实现都相当简单(当 然是最基础的形式),但在某些问题上效果也好得出奇。缺点当然也非常明显,至少速度 在数据量稍微大一点的时候就变得很慢了。所幸的是在做prediction的时候,sklearn的实 现中是可以允许通过
n_jobs
参数来实现并行的。不过在最近使用一个KNN的案例中遇到了 一个问题,当使用自定义的距离函数时,并行似乎没有任何效果。其实似乎sklearn中类似的小坑还是比较多的,尽管很多并不一定是sklearn本身的问题 。比如用RandomizedCV时,如果
n_jobs=1
,此时定义verbose
参数就是无效的,会在 jupyter中输出一堆中间结果。考虑到当KNN采用暴力遍历距离矩阵时,其实预测每一个点的任务是独立的,那么其实自己 很容易就可以写一个wrapper来让predict函数用多进程实现并行:
先写一个函数可以把job拆分:
read moredef split_chunks(l, n): chunk_size = math.ceil(len(l) / n) for i in range(0, len(l …
NCM: 理想的 vim 补全插件
Update: NCM已停止更新。不过在它停更之前,我发现它在有些时候会造成 Vim crash 或卡死,已经将其卸载。本来 deoplete 可能是最好选项了,但总没有找到能让我满意的配置。目前的办法是 Vim 退居二线,只用来做简单快速的编辑,主力转到更现代的 VSCode。
在 Vim 上一直以来都没有找到一个相对理想的自动补全插件。最开始的需求不高,只要求 能够基于上下文做一点自动补全就可以了,所以 supertab 就已经足够满足了。后来尝试用 you-complete-me,繁琐的安装让我还是放弃了这个选择。
再往后用得最久的一个选择是 neocomplete,它带有一些类似于 IDE 的功能,比如补全某个导入的包的函数名。大多数时候这个插件还比较符合我的心意,但一直有一个比较不满意的地方是,如果导入了某个相对大一点的库,比如 numpy,那么在第一次输入任何小数点的时候程序会卡顿一小段时间。尽管作者说已经实现了异步,但至少在我的配置下,没有能够实现异步地生成补全库。另外最新的消息是这个插件已经基本停止更新,作者已经把主要精力放在了新的替代品上了。
由此引出本文的主角,也就是我目前的选择:nvim-completion-manager …
read more用 LaTeX 写大论文的一些经验
几个月前写博士毕业论文的时候,起初准备用 Word 来写,因为虽然我算是 LaTeX 的老用 户,但其实遇到问题时并没有什么解决的经验。相比之下,用大部分人使用的 Word 会更 加稳妥。不过在 Word 中写了几页就决定还是用 LaTeX 了,主要有两方面的原因:
- 论文中存在大量公式,Word 虽然自 2007 版本起就引入了更好的公式支持,允许按部 分 LaTeX 的语法输入,并且有不错的显示效果。但比较遗憾的是,即使是目前最新版 本的 Word 2016,在存在行内公式时,段落内的行间距都会受到影响。这一点,如果一 直是使用 Word 的人并不一定会注意到,但一旦注意到了,而且确定地知道使用 LaTeX 可以克服时,就会觉得这个缺点难以忍受了。
- 论文各个章节以及章节内部存在大量的交叉引用,图片、公式 …
方便的个人命令行小助理
最近发现有一些经常重复性做的工作,包括:
- 打开命令行查看本机在局域网的 IP
- 用 Inkscape 命令行转换矢量图格式
- 调用已写好的某脚本快速查看关注股票的价格
等等。这些工作往往都有确切的实现办法,但往往用起来相对没那么简便,而且输出也不一定足够精简,比如输出局域网IP功能就只输出一个IP,而且最好命令就是一条非常简单的
ip
。想了一下,实现一个这样需求很简单的小工具还是比较容易的,我想的解决方案是这样的:第一步,写一个 Python 脚本,可以接受命令行参数来实现不同的功能;第二步,让这个脚本可以命令行运行。
需求想明白了,实现就简单了。
第一步,先编写
tools.py
,以输出 IP 为例:read moreimport sys args = sys.argv def main(): try: if args[1] == 'ip': get_ip() except: pass def …