Menu
CoddyTech

はい/いいえの予測

CoddyのMachine Learningジャーニー「教師あり学習」セクションの一部。レッスン 16/58。

この章では、確率を使って「はい」か「いいえ」で答える質問を扱います。自分で作るスパムフィルターで締めくくり、メールを次のように順位付けします。

8通のメールをスパムである確率の棒グラフで表示。Momの0.02からWIN NOWの0.97まで。0.5の破線を超える棒は赤色で、スパムを示す

レストランの予約はキャンセルされるでしょうか? LogisticRegression は、過去60件の予約から学習します。予約した日からの日数と、キャンセルされたか(1)、予約が維持されたか(0)です。

予約した日からの日数に対して、0(予約維持)と1(キャンセル)の位置に点で示した60件の予約と、0.07から0.93へ上昇するオレンジ色のS字曲線。3日では0.09、40日では0.72を示している

from sklearn.linear_model import LogisticRegression

model = LogisticRegression(max_iter=1000)  # 学習を完了するのに十分な反復回数
model.fit(X, cancelled)  # X: 何日先かを表す1列
print(np.round(model.predict_proba([[3], [40]]), 2))

これは次のように出力されます。

[[0.91 0.09]
 [0.28 0.72]]

各予約の行には、クラス 0 の確率、続いてクラス 1 の確率が格納されています。[:, 1] は、キャンセルを表すクラス 1 の確率を保持します。

確率であるべきなので、S字を描き、0未満にも1を超えることもありません。

challenge icon

チャレンジ

中級

凧クラブが明日の飛行枠を3つ予約しています。kites.csvには過去90回の飛行について、wind_kmhと、凧が空に上がった場合は1となるflewが記録されています。プログラムは各枠の予報風速をslotsに読み込みます。

  1. 風速データを使ってLogisticRegression(max_iter=1000)を学習させます。
  2. 各枠で凧が飛ぶ確率を、整数のパーセントで出力します。
  3. 予想飛行回数を出力します。これは確率の合計です(小数第1位まで)。

別のクラブの場合:

6 km/h: 9% chance the kite flies
18 km/h: 64% chance the kite flies
30 km/h: 97% chance the kite flies
Expected flights: 1.7 of 3

自分で試してみよう

import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression

# 過去90回の飛行試行:風速(km/h)と飛行したかどうか(凧が空に上がった場合は1)
kites = pd.read_csv("kites.csv")
# 明日の3つの飛行枠と、それぞれの予報風速
winds = []
for i in range(3):
    winds.append(int(input()))
slots = pd.DataFrame({"wind_kmh": winds})

# 以下にコードを書いてください
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

教師あり学習のすべてのレッスン

自分で練習してみよう: Pythonオンラインコンパイラ