经过长时间 运行 离线 Spark (MLlib) 模型训练后实时获得预测的过程是什么?
What is the procedure to get the prediction in real-time after long running off-line Spark (MLlib) model training?
比如我用MLlib logistic regression来训练数据集,每个数据都有超过1亿个特征,经过几个小时的训练我们得到了模型,如何使用模型“实时”预测” 那么,例如,网页在 200 毫秒内响应用户预测结果?
只需使用 model.predict(...)
?
对于 Spark 2.0 逻辑回归仅支持 binary classification 。 OP 说回归..所以我们需要跟进..
在任何情况下,对于使用逻辑回归的二元分类,预测所做的工作几乎是微不足道的:
BLAS.dot(features, coefficients) + intercept
所以 Spark 只需要取训练权重 ("coefficients") 和输入行的点积。
要牢记一件事:单行必须适合单台机器的内存。另外向量中的元素数量==特征数量必须保持<= 2^31.
进一步更新 Regression
在 Spark 2.0 MLlib 中通过支持以下 "families" 的 GeneralizedLinearRegression
class 处理:
- 高斯
- 二项式
- 泊松
- 伽玛
计算由WeightedLeastSquares
执行,类似于LogisticRegression
BLAS.dot(features, coefficients) + intercept
因此预测的复杂度 低 - 因此预测应该完成 大约与将要预测的观察加载到 Spark ,并且不管它的大小。它只需要适合一台机器的内存。
比如我用MLlib logistic regression来训练数据集,每个数据都有超过1亿个特征,经过几个小时的训练我们得到了模型,如何使用模型“实时”预测” 那么,例如,网页在 200 毫秒内响应用户预测结果?
只需使用 model.predict(...)
?
对于 Spark 2.0 逻辑回归仅支持 binary classification 。 OP 说回归..所以我们需要跟进..
在任何情况下,对于使用逻辑回归的二元分类,预测所做的工作几乎是微不足道的:
BLAS.dot(features, coefficients) + intercept
所以 Spark 只需要取训练权重 ("coefficients") 和输入行的点积。
要牢记一件事:单行必须适合单台机器的内存。另外向量中的元素数量==特征数量必须保持<= 2^31.
进一步更新 Regression
在 Spark 2.0 MLlib 中通过支持以下 "families" 的 GeneralizedLinearRegression
class 处理:
- 高斯
- 二项式
- 泊松
- 伽玛
计算由WeightedLeastSquares
执行,类似于LogisticRegression
BLAS.dot(features, coefficients) + intercept
因此预测的复杂度 低 - 因此预测应该完成 大约与将要预测的观察加载到 Spark ,并且不管它的大小。它只需要适合一台机器的内存。