全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 数据分析与数据挖掘
486 0
2020-08-17
打破数据
尽管处理和存储已经变得便宜,并且企业正在采用高性能分析基础架构,但在大多数情况下,分析研究仍受本地系统的约束。诸如在一家小型企业中进行概念验证的多种场景,这些企业无力承担对大量分析基础设施,学术项目,业余项目的投资……清单还在继续,这里的共同因素是系统约束。
尽管我们无法逃脱无休止地盯着闪烁的光标的场景,但我们绝对可以减少此类实例。更快的最终结果或更快的样本案例测试周转速度,可以减少令人沮丧的代码执行会话,从而真正发挥作用。时间密集型计算的两个主要原因是数据大小和算法复杂性。在下面的文章中,我们将研究一些有效的措施来减小数据大小,而不影响输出。
提取并保存有限的数据:数据大小是加快输出速度的关键限制因素之一
避免使用“选择*”- 此处提供的代表性计算表明,一百万行仅有5列的数据可能高达80 MB数据。根据当前的数据标准,我们经常处理具有千万行的数据集。如果有更多的列和行怎么办。再加上处理复杂性和多个变量,这些变量将保存数据的某些子集。为了避免此处所谓的“无休止处理”,而不是选择数据表中的所有列,请仅导入必要的列
删除不必要的-删除已经进行了一些处理并且永远不会使用的列
使用“ where”子句–有时,最好只提取该一个城市或一个产品类别的数据,而不是处理整个数据块然后在子集上运行循环。这将大大提高处理速度,因为每一步的数据量都更少,算法也不必进行不必要的模式识别
分开处理长尾数据和长尾数据–如果某些数据点(例如子类别)的出现频率有明显和广泛的区别,有时最好将长尾数据与频繁出现的数据集分开识别和处理。方案之一可以是推荐引擎,例如“市场篮子分析”,其中“支持”和“置信度”值会影响处理时间。如果我们使用较大的Support值,则结果会很快,但是可能会丢失长尾项,而如果我们将其保持较小(有时甚至为0.001),则会增加处理时间和输出规则。最好在长尾物品之间分别找到规则
删除变量–经常删除不必要和复制的变量以释放内存[rm()]
以较小的块处理数据以避免长时间的内存阻塞
循环:可以最大程度地降低系统效率的困扰怪物
中断/跳转循环步骤–始终放置逻辑以中断循环,break()或跳转至循环中的下一个值next(),这样,如果不满足必要条件,则可以终止处理而不会浪费宝贵的时间和处理能力
循环与apply()–与使用循环相比,内置函数的处理速度要高得多。因此,与其循环和创建子集以执行任何转换/聚合/计算,通常建议使用apply(),what()函数或使用data.table对象而不是dataframe。
并行处理-除非强制执行,否则R默认情况下将仅使用计算机的一个内核。使用doParallel和foreach之类的程序包不仅可以显式分配更多内核,还可以在多个并行处理分支中促进循环的运行。
减少耗时的循环/代码活动-跟踪键值。一旦循环开始,就很难在每个步骤中知道这些值。使用print()语句打印循环内相关值。这将有助于了解哪个值循环正在放缓
避免在循环中使用IF-尽可能检查循环外部的循环条件
                      例如ConditionOfLoop =(data $ col1 + data $ col2)>阈值
                     现在,在循环中使用行之前,将ConditionOfLoop的行号用于True或False条件
转换格式:有时转换相关数据集的格式可能会在提高处理能力方面产生奇迹。例如,如果有成千上万的规则作为市场篮子分析的结果,则最好将规则转换为数据框(逗号分隔的实体以获得更长的规则),然后进行处理

关注 CDA人工智能学院 ,回复“录播”获取更多人工智能精选直播视频!


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群