是或否预测
本课属于 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:提前的天数,只有一列
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 和 flew,如果风筝成功升空,则值为 1。程序会将每个时段的预测风速读入 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,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})
# 在下方编写你的代码
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
监督学习中的所有课
自己练习: Python 在线编译器