「机器学习」写给 Python 开发者的 10 条机器学习建议( 二 )


「机器学习」写给 Python 开发者的 10 条机器学习建议
本文插图
固定随机数种子
实验的可重复性是非常重要的 , 随机数种子是我们的敌人 。 要特别注重随机数种子的设置 , 否则会导致不同的训练 / 测试数据的分裂和神经网络中不同权重的初始化 。 这些最终会导致结果的不一致 。
1def set_seed(args):2 random.seed(args.seed)3 np.random.seed(args.seed)4 torch.manual_seed(args.seed)5 if args.n_gpu > 0:6 torch.cuda.manual_seed_all(args.seed)
先加载少量数据 如果你的数据量太大 , 并且你正在处理比如清理数据或建模等后续编码时 , 请使用 `nrows `来避免每次都加载大量数据 。 当你只想测试代码而不是想实际运行整个程序时 , 可以使用此方法 。
非常适合在你本地电脑配置不足以处理那么大的数据量 ,但你喜欢用 Jupyter/VS code/Atom 开发的场景 。
1f_train = pd.read_csv(‘train.csv’, nrows=1000)
「机器学习」写给 Python 开发者的 10 条机器学习建议
本文插图
预测失败 (成熟开发人员的标志) 总是检查数据中的 NA(缺失值) , 因为这些数据可能会造成一些问题 。 即使你当前的数据没有 , 并不意味着它不会在未来的训练循环中出现 。 所以无论如何都要留意这个问题 。
1print(len(df))2df.isna.sum3df.dropna4print(len(df))
「机器学习」写给 Python 开发者的 10 条机器学习建议
本文插图
显示处理进度
在处理大数据时 , 如果能知道还需要多少时间可以处理完 , 能够了解当前的进度非常重要 。
方案1:tqdm
1from tqdm import tqdm2import time34tqdm.pandas56df['col'] = df['col'].progress_apply(lambda x: x**2)78text = ""9for char in tqdm(["a", "b", "c", "d"]):10 time.sleep(0.25)11 text = text + char 方案2:fastprogress
1from fastprogress.fastprogress import master_bar, progress_bar2from time import sleep3mb = master_bar(range(10))4for i in mb:5 for j in progress_bar(range(100), parent=mb):6 sleep(0.01)7 mb.child.comment = f'second bar stat'8 mb.first_bar.comment = f'first bar stat'9 mb.write(f'Finished loop {i}.')
解决 Pandas 慢的问题 如果你用过 pandas , 你就会知道有时候它的速度有多慢ーー尤其在团队合作时 。 与其绞尽脑汁去寻找加速解决方案 , 不如通过改变一行代码来使用 modin 。
1import modin.pandas as pd
「机器学习」写给 Python 开发者的 10 条机器学习建议
本文插图
记录函数的执行时间
并不是所有的函数都生来平等 。
即使全部代码都运行正常 , 也并不能意味着你写出了一手好代码 。 一些软错误实际上会使你的代码变慢 , 因此有必要找到它们 。 使用此装饰器记录函数的时间 。
1import time23def timing(f):4 """Decorator for timing functions5 Usage:6 @timing7 def function(a):8 pass9 """101112 @wraps(f)13 def wrapper(*args, **kwargs):14 start = time.time15 result = f(*args, **kwargs)16 end = time.time17 print('function:%r took: %2.2f sec' % (f.__name__, end - start))18 return result19 return wrapp
「机器学习」写给 Python 开发者的 10 条机器学习建议
本文插图


推荐阅读