ノートブックでは、一般化線型モデル、線型回帰、線型サポート・ベクトル・マシン、ランダム・ツリー、または CHAID SPSS 予測分析アルゴリズムを使用できます。
一般化線型モデル
一般化線型モデル (GLE) は、さまざまな種類のデータに対して一般的に使用される分析アルゴリズムです。 これは、正規分布した対象の線形回帰、二項または多項対象のロジスティック・モデル、計数データのための対数線形モデルなどの広く使用されている統計モデルだけではなく、一般的なモデルの定式を通じて多くの有用な統計モデルも対象にします。 一般化線型モデルは、モデルの作成に加えて、変数選択、分布とリンク関数の自動選択、モデルの評価統計などのその他の有用な機能を提供します。 このモデルには、LASSO、リッジ回帰、Elastic Net などの正規化のオプションがあります。 非常に広範囲のデータを扱うこともできます
分布とリンク関数の選択方法について詳しくは、「分布とリンク関数の組み合わせ」を参照してください。
コード例 1:
この例では、分布とリンク関数の指定、効果の指定、切片の指定、ROC 曲線の導出、および相関行列の出力を含む GLE 設定を示しています。 このシナリオでは、モデルを作成し、そのモデルをスコアリングします。
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:
この例では、分布を指定せず、リンク関数を指定し、双方向交互作用の検出が行われた状態で、LASSO 法を使用して変数を選択し、ペナルティー・パラメーターの自動選択を使用する GLE 設定を示します。 このシナリオでは、効果に対する双方向交互作用を検出した後、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()
線型回帰
線形回帰モデルは、連続型対象と、連続型またはカテゴリー型の 1 つ以上の予測変数の間の予測関係を分析します。
線形回帰モデルの機能には、交互作用効果の自動検出、順方向ステップワイズ・モデル選択、診断型の検査、および推定周辺平均 (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 は、レコードの数および変数 (パラメーター) の数の観点から、大規模な問題を解決するように設計されています。 その特徴量スペースは、その問題の入力スペースと同じであり、1 つのレコードに含まれるゼロ以外の要素の平均数が小さいスパース・データを扱うことができます。
サンプル・コード:
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 のようなツリーで構成されるアンサンブル・モデルです。 各ツリーは、置換によって元のデータ・ケースをサンプリングすることによって取得されるブートストラップ・サンプル上で成長します。 さらに、ツリーの成長中に、各ノードでは、変数セット全体から無作為に抽出された、指定されたより小さい数の変数の中から、最適な分割変数が選択されます。 各ツリーは可能な限り最大のサイズに成長し、剪定は行われません。 スコアリングでは、Random Trees は、多数決 (分類の場合) または平均 (回帰の場合) によって個別のツリーのスコアを結合します。
サンプル・コード:
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()
カイ 2 乗自動反復検出アルゴリズム
CHAID (Chi-squared Automatic Interaction Detection) は、最適な分割を識別するために、カイ 2 乗統計を使用してディシジョン・ツリーを構築する分類方法です。 回帰の問題に適用できる拡張も使用可能です。
CHAID はまず、入力フィールドと対象のそれぞれの間のクロス集計を調べて、カイ 2 乗独立性検定を使用して有意性を検定します。 これらの関係の複数が統計的に有意である場合、CHAID は最も有意な入力フィールド (最小 p 値) を選択します。 入力フィールドが 3 つ以上のカテゴリーを持っている場合、それらは比較され、結果中で違いが見あたらないカテゴリーは、一緒に折りたたまれます。 これは、最も有意差が小さいように見えるカテゴリーのペアを連続的に結合することで行われます。 指定された検定レベルで、すべての残りのカテゴリーが異なるとき、カテゴリーのマージ プロセスは停止します。 名義型入力フィールドでは、すべてのカテゴリーはマージできます。順序セットでは、隣接するカテゴリーだけがマージできます。 対象以外の連続型入力フィールドを直接使用することはできません。最初に順序型フィールドに分割する必要があります。
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 予測分析アルゴリズム