目录
估计器
分类
回归
聚类
管道
估计器
估计器可以被看作是需要估算的统计模型,以便对您的观测值进行预测或分类。
如果从抽象的 Estimator 类派生,新模型必须实现 .fit(...) 方法,该方法根据在 DataFrame 中找到的数据以及一些默认或用户指定的参数来拟合模型。
PySpark 中有许多估计器,我们现在将简要描述 Spark 2.0 中可用的模型。
分类
ML 包为数据科学家提供了七种分类模型供选择。这些模型从最简单的(如逻辑回归)到更复杂的都有。我们将在下一节中简要描述每一个:
- LogisticRegression:分类的基准模型。逻辑回归使用 logit 函数计算观测值属于特定类别的概率。在撰写本文时,PySpark ML 仅支持二元分类问题。
- DecisionTreeClassifier:构建决策树以预测观测值的类别的分类器。指定 maxDepth 参数可以限制树生长的深度,minInstancePerNode 确定进一步分割所需的树节点中的最小观测次数,maxBins 参数指定连续变量将被分割成的最大箱数,而 impurity 指定用于测量并计算从分割中获得的信息增益的度量。
- GBTClassifier:用于分类的梯度提升树模型。该模型属于集成模型家族:将多个弱预测模型结合起来形成一个强模型。目前,GBTClassifier 模型支持二元标签,以及连续和分类特征。
- RandomForestClassifier:这个模型生成多个决策树(因此得名森林),并使用这些决策树的模式输出来对观测值进行分类。RandomForestClassifier 支持二元和多项式标签。
- NaiveBayes:基于贝叶斯定理,该模型使用条件概率理论对观测值进行分类。PySpark ML 中的 NaiveBayes 模型支持二元和多项式标签。
- MultilayerPerceptronClassifier:模仿人脑的分类器。深深植根于人工神经网络理论,模型是一个黑盒,即不容易解释模型的内部参数。该模型至少由三层完全连接的人工神经元组成:输入层(需要等于数据集中的特征数量)、至少一个隐藏层,以及输出层的神经元数量等于标签中的类别数量。输入层和隐藏层的所有神经元都有 sigmoid 激活函数,而输出层神经元的激活函数是 softmax。
- OneVsRest:将多类分类简化为二元分类。例如,在多项式标签的情况下,模型可以训练多个二元逻辑回归模型。例如,如果标签 == 2,模型将构建一个逻辑回归,将标签 == 2 转换为 1(所有剩余的标签值将被设置为 0),然后训练一个二元模型。然后对所有模型进行评分,概率最高的模型获胜。
回归
PySpark ML 包中有七种模型可用于回归任务。与分类一样,这些模型从一些基本的(如必不可少的线性回归)到更复杂的都有:
- AFTSurvivalRegression:拟合加速失效时间回归模型。它是一个参数模型,假设一个特征的边际效应加速或减缓寿命期望(或过程失效)。它非常适用于具有明确阶段的过程。
- DecisionTreeRegressor:与分类模型类似,明显的区别是标签是连续的而不是二元的(或多项式的)。
- GBTRegressor:与 DecisionTreeRegressor 一样,区别在于标签的数据类型。
- GeneralizedLinearRegression:具有不同核函数(链接函数)的线性模型家族。与假设误差项正态性的线性回归不同,GLM 允许标签具有不同的误差项分布:PySpark ML 包中的 GeneralizedLinearRegression 模型支持高斯、二项式、伽马和泊松误差分布家族以及多种不同的链接函数。
- IsotonicRegression:一种回归类型,适合你的数据形成一个自由形式的、非递减的线。它适用于拟合有序且递增的观测值数据集。
- LinearRegression:最简单的回归模型,它假设特征和连续标签之间存在线性关系,并且误差项呈正态分布。
- RandomForestRegressor:与 DecisionTreeRegressor 或 GBTRegressor 类似,RandomForestRegressor 拟合的是连续标签而不是离散标签。
聚类
聚类是一类无监督模型,用于发现数据中的潜在模式。PySpark ML 包目前提供了四种最受欢迎的模型:
- BisectingKMeans:k-means 聚类方法和层次聚类的结合。该算法从所有观测值在一个单一的簇开始,逐步将数据分割成 k 个簇。
- KMeans:这是著名的 k-means 算法,将数据分离成 k 个簇,迭代搜索最小化每个观测值与其所属于簇的质心之间平方距离之和的质心。
- GaussianMixture:该方法使用 k 个具有未知参数的高斯分布来剖析数据集。利用期望最大化算法,通过最大化对数似然函数找到高斯的参数。
- LDA:这个模型用于自然语言处理应用中的主题建模。
PySpark ML 中还有一个推荐模型可用,但我们将不在这里描述它。
管道
在 PySpark ML 中,管道是一个端到端的转换-估计过程的概念(具有不同的阶段),它摄取一些原始数据(以 DataFrame 形式),执行必要的数据加工(转换),并最终估计一个统计模型(估计器)。
管道可以被看作是由多个离散阶段组成的链。当在管道对象上执行 .fit(...) 方法时,所有阶段都会按照它们在 stages 参数中指定的顺序执行;stages 参数是转换器和估计器对象的列表。管道对象的 .fit(...) 方法执行转换器的 .transform(...) 方法和估计器的 .fit(...) 方法。
通常,前一阶段的输出成为下一阶段的输入:当从转换器或估计器抽象类派生时,需要实现 .getOutputCol() 方法,该方法返回在创建对象时指定的 outputCol 参数的值。