机器学习中的计时和性能

2019-03-08  本文已影响0人  崔吉龙

问题描述

在机器学习中当我们比较集中算法之间的性能差异时,我们需要比较算法执行的时间,从而分析出算法的优劣,今天就学习这些小技巧。

用timeit做时间基线检测

我们要明白%timeit不是python脚本,只是python交互环境的一个魔法命令,所以不要把%timeit这句话写在python脚本程序里。

%timeit l = [k for k in range(10**6)]
86.1 ms ± 4.03 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
# 我们也可以自己控制重复的次数
# -n 20 循环20次
# -r 5 代表取其中最好5次的结果
%timeit -n 20 -r 5 l=[k for k in range(10**6)]
86.6 ms ± 1.78 ms per loop (mean ± std. dev. of 5 runs, 20 loops each)

那么限免我们换个算法来看看结果,由于需要测试代码块,所以这里我们使用了%%timeit魔法块指令

%%timeit limit = 10 ** 6
l = list()
for k in range(limit):
  l.append(k)
168 ms ± 3.63 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

可以看出使用for循环和list.append函数的算法,要比使用列表推导式慢一倍。

检测one hot coder和hashing coder性能

import sklearn.feature_extraction.text as text

sklearn_hashing_trick = text.HashingVectorizer(
        n_features=20, binary=True, norm=None)

encoder = text.CountVectorizer()
texts = ['Python for data science','Python for machine learning']

%timeit encoding = encoder.fit_transform(texts)
1.05 ms ± 65.3 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

%timeit hashing = sklearn_hashing_trick.transform(texts)
172 µs ± 5.62 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

可以看出使用text.HashingVectorizer比text.CountVectorizer要快很多倍。

上一篇 下一篇

猜你喜欢

热点阅读