教師あり学習(Supervised Learning)とは
例えば、あなたの年収を予測しましょう。
結果として、500万以上か以下かが判定できるAIです。
予測するために、いくつか情報をもらいます。
今回は以下にしましょう
- 年齢
- 教育年月
- どのぐらい働いているか(週)
- 500万超えているか
これらを条件に予想します。
予測の仕方は色々ありますが、今回は
ロジスティック回帰という予測方法を使ってみます。
ロジスティック回帰は、クラスを分類するという予測ができる仕組みです。
ではそれをpythonで描いてみます
//引数の説明
////C 精度の変化をさせる(数字が大きいほど、あまり細かいことにとらわれずに答えを算出する)
////max_iter 最大反復回数(計算しすぎて、ループが多くならないように的な最大値指定)
////random_state 乱数を使うか使わないか、何か思った通りじゃない?など感じた時に使う(整数だと同じ値が返ってくる)
lr = LogisticRegression(C=1000.0, max_iter=100, random_state=0)
lr.fit("年齢,教育期間,労働時間 の行列データ"), column_or_1d("評価行"))
例えばこんな感じのデータがあったとする
| 年齢 | 国 | 教育期間 | 労働時間 | 収入500超え |
|---|---|---|---|---|
| 30 | JPN | 12 | 40 | 0 |
| 15 | USA | 9 | 80 | 1 |
| 26 | JPN | 9 | 40 | 0 |
| 65 | JPN | 9 | 40 | 1 |
これで元データは、揃ったことなる
データを食べさせます。
そして予想を立てます
train_pred = lr.predict("年齢,教育期間,労働時間 の行列データ")
//scoreは精度になります。
lr.score("年齢,教育期間,労働時間 の行列データ",column_or_1d("評価行"))
なのでこの場合、scoreが1を超えれば、500万を超えたことになります
個別の値をチェックするには、以下みたいな値を設定する
例ととしては)
30歳、教育機関:16年、週40時間の場合
yhat = lr.predict(np.array([[30, 16, 40]]))[0]
print( yhat)
print('あなたの年収は 500 万' + ('以下です' if yhat == 0 else '以上です'))
機械学習が導き出した答えは、以上という答えでした。
要約すると
流れを要約すると、
- ロジスティック回帰使うよ
- fitして
- scoreを出して、どのような結果が返ってきているかをみて、確認して
- predictで欲しかった値が何になるかを取得する
になります
あとがき
今回やったのは、とりあえず機械学習をやってみたというのが、趣旨で
これを知っておくと、じゃあ、もっと精度をあげるにはという所に自ずと向いてくると
思います。それはまた別の記事で書きたいと思います。
細かい文法などは今回触れていないのでそれも別の記事になると思います(気が向けば)