複数のクラス
CoddyのMachine Learningジャーニー「教師あり学習」セクションの一部。レッスン 19/58。
レモン、ライム、それともオレンジ?ロジスティック回帰は3つのクラスにも対応できます。ここでは、新しい果物がレモンとオレンジの間に位置しています。
model = LogisticRegression(max_iter=1000)
model.fit(X, kind) # X: 直径、重さ; kind: レモン、ライム、またはオレンジ
print(model.classes_)
print(np.round(model.predict_proba([[6.7, 144]]), 2))
print(model.predict([[6.7, 144]]))これは次のように出力されます:
['lemon' 'lime' 'orange']
[[0.61 0. 0.39]]
['lemon']各行には、classes_の順にクラスごとの確率が1つずつ格納されており、合計は1になります。predictは最も大きい値を選びます。
つまり、モデルはどれほど確信しているかを示します。レモンが61%というのは微妙な判定なので、もう一度確認する価値があります。
チャレンジ
中級ポッドキャストアプリは、新しいエピソードをコメディ、ニュース、または実録犯罪のカテゴリに分類します。スターターコードは、episodes.csv(長さ、話者数、1分あたりの笑いの回数)を使ってLogisticRegressionを学習させ、新しいエピソードを1行のテーブルであるepisodeに読み込みます。
describe(episode)を完成させましょう。
model.classes_の順に、各番組タイプの確率を整数のパーセントで出力します。- 最も可能性の高いタイプを返します。
別のアプリのエピソードの場合:
comedy: 12%
news: 70%
true crime: 18%
Best guess: news自分で試してみよう
import pandas as pd
from sklearn.linear_model import LogisticRegression
episodes = pd.read_csv("episodes.csv")
features = ["length_min", "speakers", "laughs_per_min"]
model = LogisticRegression(max_iter=1000)
model.fit(episodes[features], episodes["show_type"])
# 1つのエピソードについて、各番組タイプの確率を1行の表で表示し、最も可能性の高いタイプを返す
def describe(episode):
# ここにコードを書いてください
return "unknown"
# 以下の行は変更しないでください:入力から新しいエピソードを作成します
length = float(input())
speakers = int(input())
laughs = float(input())
episode = pd.DataFrame({"length_min": [length], "speakers": [speakers], "laughs_per_min": [laughs]})
best = describe(episode)
print(f"Best guess: {best}")
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
教師あり学習のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ