此文档将对算子使用过程中可能遇到的问题做统一性说明。
训练与预测数据 header 一致性要求
说明
对于有训练和预测功能的算子,训练和预测使用的数据的 header 应当相同。
相关算子
有训练和预测功能的算子,例如:线性支持向量机分类、决策树回归、XGBoost 分类等。
原因
算子在进行训练的时候,会记录当前数据的 header(如当前数据无header,会自动生成\\_c0、\\_c1等)形式的 header 并做记录。这样做的好处是,可以在实际进行预测的时候可以根据 header 找到对应的列进行相关数据计算。
问题影响
如果训练跟预测使用的 header 不匹配,例如训练时的数据 header 是 var_2, var_5, var_7, var_1, var_3, var_9, var_6, var_8, var_4,预测时的 header 是18,14, 17, 13, 12, 15, 20, 16, 19,查看算子执行日志,您会收到类似下述报错信息:
training data did not have the following fields: 18, 14, 17, 13, 12, 15, 20, 16, 19expected var_2, var_5, var_7, var_1, var_3, var_9, var_6, var_8, var_4 in input dataValueError: feature_names mismatch: ['var_1', 'var_2', 'var_3', 'var_4', 'var_5', 'var_6', 'var_7', 'var_8', 'var_9'] ['12', '13', '14', '15', '16', '17', '18', '19', '20']data.feature_names))File "/usr/local/lib/python3.5/dist-packages/xgboost/core.py", line 1692, in _validate_featuresself._validate_features(data)File "/usr/local/lib/python3.5/dist-packages/xgboost/core.py", line 1285, in predictvalidate_features=validate_features)File "/usr/local/lib/python3.5/dist-packages/xgboost/sklearn.py", line 772, in predictFile "/opt/ml/code/youtu-1.0.0.zip/main/ti_xgboost.py", line 57, in predictFile "/opt/ml/code/youtu-1.0.0.zip/utils/base_model.py", line 349, in runFile "/opt/ml/code/youtu-1.0.0.zip/main/ti_xgboost.py", line 83, in mainFile "", line 1, inFile "/opt/ml/code/youtu-1.0.0.zip/utils/util.py", line 52, in run_mainutil.run_main()File "/opt/ml/code/youtu_entry.py", line 4, inTraceback (most recent call last):
关于 Spark 算子输出顺序的说明
说明
Spark 有关算子在输出过程中可能存在数据多次输出顺序不一致的问题。
相关算子
平台算子中使用 Spark 实现的算子,当前平台下,算法 > 机器学习下大多数算子是使用 Spark 实现的,例如:下采样、特征选择、k最近邻分类等。
原因
Spark 是一种类 Hadoop MapReduce 的通用并行框架,进行大数据处理时会将数据分别存储在不同的分区(Partition)中,因此默认情况下数据的输出顺序有可能并不一致。
问题影响
该问题并不影响数据的正确性,只是可能会出现部分数据执行相同的操作后,输出顺序并不一致的情况,仅此而已。
数据切分后实际数据比例跟输入的“切分比例”不完全相同的说明
说明
按比例进行采样的算子会存在采样结果跟预先设定的采样比例不完全匹配的问题,例如:使用数据切分算子,输入10个数据,“切分比例”设定为0.8的时候,会发现输出的数据有时候是7:3,有时候是9:1。
随着数据量增大,切分比例会无限逼近设定值。
相关算子
大多数按比例采样的算子都有此问题,例如下采样、数据切分等。
原因
以数据切分算子为例进行解释,其采样过程可以理解为:建立两个不同的分区分别对应“输出路径1”和“输出路径2”,对每一个数据生成随机数来判断它属于哪个分区。因此,有可能产生的数据并不是完全符合输入的分配比例。这样设计的目标是优化处理海量数据的性能、并发度,为这个目标舍弃了采样比例的精度。
问题影响
当输入数据量小的时候,该问题较为明显。随着数据量的增大,实际输出结果的比例会趋近于设定的切分比例。
关于模型输出格式的问题
当前机器学习算子输出的模型,若需要使用平台 PMML 推理框架进行 serving,需要将模型保存格式为 PMML。