Python

PySparkのMLlibでロジスティック回帰による分類予測

今回はPySparkを使ったロジスティック回帰による分類予測のモデリングをやってみます。

前回のブログ記事ではPySparkによる線形重回帰による数値予測をやったので、PySparkシリーズということで分類予測をするロジスティック回帰にも挑戦します。

前回同様、ちなみにこちらの本をよく参考にさせていただきました。

https://amzn.to/3woeMYf

使うデータはBankデータとして、その中の"y"列:定期預金したかどうかを目的変数としてモデリングをしていきたいと思います。

説明変数はデータを全部使うわけではなく、簡単のため一部としたいと思います。

 

PySparkのMLlibでロジスティック回帰

CSVデータを読み込む

まずはSparkを使うためにSparkSessionを立ち上げます。

 

 

spark sessionが立てられたら、CSVファイルを読み込みましょう。

CSV読み込みはread.csvで行うことができ、データにヘッダーがあるのでheaderはTrue、スキーマは勝手に推測してくれた方が楽なので、inferSchema=Trueにしておきます。

最後にCSVデータはセミコロンで区切られているので、sep=";"とします。

これでdataにデータが格納されます。

 

データ処理からモデリングまでのPipeline作成

使うデータが格納されたので、モデリングをするためのデータ処理をしていきます。

まずは目的変数を作る必要がありますので、現在Yes, Noになっているy列をモデリングができるように、1, 0の値に変換します。

 

このあとの流れとしては以下の処理内容を順にパイプラインに登録していきます。

  1. 文字列カラムをインデックス化
  2. モデリング用にassemble
  3. 標準化(standard scaler)
  4. モデリング

 

文字列カラムをインデックス化

説明変数の一つで文字列になっているdefault列をインデックス化したいと思います。

 

 

モデリング用に説明変数のassemble

モデリングをするためには説明変数を一つにまとめたlistを作る必要がありましたので、それを行うためにassembleをしておきます。

 

 

標準化

前回の線形重回帰をしたときは簡単のために標準化しませんでしたが、今回はその方法もやっておきたいと思います。

標準化はStandardScalerを使って簡単にできます。

インプットはassembleしたfeatures列で、標準化したあとのアウトプットはscaled_featuresとしています。

 

 

ロジスティック回帰によるモデリング

さて、ようやくモデリングの段階になります。

ロジスティック回帰によるモデリングも1行でできます。

 

 

パイプラインに登録

これでデータ処理系が完了なので、これらを順にパイプラインのステージに登録していきます。

本来はこの後のAUC計算を入れてもいいですが、ここではわかりやすくモデリングまでとしたいと思います。

 

 

訓練データによるモデリング

これでパイプラインへの登録ができたので、実際にデータを投入して予測をしてみましょう!

使うデータを抽出して、訓練用・テスト用に7:3で分割してみます。

ランダムシードは何でもいいので、とりあえず123とかにしておきます。

 

これでデータを準備できたので、pipelineをfitしてモデリングを行います。

 

モデルの係数確認と精度評価(AUC)

モデリングができたので、モデルの係数を確認しましょう

モデル係数はstageの中からモデリングをした3番目のを指定して、coefficient, interceptを指定すれば取得できます。

 

 

モデルを使った推論も実施しておきます。

 

assembleした結果の列がfeaturesになっており、それを標準化したのがscaled_features、そして推論結果がprediction列に格納されています。

このpredictionを計算するための確率値がprobabilityというわけです。

それでは最後に、訓練データを使った推論結果をもとに精度評価ということでAUCを計算します。

 


これで訓練データを使った処理は完了です!

パイプラインを作っておくと便利でいいですね!

 

テストデータによる精度評価(AUC)

では、次にテストデータを使って推論をして、その結果を使ってAUCの計算をしていきましょう。

もうパイプラインができているので、そこにテストデータを突っ込むだけです。

 

これでテストデータを使った精度評価も完了です!

凝った特徴量エンジニアリングとかはしていませんが、基本的な流れはこのようにMLlibを使ってできることがわかったのではないでしょうか!

おすすめ記事

1

こんにちわ、サトシです。33歳です。 今回は、データサイエンティストの3年間に3社で働いた僕が、データサイエンティストとしての転職活動についてまとめて書きたいと思います。 これまでSE→博士研究員→ポ ...

2

お疲れさまです! 久しぶりの更新になってしまいましたが、僕が未経験からデータサイエンティストになるまでの転職活動の全記録を書き残しておきたいと思います。 僕は博士号を取得後に研究員として仕事をしていま ...

3

こんにちわ、サトシです。 今回は、企業でデータサイエンティストとして働いていた僕が、フリーランスとしてどのような手順で独立していったかについて書いていきたいと思います。 僕はSIer SE→博士過程→ ...

-Python

Copyright© さとぶろぐ , 2024 All Rights Reserved Powered by AFFINGER5.