機械学習:欠落データの扱いについて

PythonのOOPで最低限知っておくこと。クラス、オブジェクト、メソッド。

クラスはオブジェクトの設計図。クラス内部でどんな変数が置かれるのかが決まる。クラスで宣言したメソッドをオブジェクトで使うことができる。例えばrailsのアプリを作成するときにモデルの部分にactive record?とか様々なファイルを継承して、その上で、例えばinformationモデル(これがクラス、InformationClassと記されていたはず)というものを作った。(ユーザーが自分の高校や大学などの情報を入力できる)

コントローラで新しいinformationインスタンスを作るために、@information = Information.newとして空のインスタンスを作成した。また、モデル(InformationClass)の中でfollowとかunfollowとかの新たなメソッドを作ることで、それをインスタンスにも適用できるようになり情報をフォローしたり、アンフォローしたりできるようになった。Pythonのクラス、オブジェクト、メソッドも大方同じイメージ。

欠落データの扱いについて

欠落データの取り扱いで2つやり方がある。1つがそもそもレコードを取り除いてしまおうというもの。でもこのやり方は少々危険。なぜなら、重要なデータが取り除かれてしまうかもしれないから。そこで、残りデータの全ての平均値を欠落してる部分にぶち込むという方法をとる。

ここでもライブラリを使って行う。もちろん平均値とっていちいちレコードに入れてあげるという方法も取れるけど効率が悪い。

sicketlearnは機械学習に関する多くのライブラリを持っていて、その中のデータプロセスに関わるpreprocessing、そのpreprocessingライブラリからImputerというクラスをインポートする。Imputerは欠落データを取り扱ってくれる。クラスをインポートしたのでつまりオブジェクト(インスタンスと読み替えて良いかな?)を作ることができる。

インスペクタというものがあるらしい。それでそのクラスがどんな働きをするのか、どんな引数が必要なのかがわかる。デフォでjupyter notebookにはなさげなのであとでインストールしてみよう。

まず、missing_valuesで操作したい値を指定。strategyでどの方法をとるか、今回の場合は平均をとるのでmeanを指定し、最後にaxisで0ならカラムの平均、1なら行の平均。カラムの平均じゃないとおかしいので、ここでは0をとる。次にこうして操作した欠落変数をどの行列にfitさせるのか指定する必要がある。で、fitさせたい行列ってどれ?っていうと先ほど指定したX。でもこのX、全ての列を変更したいだけではなく、欠落変数があるところだけに着目するので、それを指定。現状だとただ、平均を計算して、数値として出しただけなので、最後に実際にX行列の値を変更する。設定して、ぶち込んで、変更する。という流れ。

ちゃんと出力された。

Rでも基本的なやり方は同じだけど、2つのカラムを別々にやるという点で異なるみたい。

気になったのが二行目、aveから始まるやつ。aveって繰り返し出力するためのものらしい。今回だったら、一度datasetの年齢の平均を計算したから終わりではなく、該当のものはなんども回してね。みたいな。その後ろのFUN = function(x)は決まり文句で、後ろのmeanからで具体的にどんな式を回すのかを指定する。最後にna.rm = TRUEは欠損値はのぞいて計算してねというもの。

ちゃんと出力された。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする