Menu
CoddyTech

为模型评分

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

模型好不好?它的准确率,也就是预测正确的测试行所占的比例,可以说明这一点。把它和一个简单的猜测方法放在一起比较:

50 个测试贷款样本的准确率柱状图:始终猜测按时还款的准确率为 0.78,k-NN 模型的准确率为 0.88

这个库的测试借阅中有 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 会在一次调用中进行预测和计数;基线模型总是预测训练标签中最常见的标签。

模型只有胜过基准,才算有价值。

challenge icon

挑战

简单

养蜂人的传感器监测着 160 个蜂箱,数据在 hives.csv 中;swarm 表示每个蜂箱是否发生过分蜂。能否用一个传感器向她发出预警?起始代码会读取传感器名称,并只用该传感器的数据训练模型。

  1. 打印模型在测试集上的准确率,四舍五入到小数点后 3 位。
  2. 打印基准准确率,并注明它总是回答的标签。
  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)

# 在下方编写你的代码
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

监督学习中的所有课

自己练习: Python 在线编译器