Python

PySpark MLlibで線形重回帰のモデリング

今回はPySparkを使った線形回帰モデリングをやってみたいと思います。

PySparkではデータ処理にSpark DataFrameをよく使うかと思いますが、Sparkには機械学習を行うライブラリMLlibもあるので、機械学習も分散処理をすることができます。

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

Applied Data Science Using PySpark

使うデータはひとまずBankデータとして、その中の"balance"を目的変数として線形重回帰をやります。

 

PySparkのMLlibで線形重回帰のモデリング

CSVデータを読み込む

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

 

この辺りの細かいことの説明は省略しますので、興味があればSparkの公式をみてください。

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

CSV読み込みはread.csvで行うことができ、データにヘッダーがあるのでheaderはTrue、スキーマは勝手に推測してくれた方が楽なので、inferSchema=Trueにしておきます。最後にCSVデータはセミコロンで区切られているので、sep=";"とします。

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

 

訓練データとテストデータに分ける

 

これでデータが読み込めたので、ランダムに7:3に訓練データとテストデータを分けましょう。

この訓練データを使ってモデリングをします。

本来は標準化とかもした方がよいのですが、一旦そういう細工はせずに進めます。

 

訓練用にAssembleする

さてここまでは今までにsklearnとかでやっていた感じとあまり変わりませんが、ここが少しsklearnでのモデリングと変わります。

MLlibでモデリングする場合は訓練データを各列に分割していてはダメで、訓練データの列データを一つのリストにまとめる必要があります。

それにはVectorAssemblerを使うとその操作を行ってくれます。

今回はパイプラインに登録するので、assembleまでしかしませんが、パイプラインに登録しないのであればfitも行う必要があります。

 

 

線形重回帰のモデリング

これでAssembleを行ってモデリングをするデータの準備ができたので、実際にモデリングをしてみます。

モデリング自体は簡単で、説明変数のカラムと目的変数の方を指定して、LinearRegressionすればOKです。

 

 

パイプラインに登録

さて、ここまでassembleとclfを定義しましたので、それをパイプラインに登録したいと思います。

今回は2つしか登録しませんが、標準化したり、one-hotエンコーディングしたり、精度評価したりなども合わせた場合は、パイプラインを使うとずっと楽になりますので、使うと良いです。

 

最後にこのpipelineをfitしてモデリングができます。

 

推論の実行

モデリングができたので訓練データで推論を行いましょう。

 

 

RMSEによる精度評価

最後に精度評価を行います。

今回は線形重回帰による数値予測ですから、RMSEを計算することで評価してみます。

pipelineをfitした結果がmodel変数に入っているのですが、こちらにはassembleの情報も入っています。

なので、この場合はmodel.stages[1]とするとパイプラインのステージに登録した1番目(0始まり)の要素ということで、model.stages[1]のように指定します。

 

 

これでRMSEの確認ができましたね!

 

回帰係数の確認

RMSEが計算できたので、線形回帰係数も出しておきましょう。

回帰係数もRMSEと同様にmodel.stages[1]のあとにcoefficient, interceptとすれば、係数や切片の値を確認できます。

 

これで訓練データを使って行うことが完了です!

 

テストデータでの実行

モデリングができたので、あとはテストデータでも実行してみましょう。

もうパイプラインが登録されているので、テストデータをmodelに投入すれば推論ができます。

簡単ですね!

 

とりあえず今回はここまでにしておきたいと思います。

最低限のことを書きましたが、もっと多くの処理を行う場合はこのような流れの中に追加していくイメージかと思います。

おすすめ記事

1

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

2

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

3

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

-Python

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