当前位置: 移动技术网 > IT编程>数据库>其他数据库 > Spark 中的机器学习库及示例

Spark 中的机器学习库及示例

2019年06月15日  | 移动技术网IT编程  | 我要评论

mllib 是 spark 的机器学习库,旨在简化机器学习的工程实践工作,并方便扩展到更大规模。mllib 由一些通用的学习算法和工具组成,包括分类、回归、聚类、协同过滤、降维等,同时还包括底层的优化原语和高层的管道 api。具体来说,主要包括以下几方面的内容:

  1. 机器学习算法:常用的学习算法,如分类、回归、聚类和协同过滤;
  2. 特征化工具:特征提取、转化、降维和特征选择等工具;
  3. 管道:由于构建、评估和调整机器学习管道的工具;
  4. 持久性:保存和加载算法,模型和管道;
  5. 实用工具:线性代数,统计和数据处理等工具。

dataframe-based api

从 spark 2.0 开始,rdd-based api 已经进入维护模式,不再增加新的功能,并期望在 spark 3.0 中移除。而 dataframe-based api 成为 spark 中的机器学习的主要 api。主要原因有以下几点:

  1. dataframes 提供比 rdds 更加用户友好的 api,好处包括支持多种 spark 数据源,sql/dataframe 查询,tungsten 和 catalyst 优化以及跨语言的统一 api;

  2. dataframe-based api 为 mllib 提供了统一的跨多种 ml 算法和多种语言的 api;

  3. 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 正则的主要目的是解决模型的过拟合问题,具体的形式为:

uploading-image-517376.png

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网