2021-01-11

机器学习项目清单

2. 获取数据

Aurelien Geron 关于获取数据的清单如下

  • 列出需要的数据及其体量

  • 查找并记录获取数据的途径

  • 检查需要的空间

  • 检查法律义务,必要时获取授权

  • 获取访问权限

  • 创建工作空间(确保具有足够的存储空间)

  • 获取数据

  • 将数据转化为可操作的格式(不改变数据本身)

  • 确保删除或保护敏感信息(例如、匿名)

  • 检查数据的类型和大小(时间序列、样本、地点等)

  • 采样一个测试数据集,放在一边,永远不要用它(没有数据窥视)。
    … …
    以上完整的记录了《机器学习实践》中的关于获取数据的清单,没有按照自己的思路写,正说明对这个的把握是不充分,不自信的。正常的项目组需要是完备的,并不是指人员、工作是完备的,而是这样的思想是完备的,那么即使人员有所缺失,不足,但因为对整个工作的完整性十分了解,那么相应的问题也能解决。目前自己的程度是需要求助更加有经验的人来指导工作。不过更加现实的情况是并没有,那么就是一边补充一边调整思想,一边补充知识。
    … …
    在获取数据这个步骤前,因为已经对需解决的问题进行了充分的讨论。所以对数据的结构基本有所把握。这里补充一个题外话:那就是在互联网巨头企业中,往往从事机器学习项目的新工作人员需要在数据收集,分析的岗位进行半年左右的训练,以对数据的结构有较多的认识。
    … …

  • 列出需要的数据及其体量
    根据商业术语定义下的问题,列出基本的假设后,对应的数据结构也能根据已经列出的中较符合的假设列出需要的数据维度。但是数据的体量该怎么确认呢?这里面还存在公司发展阶段的问题。当公司的体量大,数据量当然很大,一般选取什么样体量的数据来进行机器学习呢?数据体量是变化的么?即当模型效果不理想,其中一个解决办法就是补充数据量。那么当企业本身的数据量是小的呢?比如数据量在10万以内。这样的数据量对于一个机器学习项目是较小的。
    那这个问题就演变成正确评估模型需要的数据体量,然后根据需要的数据体量,评估获取数据的渠道。

  • 查找并记录获取数据的途径
    初步获取数据的时候,可以尽量先将所有能想到的数据进行厘清。然后一个很重要的思想就是,数据版本不可能一次就确认,或者在已经确认后,还有可能就新提出的需求进行补充。或者在调整模型的时候仍然可能就数据本身进行调整。所以数据版本要进行保留,要进行说明,数据字段要进行备注,这个并不是为别人来进行考虑,而是对自己思维记忆力的清晰认识:那就是——真的记不住!——来进行补充与完备。
    而记录获取数据的途径则是半自动化的意识,不需要就这个部分一直进行重复的工作。以及:当机器学习模型是增量学习的时候,持续获取新数据这个过程需要自动化。

  • 检查需要的空间
    我因为对代码需要的空间不懂,目前仅知道如果需要加载某些文件的时候,采用相对路径是需要空间保持纯净的。以及仅仅知道在设置路由的时候有namespace,但真正里面的思想我并不理解。这个采用工程思维,创建jupyter notebook的时候按照一个独立的空间来做,其他的请教别人;之后在半年的时候,研究下命名空间的东西,稍微了解下这个思想。

  • 检查法律义务,必要时获取授权
    整个项目的甘特图与整体方案清单的罗列必不可少的一个人就是对有过整体方案经验的从业人员。其中检查法律任务,必要时获取授权这件事就是需要这个关键人物来把控的。但是整个项目小组的人员要参与进来,因为机器学习项目小组的人员是需要持续不断的学习的。对于人材的培养是最重要的。

  • 获取访问权限
    获取访问权限结合预估数据结构与体量是保持一致的。对模型数据体量做简单的评估后,需要补充获取的数据,或者项目完全需要的新数据维度,如果需要的话,是需要获取某些平台或客户或对应业务的访问权限的。这也表明一件事,那就是真的需要一个Team。

  • 创建工作空间(确保有足够的存储空间)
    机器学习项目大多会结合海量数据。海量数据的存储在企业中因为各种海量数据的成熟,已经是较为方便的事情了。不过这个事情会涉及到部门大多是相应的技术部门对表结构的设计以及数据组对数据的同步。(真的需要一个Team 手动狗头)。

  • 获取数据
    虽然经过前面的很多准备,但是在获取数据这个清单中,实际数据验证是必不可少的,而且可能会非常耗时。所以才会有互联网巨头入职机器学习项目先在数据探查与取数待半年这件事。虽然短暂看不合理,但是对数据完成了解后,对数据的认知是不同的。而这个软实力才更为重要。

  • 将数据转化为可操作的格式(不改变数据本身)
    python数据类型(int float list dict tuple set str除去常规的类型,还有complex bool类型)但是因为机器学习项目中目前较常使用scikit-learn,所以数据以DataFrame数据结构存储。在没有明确的指定类型的情况下,所有的数据都可以认为是object类型。
    对数据转化为可操作的格式是因为需要对数据进行初步的探查,比如最基础的head()、describe()等做基础的数据摘要来看。

  • 确保删除和保护敏感信息(比如:匿名)
    这部分数据在做数据维度清单列表的时候,以及在做数据验证的过程中进行优化、操作。不再重新在清单中单独列出步骤。但是思想是重要的,那就是数据的安全性。

  • 检查数据的类型和大小(样本、地点、时间序列)
    对于一些数据类型,比如int64,在数据摘要中确认数据后,不影响数据的情况下,缩小数据的存储空间。这样有助于在训练模型时缩短训练时间。对于object类型,确认是由于文本类型还是由于缺失值造成的数据类型不明确。对于在后期数据探查与分析中需要用到的时间序列,是需要提前进行索引转化的。(这个还要一边数据探查一边补充,待续)。

  • 采样一个数据测试集,放在一边,永远不要用它(防止数据窥探)
    测试集的选取是需要放到这个步骤的。可能会考虑数据的特征工程,但是在实际的步骤中,特征工程采用流水线方式,做成自动化。那么测试集的特征工程也是在真实要进行最后步骤的验证时,才操作。还有数据测试集的采样不能直接20%/80%。要考虑索引的稳定性,要考虑新数据进入数据集不会造成原始数据的变化(比如原来是测试集,现在是训练集)。还要考虑分层抽样,这样无论是训练集还是测试集,都不会因为在数据分层过程中造成数据的不具代表性问题。还有就是真的不要在最后确定前使用测试集,可能会造成测试集过拟合。

… …
获取数据的操作性较强,但是获取数据也是项目确认后贯穿整个项目的事务,所以在获取数据这个清单中还是要进行提问与新知识的吸纳。
… …

numpy,matplotlib,pandas,scipy,scikit-learn
… …
正常的周一也继续写了机器学习项目清单的第二项,赞。

… …
三杯吐然诺,五岳倒为轻
20210111 18:09.

你可能感兴趣的:(机器学习理论,机器学习)