• 机器学习:在线学习和离线学习区别


    机器学习中的在线学习(Online Learning)和离线学习(Offline Learning)是两种不同的学习方式,它们在数据处理和模型更新方面有着明显的区别。以下是它们的主要区别:

    1. 数据获取方式:

      • 在线学习:在在线学习中,模型是不断地从数据流中接收新的样本并进行学习。这意味着模型会随着时间的推移不断更新,以适应新的数据。
      • 离线学习:在离线学习中,模型是在静态数据集上进行训练的,通常在一开始就将整个数据集加载到内存中。模型不会随着时间的推移而更新,除非手动重新训练。
    2. 训练频率:

      • 在线学习:在线学习模型是持续更新的,每次接收到新数据后,模型都会根据新的数据进行部分训练或调整,以保持其适应性。
      • 离线学习:离线学习模型通常是在数据集上进行一次完整的训练,然后在整个数据集上进行测试。这种方式通常不会频繁地更新模型。
    3. 应用场景:

      • 在线学习:在线学习适用于需要实时适应数据变化的场景,例如在线广告推荐、航空航班延误预测等。它允许模型在不断变化的环境中保持准确性。
      • 离线学习:离线学习适用于数据相对稳定的场景,例如图像分类、自然语言处理中的文本分类等。模型在这些场景中可以周期性地进行训练,以适应数据的演化。
    4. 计算成本:

      • 在线学习:在线学习通常需要实时计算资源来处理新数据,因此可能需要更高的计算成本。
      • 离线学习:离线学习通常可以在较长时间内使用较少的计算资源进行训练,因为数据不会不断涌入。

    使用了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)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    输出:
    在这里插入图片描述

    在下面示例代码中,在在线学习的示例之后提供的在线学习示例,变量 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)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    参考

    https://blog.csdn.net/weixin_42267615/article/details/102973252
    https://zhuanlan.zhihu.com/p/269454065

  • 相关阅读:
    JS 的 splice 与 delete 介绍
    RestTemplate作用及其使用
    pandas使用pd.DatetimeIndex函数将字符串日期列表数据转化为时间索引数据DatetimeIndex
    方舟生存进化开服需要多少钱
    第九天 Python爬虫之Scrapy(框架工作原理 )
    Bigtable: A Distributed Storage System for Structured Data
    BevFusion (2): nuScenes 数据介绍及点云可视化
    [附源码]java毕业设计网上点餐系统
    Docker命令
    【计算机架构】python并发编程:多线程和线程池
  • 原文地址:https://blog.csdn.net/weixin_41194129/article/details/132998721