【機械学習】pythonが秀逸すぎる!機械学習におけるデータの分割とランダム選択



機械学習において、これまでは、学習(訓練)データと検証(テスト)データの分割も一苦労していました。

自分の感情を入れないように、いかにランダムに分割するか?と言うものでしたが、pythonでは一発です。

また、この記事では正規化(スケーリング)についても述べます。

注意
この記事では、表データはdfとして、表現します
この記事は重回帰分析をもちいた機械学習の内容です

使用するモジュールのimport


まとめ
  • 説明変数と目的変数の分解も簡単
  • 説明変数の学習データとテストデータの分割も簡単
  • スケーリング(標準化)も簡単
この記事の参考文献


Python2年生 データ分析のしくみ 体験してわかる! 会話でまなべる!

他にも、Udemy

・【世界で34万人が受講】データサイエンティストを目指すあなたへ〜データサイエンス25時間ブートキャンプ〜

・【キカガク流】人工知能・機械学習 脱ブラックボックス講座 – 中級編 –

など





説明変数と目的変数に分割

説明変数とは、目的変数に影響を与えると考えられる変数のことです。

つまり、y=w1*x1+w2*x2+・・・・・+wtxt+bの「x」に当たる部分です。

目的変数とは、「y」に当たる部分です。

Excelではマウスを使ってデータを選択することによって選ぶことが多いかと思います。

pythonでは、列のヘッダーの並びが予め決まっていれば、ソッコーで分割することが可能です。



上記のデータフレーム(df)は、必ず列のヘッダーが説明変数が左から並んでいて、最後に目的変数が一番右にくるようなデータフレームであることが条件です。



この条件下では、上記の2行を記入するだけで、説明変数と目的変数に分けることが可能です。

変数分割の解説

まず、0行目の0列目のデータを取り出すには、

の1行で取り出せます。

先ほどのdfの例では、0.00632が取り出せます。

次に、x1の全ての行を取り出すには、行に0の代わりに「:」をつけます。


つまり、df.iloc[行,列]で「:」は、全てを意味するわけです。

0行目から13行目の1つ前までを取り出すには、


正確には13行目の一つ手前までを取り出すことになるため、x13までが取り出せます。

しかし、このやり方ですと、もしdfの説明変数が5個と少なかったり、20個と多かった場合に、毎回df.iloc[:,0:13]のなかの「13」の値を書き換えないといけません。

それは面倒なので、先ほど述べたように、読み込むデータフレームを、説明変数が左から順に並んで、目的変数が一番右の列にすると統一してしまえば、説明変数の数が変わっても、プログラミングの記述を変えなくてもいいようにできます。

具体的には、


と、してやります。そうすることで、列は、説明変数がいくつになっても、一番右から2つめまで。つまり、一番右を除くものと定義できます。

さらに、0からの0は省略することが可能なので、説明変数は


というシンプルな記述でいつでも対応が可能になります。

注意
読み込むデータフレームが必ず、説明変数が左から順に並び、目的変数が一番右の列になるという条件付きです。


同様にして目的変数(y)のデータもすぐに取り出せます。

これは、「行はすべて、列は右から1番目のみ」を表現しています。

訓練(学習)データと検証(テスト)データの分割

ここまでくれば、これもすぐできます。

これで、train(訓練)データとtest(検証)データに分けれます。 (x,ytest_size=0.4)の部分で、全体のデータの4割りをテスト用に振り分け、残り6割りを学習用に振り分けれます。

データのシャッフルはデフォルトで行ってくれます。

ramdom_stateは1に指定した場合、シャッフルしてくれますが、毎回同じようにシャッフルしてくれます。

Noneにした場合には、実行するたびに毎回違う分割の仕方となります。

ロジスティック回帰分析・感度や特異度の検出にも応用可能

学習用と、検証用のデータ分割をすることで、感度・特異度の計算も簡単にできます。

例えば、ある疾患の診断についての感度と特異度を産出したいときに、持っているデータをランダムに学習用と検証用に分けることで、学習用で得られた式が検証用でどれくらい適中するかがわかるため、感度・特異度まで一元的に算出可能です。



新着記事

【ポータブル電源】家族持ちなら即購入?ただし購入体験は最悪。 【買い!】echo show15の半年使用後レビュー 【保存版】顎骨壊死を懸念してビスホスホネート製剤の予防的休薬は不要!?



コメントをどうぞ


    メールアドレスが公開されることはありません。*印が付いているものは必須です。