使用creme-ml进行在线二分类任务实战指南
river 项目地址: https://gitcode.com/gh_mirrors/river12/river
二分类任务概述
二分类是机器学习中最基础也最常见的任务类型之一,其目标是预测一个样本属于两个类别中的哪一个。在creme-ml框架中,二分类任务的处理遵循在线学习范式,即模型可以逐步学习数据流中的样本,而不需要一次性加载所有数据。
数据集介绍
我们使用creme-ml内置的钓鱼网站数据集(Phishing)作为示例。这个数据集包含1250个样本,每个样本有9个特征,用于判断一个网站是否是钓鱼网站。
from river import datasets
dataset = datasets.Phishing()
数据集中的每个样本包含:
- 特征x:一个包含9个特征的字典
- 标签y:布尔值,True表示钓鱼网站,False表示正常网站
基础模型构建
逻辑回归模型
我们首先使用逻辑回归模型,这是二分类任务中最常用的线性模型之一。
from river import linear_model
model = linear_model.LogisticRegression()
模型训练与预测
在线学习的特点是模型可以逐步学习:
- 初始状态下,模型对所有类别的预测概率都是均等的(50%)
- 使用
learn_one
方法更新模型 - 使用
predict_proba_one
获取预测概率分布 - 使用
predict_one
直接获取预测类别
# 获取第一个样本
x, y = next(iter(dataset))
# 初始预测
print(model.predict_proba_one(x)) # 输出: {False: 0.5, True: 0.5}
# 模型学习
model.learn_one(x, y)
# 学习后预测
print(model.predict_proba_one(x)) # 输出概率会有所变化
模型评估方法
渐进式验证
在线学习中,我们使用渐进式验证(progressive validation)来评估模型性能:
- 对每个样本先进行预测
- 然后将该样本用于模型训练
- 最后比较预测与真实标签
from river import metrics
model = linear_model.LogisticRegression()
metric = metrics.ROCAUC() # 使用AUC作为评估指标
for x, y in dataset:
y_pred = model.predict_proba_one(x)
model.learn_one(x, y)
metric.update(y, y_pred)
print(metric) # 输出模型性能
creme-ml提供了便捷的progressive_val_score
函数来完成这一过程:
from river import evaluate
model = linear_model.LogisticRegression()
metric = metrics.ROCAUC()
evaluate.progressive_val_score(dataset, model, metric)
模型优化技巧
特征标准化
为了提高逻辑回归模型的性能,我们可以对特征进行标准化处理:
from river import compose
from river import preprocessing
# 构建包含标准化步骤的管道
model = compose.Pipeline(
preprocessing.StandardScaler(),
linear_model.LogisticRegression()
)
这种管道式设计使得数据预处理和模型训练可以无缝衔接,在实际应用中非常方便。
总结
通过creme-ml框架,我们可以轻松实现:
- 在线二分类模型的构建和训练
- 渐进式的模型评估
- 数据预处理与模型训练的管道化集成
这种方法特别适合处理数据流或大规模数据集,因为它不需要一次性加载所有数据,可以逐步学习和更新模型。对于需要实时更新的应用场景,creme-ml提供了简单而强大的解决方案。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考