机器学习算法几种常见步骤
1.收集数据。
可以使用很多种方法收集样本数据,例如制作网络爬虫从网站上爬取数据,从RSS反馈或者API中得到信息,设备发送过来的实测数据(风速,血糖等)。
2.准备输入数据。
得到数据之后,还必须确保数据格式符合要求,使用标准数据格式后可以融合算法和数据源,方便匹配操作。此外还需要为机器学习准备特定的数据格式,如某些算法要求特征值使用特定的格式,一些算法要求目标变量和特征值是字符串类型,而另一些算法可能要求是整数类型。
3,分析输入数据。
此步骤主要是人工分析以前得到的数据。为了确保前两步有效,最简单的方法是用文本编辑器打开数据文件,查看得到的数据是否为空值,此外还可以进一步浏览数据,分析是否可以识别出模式:数据中是否存在明显的异常值,如某些数据点与数据集中的其它值明显存在差异。通过一维,二维三维图形展示数据也是不错的方法。
这一步主要作用是确保数据集中没有垃圾数据,如果产品化系统中使用机器学习算法并且算法可以处理系统产生的数据格式,或者我们信任数据来源,可以直接跳过这一步。
4,训练算法。
机器学习算法到这一步才是真正的开始学习。根据算法不同,第四步和第五步是机器学习算法的核心。我们将前两步得到的格式化数据输入到算法,从中抽取知识或信息。这里得到的知识需要存储为计算机可以处理的格式,方便后续步骤使用。
如果使用非监督学习算法,由于不存在目标变量值,因此也不需要训练算法,所有与算法相关的内容都集中在第五步
5,测试算法。
这一步将实际使用第四步机器学习得到的知识信息。为了评估算法,必须测试算法工作的效果。对于监督学习,必须已知用于评估算法的目标变量值,对于非监督学习,也必须用到其它的评测手段来检验算法的成功率。无论那种情形,如果不满意算法的输出结果,则可以回到第四步,改正并加以测试。问题常常会跟数据的收集与整理有关,这时就要跳到第一步重新开始。
6,使用算法。
将机器学习算法转换为应用程序,执行实际任务,以检验上述步骤是否可以在实际环境中正常工作,此时如果遇到新的数据问题,同样需要重复执行上述的步骤。
二、机器学习算法训练预测模型的常规流程
以XGBoost算法为例,主要操作步骤如下:
读取集群目录数据
批量重新命名字段名称
统计各列缺失值个数
对缺失值进行填充(数值型变量采用中位数、分类变量采用众数)
过滤掉异常记录
过滤掉缺失值过多的列
对分类型变量进行编码,将label列转换为0/1类型
批量对分类变量先进行StringIndexer操作,再批量进行OneHotEncoderEstimator操作
使用VectorAssembler拼接字段
创建XGBoost
设置pipeline模式: val pipeline = new Pipeline().setStages(indexers ++ encoders ++ Array(vectorAssembler, xgb))
创建evaluator,采用ROC
创建XGBoost paramater grid
构造cv
切分trainingData、testData,设定seed便于数据复现
训练模型: val xgbModel = cv.fit(trainingData)
测试模型: val results = xgbModel.transform(testData)
保存BestModel: val bestPipelineModel = xgbModel.bestModel.asInstanceOf[PipelineModel]
创建一个测试数据集不含label字段,但是需要包含对应的user_id
读取创建的数据集进行预测
注:在进行特征工程之前需要单独封装一个函数,用于数据预处理,也便于后续进行模型预测,主要是特征工程暂时无法操作的数据预处理步骤。