多个类别
本课属于 Coddy Machine Learning 学习旅程的“监督学习”单元。第 19 课,共 58 课。
柠檬、青柠还是橙子?逻辑回归也能处理三个类别。现在,一个新水果落在柠檬和橙子之间:
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。predict 会选出最大的概率。
模型会告诉你它有多确定:61% 的柠檬是个难以判断的结果,值得再看一眼。
挑战
中等播客应用会将新节目归入喜剧、新闻或真实犯罪类别。起始代码会在 episodes.csv 上拟合 LogisticRegression,使用时长、发言人数和每分钟笑声数作为特征,并将新节目读入 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"])
# 输出一集节目属于各节目类型的概率(一个只有一行的表),然后返回概率最高的类型
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 在线编译器