mllib
是 spark 的机器学习库,旨在简化机器学习的工程实践工作,并方便扩展到更大规模。mllib
由一些通用的学习算法和工具组成,包括分类、回归、聚类、协同过滤、降维等,同时还包括底层的优化原语和高层的管道 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\),则有如下情况:
l1 和 l2 正则的主要目的是解决模型的过拟合问题,具体的形式为:
如对本文有疑问, 点击进行留言回复!!
HBase Filter 过滤器之FamilyFilter详解
去 HBase,Kylin on Parquet 性能表现如何?
如何找到Hive提交的SQL相对应的Yarn程序的applicationId
网友评论