Menu
CoddyTech

複数のクラス

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

レモン、ライム、それともオレンジ?ロジスティック回帰は3つのクラスにも対応できます。ここでは、新しい果物がレモンとオレンジの間に位置しています。

左:直径と重さで示した45個の果物。小さいライム、中間のレモン、大きいオレンジ、そしてレモンとオレンジの間にある新しい果物を示す黒い星。右:棒グラフで示した確率。レモン 0.61、ライム 0.00、オレンジ 0.39

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%というのは微妙な判定なので、もう一度確認する価値があります。

challenge icon

チャレンジ

中級

ポッドキャストアプリは、新しいエピソードをコメディ、ニュース、または実録犯罪のカテゴリに分類します。スターターコードは、episodes.csv(長さ、話者数、1分あたりの笑いの回数)を使ってLogisticRegressionを学習させ、新しいエピソードを1行のテーブルであるepisodeに読み込みます。

describe(episode)を完成させましょう。

  1. model.classes_の順に、各番組タイプの確率を整数のパーセントで出力します。
  2. 最も可能性の高いタイプを返します。

別のアプリのエピソードの場合:

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}")
quiz icon腕試し

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

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

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