Spark 中的机器学习库及示例
mllib
是 spark 的机器学习库,旨在简化机器学习的工程实践工作,并方便扩展到更大规模。mllib
由一些通用的学习算法和工具组成,包括分类、回归、聚类、协同过滤、降维等,同时还包括底层的优化原语和高层的管道 api。具体来说,主要包括以下几方面的内容:
- 机器学习算法:常用的学习算法,如分类、回归、聚类和协同过滤;
- 特征化工具:特征提取、转化、降维和特征选择等工具;
- 管道:由于构建、评估和调整机器学习管道的工具;
- 持久性:保存和加载算法,模型和管道;
- 实用工具:线性代数,统计和数据处理等工具。
dataframe-based api
从 spark 2.0 开始,rdd-based api 已经进入维护模式,不再增加新的功能,并期望在 spark 3.0 中移除。而 dataframe-based api 成为 spark 中的机器学习的主要 api。主要原因有以下几点:
dataframes 提供比 rdds 更加用户友好的 api,好处包括支持多种 spark 数据源,sql/dataframe 查询,tungsten 和 catalyst 优化以及跨语言的统一 api;
dataframe-based api 为 mllib 提供了统一的跨多种 ml 算法和多种语言的 api;
dataframes 有助于实用的 ml 管道,特别是功能转换。
使用 ml pipeline api 可以很方便的把数据处理,特征转换,正则化,以及多个机器学习算法联合起来,构建一个单一完整的机器学习流水线。这种方式给我们提供了更灵活的方法,更符合机器学习过程的特点,也更容易从其他语言迁移。
机器学习工具
示例(逻辑回归)
逻辑回归是预测分类结果的常用方法。广义线性模型的一个特例是预测结果的概率。在 spark.ml 中,逻辑回归可以用 binomial logistic regression
来预测二元结果,或者使用 multinomial logistic regression
来预测多类结果。使用 family
参数在这两个算法之间进行选择,或者保持不设置,spark 将推断出正确的变量。
from pyspark.ml.classification import logisticregression # load training data training = spark.read.format("libsvm").load("data/mllib/sample_libsvm_data.txt") lr = logisticregression(maxiter=10, regparam=0.3, elasticnetparam=0.8) # fit the model lrmodel = lr.fit(training) # print the coefficients and intercept for logistic regression print("coefficients:" + str(lrmodel.coefficients)) print("intercept:" + str(lrmodel.intercept)) # we can also use the multinomial family for binary classification mlr = logisticregression(maxiter=10, regparam=0.3, elasticnetparam=0.8, family="multinomial") # fit the model mlrmodel = mlr.fit(training) # print the coefficients and intercepts for logistic regression with multinomial family print("multinomial coefficients:" + str(mlrmodel.coefficientmatrix)) print("multinomial intercepts:" + str(mlrmodel.interceptvector))
其中,libsvm
为一种数据格式,具体形式可以参考:。regparam
定义了正则化项的权重参数,elasticnetparam
表示选择的正则化项。假设定义的正则化项如下:
\[l(w)=\lambda(\alpha l_1(w)+(1-\alpha)l_2(w))\tag{1}\]
则 regparam
参数正是对应了参数 \(\lambda\),而 elasticnetparam
则是对应了参数 \(\alpha\),则有如下情况:
- 当 \(\alpha=0\) 时,惩罚项为 l2 正则,默认情况;
- 当 \(\alpha=1\) 时,惩罚项为 l1 正则;
- 当 \(0<\alpha<1\) 时,惩罚项为 l1 正则和 l2 正则的混合;
l1 和 l2 正则的主要目的是解决模型的过拟合问题,具体的形式为:
上一篇: js兼容
下一篇: 酸菜鲈鱼在做的时候要注意这些事情哦
推荐阅读
-
Python机器学习之scikit-learn库中KNN算法的封装与使用方法
-
机器学习笔记:python中scikit-learn库的K-Means类
-
Spark 中的机器学习库及示例
-
理解机器学习中的线性回归及代码实现
-
Python机器学习之scikit-learn库中KNN算法的封装与使用方法
-
PHP中的cURL请求及示例学习笔记
-
机器学习在启动耗时测试中的应用及模型调优(一)
-
javaScript中的this示例学习详解及工作原理_基础知识
-
json转js与js转json以及练习了ajax-xhr/fetch异步通讯以及模块常识,其中Promise状态及Promise中的Fetch API部分暂时还没进行示例学习操作
-
json转js与js转json以及练习了ajax-xhr/fetch异步通讯以及模块常识,其中Promise状态及Promise中的Fetch API部分暂时还没进行示例学习操作