机器学习中的在线学习(Online Learning)和离线学习(Offline Learning)是两种不同的学习方式,它们在数据处理和模型更新方面有着明显的区别。以下是它们的主要区别:
数据获取方式:
训练频率:
应用场景:
计算成本:
使用了SGDClassifier作为在线学习模型,模拟了一个不断更新的数据流,然后根据每个新的样本更新模型。示例代码如下:
from sklearn.linear_model import SGDClassifier
from sklearn.datasets import make_classification
import numpy as np
# 创建一个虚构的数据流
X, y = make_classification(n_samples=1000, n_features=20, random_state=42)
# 初始化在线学习模型(随机梯度下降分类器)
online_model = SGDClassifier(loss='log', max_iter=1, random_state=42)
# 模拟在线学习,每次接收一个样本并进行更新
for i in range(len(X)):
sample = X[i:i+1, :]
label = y[i]
print(i,sample,label)
online_model.partial_fit(sample, [label], classes=np.unique(y))
# 添加新样本并进行在线预测
new_sample = np.array([[0.5, 0.3, 0.8, 0.2, 0.6, 0.9, 0.4, 0.7, 0.1, 0.5, 0.2, 0.8, 0.3, 0.6, 0.7, 0.4, 0.9, 0.5, 0.2, 0.7]]) # 新样本
predicted_class = online_model.predict(new_sample)
print("Online Learning Predicted Class for New Sample:", predicted_class)
在下面示例代码中,在在线学习的示例之后提供的在线学习示例,变量 X 和 y 不再处于作用域内。将数据集划分为训练集和测试集,并使用LogisticRegression作为离线学习模型,一次性在整个训练集上进行训练,然后在测试集上进行预测。示例代码如下:
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
# 创建一个虚构的数据集
X, y = make_classification(n_samples=1000, n_features=20, random_state=42)
# 划分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 初始化离线学习模型(逻辑回归)
offline_model = LogisticRegression()
# 在整个训练集上进行训练
offline_model.fit(X_train, y_train)
# 在测试集上进行预测
predicted_classes = offline_model.predict(X_test)
print("Offline Learning Predicted Classes:", predicted_classes)
https://blog.csdn.net/weixin_42267615/article/details/102973252
https://zhuanlan.zhihu.com/p/269454065