为模型评分
本课属于 Coddy Machine Learning 学习旅程的“监督学习”单元。第 4 课,共 58 课。
模型好不好?它的准确率,也就是预测正确的测试行所占的比例,可以说明这一点。把它和一个简单的猜测方法放在一起比较:
这个库的测试借阅中有 78% 按时归还,因此每次都回答按时,得分就是 0.78。这就是基准。
from sklearn.metrics import accuracy_score
pred = model.predict(X_test)
print(accuracy_score(y_test, pred))
print(model.score(X_test, y_test))
common = y_train.value_counts().index[0]
print((y_test == common).mean())这会打印 0.88、0.88、0.78。score 会在一次调用中进行预测和计数;基线模型总是预测训练标签中最常见的标签。
模型只有胜过基准,才算有价值。
挑战
简单养蜂人的传感器监测着 160 个蜂箱,数据在 hives.csv 中;swarm 表示每个蜂箱是否发生过分蜂。能否用一个传感器向她发出预警?起始代码会读取传感器名称,并只用该传感器的数据训练模型。
- 打印模型在测试集上的准确率,四舍五入到小数点后 3 位。
- 打印基准准确率,并注明它总是回答的标签。
- 打印模型是否优于基准。
对于另一个蜂场和 weight_change_kg:
Model on weight_change_kg: 0.775
Always "no": 0.7
Beats the baseline: yes亲手试试
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
# 每个蜂箱占一行:记录其传感器数据,以及是否发生分蜂
hives = pd.read_csv("hives.csv")
sensor = input()
X = hives[[sensor]]
y = hives["swarm"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
model = KNeighborsClassifier()
model.fit(X_train, y_train)
# 在下方编写你的代码
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
监督学习中的所有课
自己练习: Python 在线编译器