Menu
CoddyTech

是或否预测

本课属于 Coddy Machine Learning 学习旅程的“监督学习”单元。第 16 课,共 58 课。

这一章会用概率回答“是”或“否”的问题。最后,你会构建一个垃圾邮件过滤器,像这样给邮件排序:

8 封邮件的垃圾邮件概率条形图,从妈妈邮件的 0.02 到 WIN NOW 邮件的 0.97。高于 0.5 虚线的条形为红色:垃圾邮件

餐厅预订会被取消吗?LogisticRegression 从过去 60 次预订中学习:提前预订的天数,以及预订是否被取消(1)或保留(0):

60 次预订以点的形式显示在 0(保留)和 1(取消)处,横轴为提前预订的天数。一条橙色 S 曲线从 0.07 上升到 0.93。在提前 3 天预订时,读数为 0.09;提前 40 天时,读数为 0.72

from sklearn.linear_model import LogisticRegression

model = LogisticRegression(max_iter=1000)  # 迭代次数足够完成训练
model.fit(X, cancelled)  # X:提前的天数,只有一列
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 和 flew,如果风筝成功升空,则值为 1。程序会将每个时段的预测风速读入 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,flew 表示风筝是否飞起来(飞起来为 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 在线编译器