机器学习数据探索实战过程–方法论
根据实践总结出在实践中数据科学的数据探索的流程。
机器学习任务工作阶段说明
完成一个机器学习任务,大概分为以下几个阶段,可以从《Data Science Solutions》中查看详细说明:
- 提出问题和定义问题
- 获取训练数据集和测试数据集
- 整合数据,准备和清理数据
- 分析数据,对数据进行特征识别,探索数据
– 这一步可以有多种方法,比如可视化等 - 建立模型、预测和解决问题
- 可视化,报告和呈现问题解决步骤和最终解决方案
- 提供或提交结果
注意:以上只是一个顺序的工作流,在实际工作中,可能多个工作流之间交叉进行。
问题定义
做这个数据分析是为了达到一个什么目的?是对数据进行分类,还是对数据做回归分析,还是需要做一个预测模型。
任务目标
数据科学的整个流程,主要解决以下几个目标:
Classifying(分类或归类)
我们可能希望对我们的样本数据进行归类或分类。我们也可能想了解不同类别对我们的解决方案目标的影响或相关性。
Correlating(寻找关联性)
我们可以只基于训练数据集中的可用特征来解决问题。但我们需要探索数据,最好能找到以下问题的答案:
- 数据集中的哪些特征,对我们的目标有重大贡献或影响?
- 在统计学上,特征和目标之间是否存在相关性?
- 当特征值变化时,目标状态也会改变吗,反之亦然?
这可以针对给定数据集中的数字和分类特征进行测试。我们也可能想要确定后续目标和工作流阶段的特征之间的相关性。关联某些特征,可能有助于创建,完善或更正特征。
Converting(转换特征值)
对于建模阶段,我们需要准备数据。根据模型算法的选择,可能需要将所有特征值转换为等效的数值类型的值。例如,将文本分类值转换为数值。
Completing(完善特征值)
数据准备也可能要求我们估计特征中的任何缺失值。当没有缺失值时,模型算法的效果可能更佳。
Correcting(纠正特征值)
我们还需要检查并修正训练数据集中的错误数据(不准确等),并排除含有错误数据的记录。一种方法是检测我们的样本数据或特征中的任何异常值。如果不符合分析要求,或者可能会歪曲结果,我们也可能会完全去除该特征。
Creating(创建新特征)
我们可能根据现有的特征或一组特征创建新特征,并使新特征遵循相关性,转换性和完整性目标。
Charting(特征可视化展示)
如何根据数据的性质和解决目标选择正确的可视化图表。
实战过程
获取数据
可以从数据库中获取数据,可以从文件中获取数据,可以从网络的url来获取数据。获取到原始数后,就可以进行后续的操作了。
通过数据描述来分析数据
可以通过python的panda包来对数据进行分析,主要进行一下一些分析:
查看数据集中有哪些特征
这一步主要了解给你的数据集中有哪些维度(属性列),了解每个维度的业务意义。查看数据集中哪些特征是类别(枚举值)特征
类别特征一般是离散的枚举数值或文字,比如,性别:男,女;等级:高,中,低。
顺序特征也分几种,一种是与顺序无关的,比如:男,女;一种是与顺序有关的,比如,等级:高中低。查看哪些特征是数值类型的特征
数值特征是以离散,连续或时间序列为基础的值。混合类型的特征
数字和字母混合类型。哪些特征值有错误
这些特征的特征值中包含一些错误,包括拼写错误。哪些特征可能包含空白值,null或空值
有哪些数据类型的特征
比如:有些数据集有整数,小数,字符串,日期等等。样本中数值特征的分布情况如何?
这有助于我们尽可能早的洞见数据,实际问题领域的培训数据集的代表性如何?
若是使用panda,可以通过describe()函数可以查看该信息。这一步需要计算数据的:平均值,最大值,最小值,众数,标准差值,方差值等。可以看出,哪些值有重复,哪些值没有重复等等。哪些是类别特征?
基于数据分析的假设
根据以上的数据分析,我们就可以对数据和相关的任务进行一些假设。比如:那些变量可能和目标值相关性大,哪些变量的分布可能影响目标值。等等。
以下举例说明:
根据结果目标,我们提出以下假设:
我们根据迄今为止的数据分析得出以下假设。我们可以在采取适当行动之前进一步验证这些假设。
Correlating(关联性的假设)
我们想知道每个特征与目标特征(Survived)相关的程度。我们希望在项目的早期做到这一点,并将这些快速相关性与项目后期的模型相关性进行匹配。
Completing(数据的完善)
- 1.我们可能希望完善Aage特征,因为它与Survived绝对相关。但Age特征有缺失,通过信息可以看出,它的数量是714。
- 2.我还需要完善Embarked特征,它和目标特征有很大联系,并且可能影响其他特征。
Correcting(纠正数据的错误)
- 1.Ticket 特征可能会从我们的分析中删除,因为它包含高比例的重复(22%),而且机票和生存之间可能没有相关性。
- 2.Cabin 特征, 可能被删除,因为它是高度不完整的或在训练和测试数据集中包含许多空值。
- 3.PassengerId可能会从训练数据集中删除,它与Survived没有关系。
- 4.Name属性:是比较不规范的,可能不直接对生存有贡献,所以可能会被丢弃。
Creating(创建新的特征)
- 1.我们可能想要创建一个名为“基于Parch”和“SibSp”的特征,以获得家庭成员的总数。
- 2.我们可能需要处理Name特征,将标题(Title)提取为新特征。
- 3.我们可能为年龄段创建一个新特征,它将一个连续的数值特征,变成离散的类别特征。
- 4.如果对我们的分析有帮助,我们可能需要创建一个Fare范围的新特征。
Classifying(归类)
我们还可以根据前面提到的问题描述,增加我们的假设:
-1.女性(Sex=female)更有可能幸存下来。
-2.儿童(Age
进一步分析数据来验证假设
通过pivoting 特征来分析数据
为了验证我们的假设,我们可以通过pivoting 特征矩阵来进行验证。
在这个阶段,我们只能针对没有任何空值的特征做到这一点。或者在分类特征,无序的:如Sex属性,有序的如:PClass字段或离散的。来验证我们的假设。
通过可视化分析来验证假设的正确性
通过图形的方式来直观的分析和验证我们的假设。
数字特征的和目标的相关性
顺序数值特征的和目标的相关性
类别特征和目标的相关性
类别特征和数值特征的相关性
好了,到了这里我们基本上已经明确我们的数据需要进行那些处理:
* 那些维度需要转换
* 哪些维度需要进行数据清洗
* 哪些维度需要删除
* 哪些维度需要转换
* 还需要创建哪些新的维度,可以通过哪些维度来进行构建
* 选择哪种模型进行训练会效果比较好
数据预处理
但我们的数据探索已经进行得差不多的时候,我们就可以对数据进行预处理了。
模型选择和训练
剩下的就按照每种模型的训练方法来进行训练,就是比较规范的步骤了。
总结:数据探索的过程需要数据分析师对业务比较了解,才能根据经验来查看数据之间的关系,数据的分布好坏,维度和目标的相关性程度等等。