はい/いいえの予測
CoddyのMachine Learningジャーニー「教師あり学習」セクションの一部。レッスン 16/58。
この章では、確率を使って「はい」か「いいえ」で答える質問を扱います。自分で作るスパムフィルターで締めくくり、メールを次のように順位付けします。
レストランの予約はキャンセルされるでしょうか? LogisticRegression は、過去60件の予約から学習します。予約した日からの日数と、キャンセルされたか(1)、予約が維持されたか(0)です。
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を超えることもありません。
チャレンジ
中級凧クラブが明日の飛行枠を3つ予約しています。kites.csvには過去90回の飛行について、wind_kmhと、凧が空に上がった場合は1となるflewが記録されています。プログラムは各枠の予報風速をslotsに読み込みます。
- 風速データを使って
LogisticRegression(max_iter=1000)を学習させます。 - 各枠で凧が飛ぶ確率を、整数のパーセントで出力します。
- 予想飛行回数を出力します。これは確率の合計です(小数第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})
# 以下にコードを書いてください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
教師あり学習のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ