底层架构 Wendy leetcodeLCP mysql安装 阿里云 智慧树 docker容器 validation bluetooth sas vue遍历 iot系统 kb转mb flutter项目案例 python for循环 python运行环境 python网络编程 pythonlist python创建文件 java类 java日期 java什么是多态 java停止线程 java字符串函数 java函数调用 linux简介 python教程下载 mathcad下载 系统集成项目管理工程师教程 微信助力软件 只狼脚本 bz2解压命令 tomcat修改端口 爱奇艺无法投屏 大势至usb监控 服务器之家 捷速pdf编辑器 音乐制作器 ucs怎么用 jdk11下载
当前位置: 首页 > 学习教程  > python

机器学习模型在线更新【多线程+线程锁】实现

2021/2/6 22:19:23 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

背景 模型自动更新策略介绍 一种是定时任务,凌晨执行,该策略缺点是当天不能实时更新模型参数。还有一种是实时更新,为不影响使用,要使用多线程,而在模型预测进行中发生模型更新,会导致报错(即使…

背景

  • 模型自动更新策略介绍
    1. 一种是定时任务,凌晨执行,该策略缺点是当天不能实时更新模型参数。
    2. 还有一种是实时更新,为不影响使用,要使用多线程,而在模型预测进行中发生模型更新,会导致报错(即使模型更新那一刻很短),因此还要加上线程锁
    3. 更新方式有全量更新,另外貌似还有小批迭代式更新,本文是全量更新方式。

多线程+线程锁 实现 机器学习模型在线更新 极简模板

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from threading import Thread, Lock
from time import sleep


class DataBase:
    X = ['good perfect', 'horrible']
    Y = ['好', '差']

    @classmethod
    def load_xy(cls):
        """从数据库读取带标签语料"""
        return cls.X, cls.Y

    @classmethod
    def update_xy(cls, x, y):
        cls.X.append(x)
        cls.Y.append(y)


class Model:
    def __init__(self):
        self.vec, self.clf = None, None
        self.lock = Lock()
        self.fit()  # 首次训练
        self.updating()  # 多线程定时任务更新模型参数

    def fit(self):
        """模型参数更新"""
        vec = TfidfVectorizer()
        clf = LogisticRegression()
        x, y = DataBase.load_xy()
        clf.fit(vec.fit_transform(x), y)
        with self.lock:
            self.vec, self.clf = vec, clf
        print('\033[93m{}\033[0m'.format(self.fit.__doc__))

    def crontab(self, interval=60):
        """定时任务:更新模型参数"""
        while True:
            sleep(interval)
            self.fit()

    def updating(self):
        """多线程更新模型参数"""
        Thread(target=self.crontab).start()

    def predict(self, text):
        """单个文本分类"""
        with self.lock:
            x = self.vec.transform([text])
            return self.clf.predict(x)[0]


if __name__ == '__main__':
    model = Model()
    while True:
        t = input('数据待预测文本:').strip()
        p = model.predict(t)
        print('预测结果:%s' % p)
        if input('输入y以示预测正确:').strip() != 'y':
            p = {'好': '差', '差': '好'}[p]
        DataBase.update_xy(t, p)


本文链接: http://www.dtmao.cc/news_show_2000003.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?