机器学习中的计时和性能
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要快很多倍。