Classificação de análise de dados preditiva e algoritmos de regressão SPSS em blocos de notas

É possível usar modelo linear generalizado, regressão linear, máquina de vetores de suporte linear, árvores aleatórias ou algoritmos de análise de dados preditiva CHAID SPSS em blocos de notas.

Modelo linear generalizado

O Modelo Linear Generalizado (GLE) é um algoritmo analítico amplamente utilizado para diferentes tipos de dados. Ele abrange não só modelos estatísticos amplamente utilizados, como regressão linear para destinos normalmente distribuídos, modelos logísticos para destinos binários ou multinomiais e modelos lineares de log para dados de contagem, mas também cobre muitos modelos estatísticos úteis através de sua formulação de modelo bastante geral. Além de construir o modelo, o Modelo Linear Generalizado fornece outros recursos úteis, como seleção de variáveis, seleção automática de distribuição e função de ligação e estatísticas de avaliação de modelo. Esse modelo tem opções para regularização, como LASSO, regressão de cume, rede elástica, etc. e também é capaz de manipular dados muito amplos.

Para obter mais detalhes sobre como escolher distribuição e função de ligação, consulte Combinação de Distribuição e Função de Ligação.

Código de exemplo 1:

Este exemplo mostra uma configuração de GLE com distribuição e função de ligação especificadas, efeitos especificados, interceptação, condução de curva ROC e impressão de matriz de correlações. Este cenário constrói um modelo e depois o pontua.

Exemplo do 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()

Código de exemplo 2:

Este exemplo mostra uma configuração de GLE com distribuição e função de ligação não especificadas e uma seleção de variáveis usando o método forward stepwise. Este cenário usa o método forward stepwise para selecionar distribuição, função de ligação e efeitos e, depois, constrói e pontua o modelo.

Exemplo do 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()

Código de exemplo 3:

Este exemplo mostra uma configuração de GLE com distribuição não especificada, função de ligação especificada e seleção de variáveis usando o método LASSO, com detecção de interação de dois fatores e seleção de parâmetro de penalidade automática. Este cenário detecta interação de dois fatores para efeitos, depois usa o método LASSO para selecionar distribuição e efeitos usando seleção de parâmetro de penalidade automática e depois constrói e pontua o modelo.

Exemplo do 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()

Regressão linear

O modelo de regressão linear analisa o relacionamento preditivo entre um destino contínuo e um ou mais preditores, que podem ser contínuos ou categóricos.

Os recursos do modelo de regressão linear incluem detecção de efeito de interação automática, seleção de modelo forward stepwise, verificação de diagnóstico e detecção de categoria incomum com base em Médias Marginais Estimadas (EMMEANS).

Código de exemplo:

Exemplo do 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()

Support Vector Machine linear

O Linear Support Vector Machine (LSVM) fornece um método de aprendizado supervisionado que gera funções de mapeamento de entrada/saída a partir de um conjunto de dados de treinamento rotulados. A função de mapeamento pode ser uma função de classificação ou uma função de regressão. O LSVM é projetado para resolver problemas em larga escala em termos de número de registros e número de variáveis (parâmetros). Seu espaço de recurso é o mesmo que o espaço de entrada do problema e pode manipular dados esparsos nos quais o número médio de elementos diferentes de zero em um registro é pequeno.

Código de exemplo:

Exemplo do 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()

Árvores aleatórias

Árvores Aleatórias são uma abordagem poderosa para gerar modelos preditivos fortes (exatos). É comparável e, às vezes, melhor do que outros métodos de última geração para problemas de classificação ou de regressão.

As Árvores Aleatórias são um modelo de combinação que consiste em várias árvores do tipo CART. Cada árvore cresce em uma amostra bootstrap que é obtida pela amostragem de casos de dados originais com substituição. Além do mais, durante o crescimento em árvore, para cada nó, a melhor variável de divisão é selecionada a partir de um número menor especificado de variáveis desenhadas aleatoriamente a partir do conjunto completo de variáveis. Cada árvore cresce até a extensão máxima possível sem poda. Na escoragem, as Árvores Aleatórias combinam escoragens em árvores individuais por maioria de votos (para classificação) ou por média (para regressão).

Código de exemplo:

Exemplo do 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, ou Chi-squared Automatic Interaction Detection, é um método de classificação para construir árvores de decisão usando estatísticas de qui-quadrado para identificar divisões ideais. Uma extensão aplicável a problemas de regressão também está disponível.

Primeiro, o CHAID examina as tabulações cruzadas entre cada campo de entrada e o destino e testa a significância usando um teste de independência de qui-quadrado. Se mais de uma dessas relações for estatisticamente significante, o CHAID selecionará o campo de entrada mais significativo (menor valor p). Se uma entrada tiver mais de duas categorias, elas serão comparadas e as categorias que não mostrarem nenhuma diferença no resultado serão reduzidas juntas. Isso é feito ao unir sucessivamente o par de categorias que mostrarem a diferença menos significativa. Esse processo de mesclagem de categoria para quando todas as categorias restantes diferirem no nível de teste especificado. Para campos de entrada nominal, quaisquer categorias podem ser mescladas e, para um conjunto ordinal, apenas categorias contínuas podem ser mescladas. Campos de entrada contínuos diferentes do destino não podem ser usados diretamente; eles devem ser vinculados em campos ordinais primeiro.

O Exhaustive CHAID é uma modificação do CHAID que executa uma tarefa mais completa de examinar todas as divisões possíveis para cada preditor, mas leva mais tempo para calcular.

Código de exemplo:

Exemplo do 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()