重要说明:

IBM Cloud Pak® for Data 4.7 版本将于 2025 年 7 月 31 日结束支持(EOS)。 欲了解更多信息,请参阅 IBM Cloud Pak for Data 版本 4.X 的停止服务公告

在 IBM Cloud Pak for Data 4.7 版本支持结束之前,升级到 IBM Software Hub 5.1 版本。 更多信息,请参阅 IBM Software Hub 版本 5.1 文档中的升级 IBM Software Hub。

笔记本中的 SPSS 预测性分析分类和回归算法

您可以在 Notebook 中使用广义线性模型,线性回归,线性支持向量机,随机树或 CHAID SPSS 预测分析算法。

广义线性模型

广义线性模型 (GLE) 是适用于不同类型的数据的常用分析算法。 它不仅涵盖了广泛使用的统计模型(例如,用于正态分布目标的线性回归、用于二元或多项式目标的 Logistic 模型以及用于计数数据的对数线性模型),而且还通过其通用模型公式涵盖了众多非常有用的统计模型。 除了构建模型外,广义线性模型还提供了一些其他有用功能(例如,变量选择、自动分布选择和关联函数)以及模型评估统计信息。 此模型具有用于规则化的选项,例如 LASSO ,岭回归,弹性网络等。 还能够处理非常广泛的数据。

有关如何选择分布和关联函数的更多详细信息,请参阅“分布和关联函数组合”。

示例代码 1:

此示例显示了一种 GLE 设置,其中包含指定的分布和关联函数、指定的效应以及截距,该设置能够绘制 ROC 曲线并打印输出相关性矩阵。 此场景先构建模型,然后对其进行评分。

Python 示例:

from spss.ml.classificationandregression.generalizedlinear import GeneralizedLinear
from spss.ml.classificationandregression.params.effect import Effect

gle1 = GeneralizedLinear(). \
    setTargetField("Work_experience"). \
    setInputFieldList(["Beginning_salary", "Sex_of_employee", "Educational_level", "Minority_classification", "Current_salary"]). \
    setEffects([
        Effect(fields=["Beginning_salary"], nestingLevels=[0]),
        Effect(fields=["Sex_of_employee"], nestingLevels=[0]),
        Effect(fields=["Educational_level"], nestingLevels=[0]),
        Effect(fields=["Current_salary"], nestingLevels=[0]),
        Effect(fields=["Sex_of_employee", "Educational_level"], nestingLevels=[0, 0])]). \
    setIntercept(True). \
    setDistribution("NORMAL"). \
    setLinkFunction("LOG"). \
    setAnalysisType("BOTH"). \
    setConductRocCurve(True)

gleModel1 = gle1.fit(data)
PMML = gleModel1.toPMML()
statXML = gleModel1.statXML()
predictions1 = gleModel1.transform(data)
predictions1.show()

示例代码 2:

此示例显示了一种 GLE 设置,其中包含未指定的分布和关联函数,以及使用前向步进法的变量选择功能。 此场景先使用前向步进法来选择分布、关联函数和效应,然后构建模型并对其进行评分。

Python 示例:

from spss.ml.classificationandregression.generalizedlinear import GeneralizedLinear
from spss.ml.classificationandregression.params.effect import Effect

gle2 = GeneralizedLinear(). \
    setTargetField("Work_experience"). \
    setInputFieldList(["Beginning_salary", "Sex_of_employee", "Educational_level", "Minority_classification", "Current_salary"]). \
    setEffects([
        Effect(fields=["Beginning_salary"], nestingLevels=[0]),
        Effect(fields=["Sex_of_employee"], nestingLevels=[0]),
        Effect(fields=["Educational_level"], nestingLevels=[0]),
        Effect(fields=["Current_salary"], nestingLevels=[0])]). \
    setIntercept(True). \
    setDistribution("UNKNOWN"). \
    setLinkFunction("UNKNOWN"). \
    setAnalysisType("BOTH"). \
    setUseVariableSelection(True). \
    setVariableSelectionMethod("FORWARD_STEPWISE")

gleModel2 = gle2.fit(data)
PMML = gleModel2.toPMML()
statXML = gleModel2.statXML()
predictions2 = gleModel2.transform(data)
predictions2.show()

示例代码 3:

此示例显示了一种 GLE 设置,其中包含未指定的分布、指定的关联函数,以及使用 LASSO 方法的变量选择功能,并且能够检测双向交互和自动选择惩罚参数。 此场景先检测双向交互以获取效应,接着使用 LASSO 方法以通过自动选择惩罚参数来选择分布和效应,然后构建模型并对其进行评分。

Python 示例:

from spss.ml.classificationandregression.generalizedlinear import GeneralizedLinear
from spss.ml.classificationandregression.params.effect import Effect

gle3 = GeneralizedLinear(). \
    setTargetField("Work_experience"). \
    setInputFieldList(["Beginning_salary", "Sex_of_employee", "Educational_level", "Minority_classification", "Current_salary"]). \
    setEffects([
        Effect(fields=["Beginning_salary"], nestingLevels=[0]),
        Effect(fields=["Sex_of_employee"], nestingLevels=[0]),
        Effect(fields=["Educational_level"], nestingLevels=[0]),
        Effect(fields=["Current_salary"], nestingLevels=[0])]). \
    setIntercept(True). \
    setDistribution("UNKNOWN"). \
    setLinkFunction("LOG"). \
    setAnalysisType("BOTH"). \
    setDetectTwoWayInteraction(True). \
    setUseVariableSelection(True). \
    setVariableSelectionMethod("LASSO"). \
    setUserSpecPenaltyParams(False)

gleModel3 = gle3.fit(data)
PMML = gleModel3.toPMML()
statXML = gleModel3.statXML()
predictions3 = gleModel3.transform(data)
predictions3.show()

线性回归

线性回归模型可分析一个连续目标与一个或多个连续/分类预测变量之间的预测关系。

线性回归模型的功能包括自动交互效应检测、前向步进模型选择、诊断检查以及基于估测边际均值 (EMMEANS) 的异常类别检测。

示例代码:

Python 示例:

from spss.ml.classificationandregression.linearregression import LinearRegression

le = LinearRegression(). \
    setTargetField("target"). \
    setInputFieldList(["predictor1", "predictor2", "predictorn"]). \
    setDetectTwoWayInteraction(True). \
    setVarSelectionMethod("forwardStepwise")

leModel = le.fit(data)
predictions = leModel.transform(data)
predictions.show()

线性支持向量机

线性支持向量机 (LSVM) 提供了一种有监督的学习方法,这种学习方法可根据一组带标签的训练数据来生成输入/输出映射函数。 这种映射函数可以是分类函数或回归函数。 LSVM 旨在解决规模较大的问题(问题的规模取决于记录数目和变量(参数)数目)。 其特征空间与问题的输入空间相同,它可以处理单条记录中非零元素的平均数量较小的稀疏数据。

示例代码:

Python 示例:

from spss.ml.classificationandregression.linearsupportvectormachine import LinearSupportVectorMachine

lsvm = LinearSupportVectorMachine().\
    setTargetField("BareNuc").\
    setInputFieldList(["Clump", "UnifSize", "UnifShape", "MargAdh", "SingEpiSize", "BlandChrom", "NormNucl", "Mit", "Class"]).\
    setPenaltyFunction("L2")

lsvmModel = lsvm.fit(df)
predictions = lsvmModel.transform(data)
predictions.show()

随机树

随机树是用于生成强(精确)预测模型的重要方法。 它具有可比性,有时比其他最先进的分类或回归问题方法更好。

随机树是由多个类似 CART 的树组成的整体模型。 每棵树生长在一个 Bootstrap 样本上,此样本是通过对原始数据用例进行有放回的采样来获得的。 此外,在树生长期间,对于每个节点,将在从整个变量集随机抽取的一小部分指定变量中选择最佳拆分变量。 每棵树都可以最大程度地生长,并且无修剪。 进行评分时,“随机树”通过多数表决(对于分类)或平均值(对于回归)来组合各个树的分数。

示例代码:

Python 示例:

from spss.ml.classificationandregression.ensemble.randomtrees import RandomTrees

# Random trees required a "target" field and some input fields. If "target" is continuous, then regression trees will be generate else classification .
# You can use the SPSS Attribute or Spark ML Attribute to indicate the field to categorical or continuous.
randomTrees = RandomTrees(). \
    setTargetField("target"). \
    setInputFieldList(["feature1", "feature2", "feature3"]). \
    numTrees(10). \
    setMaxTreeDepth(5)

randomTreesModel = randomTrees.fit(df)
predictions = randomTreesModel.transform(scoreDF)
predictions.show()

CHAID

CHAID(即“卡方自动交互检测”)是一种分类方法,该方法使用卡方统计量来识别最优拆分,以构建决策树。 它还提供了用于解决回归问题的扩展。

CHAID 首先检查每个输入字段和目标之间的交叉表,然后使用卡方独立性检验来检验显著性。 如果其中多个关系具有统计意义,那么 CHAID 将选择最重要 (最小 p 值) 的输入字段。 如果输入具有两个以上的类别,那么将会对这些类别进行比较,然后将结果中未显示出差异的类别合并在一起。 此操作通过将显示的显著性差异最低的类别对相继合并在一起来实现。 当所有剩余类别在指定的检验级别上存在差异时,此类别合并过程将终止。 对于名义输入字段,可以合并任何类别;对于有序集合,只能合并相邻的类别。 不能直接使用目标以外的连续输入字段; 必须首先将其分箱到有序字段中。

Exhaustive CHAID 是 CHAID 的修正版,它可对每个预测变量的所有可能分割进行更彻底的检查,但计算时间比较长。

示例代码:

Python 示例:

from spss.ml.classificationandregression.tree.chaid import CHAID

chaid = CHAID(). \
    setTargetField("salary"). \
    setInputFieldList(["educ", "jobcat", "gender"])

chaidModel = chaid.fit(data)
pmmlStr = chaidModel.toPMML()
statxmlStr = chaidModel.statXML()

predictions = chaidModel.transform(data)
predictions.show()

父主题: SPSS 预测分析算法