下面的代码显示了我是如何创建模型管道的,在这里只有回归器发生了变化。我正在尝试使用随机林、线性回归和gbt模型,但是当在一台机器上执行时,它们都显示出不同的结果。在这两种设置中,所有默认设置都使用完全相同的emr群集配置。
def _create_training_pipeline(self, regressor_name, tuned_model=None):
if tuned_model is None:
tuned_model = {}
stages = []
for col in self._string_cols:
indexer = StringIndexer() \
.setInputCol(col) \
.setHandleInvalid("skip") \
.setOutputCol(col + "Index")
stages += [indexer]
for col in self._string_cols:
encoder = OneHotEncoder() \
.setInputCol(col + "Index") \
.setOutputCol(col + "Vec")
stages += [encoder]
assembler = VectorAssembler() \
.setInputCols([x + "Vec" for x in self._string_cols] + self._numerical_cols) \
.setHandleInvalid("skip") \
.setOutputCol("features")
feature_indexer = VectorIndexer() \
.setInputCol(assembler.getOutputCol()) \
.setOutputCol("indexedFeatures") \
.setHandleInvalid("skip") \
.setMaxCategories(2)
regressor = self._get_regressor(regressor_name, feature_indexer, tuned_model)
stages += [assembler, feature_indexer, regressor]
pipeline = Pipeline(stages=stages)
return pipeline
def _get_regressor(self, regressor_name, feature_indexer, params_dict):
if regressor_name == "RFR":
return RandomForestRegressor() \
.setSeed(100) \
.setLabelCol(self._label_column) \
.setFeaturesCol(feature_indexer.getOutputCol()) \
.setMaxDepth(params_dict.get("maxDepth", 5)) \
.setNumTrees(params_dict.get("numTrees", 10)) \
.setMinInstancesPerNode(params_dict.get("minInstancesPerNode", 2))
elif regressor_name == "LR":
return LinearRegression() \
.setLabelCol(self._label_column) \
.setFeaturesCol(feature_indexer.getOutputCol()) \
.setMaxIter(params_dict.get("maxIter", 10)) \
.setEpsilon(params_dict.get("epsilon", 2)) \
.setRegParam(params_dict.get("regParam", 0.5))
else:
return GBTRegressor() \
.setSeed(100) \
.setLabelCol(self._label_column) \
.setFeaturesCol(feature_indexer.getOutputCol()) \
.setMaxIter(params_dict.get("maxIter", 50)) \
.setMaxDepth(params_dict.get("maxDepth", 10))
一个可能的问题可能是分布式训练与单节点训练(找不到源来备份)
为了确定这个观察结果,我已经做了20次这个测试。在我的本地计算机中,结果与单节点emr设置的结果相匹配。
1条答案
按热度按时间azpvetkf1#
firas abuzaid等人在“离散化误差分析”标题下讨论了分布式机器学习的权衡:
为了提高效率,通常将连续特征离散化为b离散单元。。。离散化启发式算法的结果是由离散的代表来逼近连续值,并且会对生成的决策树的统计性能产生不利影响。。。
yggdrasil:一个优化的大规模深层决策树训练系统。firas abuzaid、joseph bradley、feynman liang、andrew feng、lee yang、matei zaharia、ameet talwalkar
在单个节点/本地机器部署上不需要mllib用于分布式训练的这种描述/分块近似。因此,对于在单个节点上训练的模型,我希望得到的模型的统计性能比分布式情况更好。