プログラミング

機械学習しようぜ! Part3 単回帰分析編 1日目

こんにちは、チズチズです。

今までは機械学習とは…などの記事ですが今日からは、実装に入っていきます。

線形回帰ってなんじゃ

おそらく、機械学習で初めに学ぶのは線形回帰でしょう。

実装が簡単で、可視化しやすくわかりやすいです。

線形回帰の基本はこちら。

説明変数から目的変数を予測する

わかるわけない。わからない。 ってことで下をご覧ください。

はい。説明変数、目的変数ってなんですか?

まず、下のグラフを見て下さい。

タイトルは英語ですが、経験年数から給料を予測しています。

年功序列…ですね

このグラフ、青い線と赤い点がありますよね。

赤い点は実測値、青い線は予測された線です。

線形回帰の漢字通り、線の形で回帰(予測)する。

このときの経験年数が説明変数、給料が目的変数です。

我々が知りたいのは給料です。だから、目的が給料になります。

単回帰分析?

単回帰分析は説明変数が1つの場合に用いられます。(滅多に無い

縦と横で表せるので、可視化したときとても見やすいです。

精度はそこまで良くないです。

説明変数が2つ以上のときは重回帰分析っていうものを使います。(次説明するよ

上のグラフは単回帰分析です。

実装しよう!

https://github.com/Chizuchizu/Simple_linear

コードを見ただけではポカーンってなると思うので、1行1行解説していきます。

ライブラリのインポート

import ~ でライブラリのインポートができます。

Pandas (パンダス)

データの処理が得意です。 例えばデータの前処理、可視化、欠損値の処理と機械学習には必須のライブラリです。

as ~ の説明はMatplotlibに書いてあります。

Matplotlib(マットプロットリブ)

グラフの作成をしてくれます。これがあれば、ほとんどのグラフが書けます。数学のグラフも…

Pythonではmatplotlib.pyplotとpyplotを付けます。

これは覚えておいて下さい!

最後に as plt って書いてます。

asはあだ名のようなもので名前が長いのでpltと省略しますよ~っていう宣言です。

Numpy(ナンパイ)

計算はNumpyにおまかせ!統計も取れる有能なライブラリ。

機械学習じゃなくても結構使う場面があります!

ぜひ、使い方を覚えてみて下さい!(いつか解説講座作ろうかな

データセットの読み込み

データを読み込まなければ始まりませんw。

まず、detasetにcsvファイルをぶち込みます。

早速、Pandasの出番!

csvファイルを読み込むときには

これで出来ます。

説明変数、目的変数

datasetには上のような2つのカテゴリに分けられたデータが入っています。

目的変数の給料(Salary)は右、経験年数(YearsExperience)は左にあります。

分けるためには、Pandasの命令を使います。

今回の場合は、説明変数は1列目の全部、目的変数は2列目の全部。

全部は:のみで表せるので、

:-1は後ろから1番目を表します。

トレーニングデータとテストデータに分割

機械学習は1回の実装だけでは終わりません。精度を見て、モデルを調節します。

学習させたデータに合うように作られているので、全部学習させてしまうとテストさせるデータが無くなってしまいます。だから、テストデータとトレーニングデータを分ける必要があるのです。

また、ライブラリのインポートがあります。

これは、テストデータとトレーニングデータに分割するためだけのライブラリです。

test_sizeはそのままで、全部のデータのどれくらいをテストデータにしますか?という設定です。

基本的に0.1~0.5までです。今回はデータが30個あって、3分の1がちょうどいいので1/3に指定します。

random_stateはデータを分割するときの乱数のシード値(大きくすればするほどバラバラになる

今回は勉強用なので、0(ランダムにならない)に設定していますが、1あたりが良いのかなと思ってます。

トレーニングデータを予測させる

ライブラリ登場です。

sklearnは線形回帰で一番使われるであろうライブラリです。

今回は回帰分析なので、LinearRegressionをインポートします。

LinearRegression as LR もよくあります。

文字が長いものは打ちづらいしスペルミスがあったときに見つけづらいというのもあるので、そこは自分で判断してみて下さい。

初めに、モデルを定義します。

ここはテンプレ

次に、fit関数(予測させる

1番目には説明変数、2番目には目的変数を入れます。

そうすると、regressorは予測モデルを作ります。

テストデータで予測

predict関数を使うことで、トレーニングデータで予測したモデルでテストデータを予測させることが出来ます。

このときy_predにはリストで、X_testから予測した給料が入っています。

一応、トレーニングデータでも予測させます。(次に可視化させるときに使う

機械学習の実装できた!

精度について

さっき予測させたy_predとy_testとの差が小さければ小さいほど精度が高いです。

精度の求め方については次回行います。

データ

今はあるサイトで公開されているデータを使いましたが、見たまんまのことだけをやるのはスキルアップには少し足りないと思います。

ぜひ、自分で応用を効かせて簡単なことからやってみてください!

質問したり検索したり、コメント欄でもいいですからわからないことがあったら言って下さい。

近い内に良いデータを探して、詳細をお知らせします。(もしかしたらそのまんまのデータの詳細かも…

次回予告

精度を取って、グラフ化させるよ!

お読みいただいてありがとうございました。

COMMENT

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