#Machine Learning (ML)

0 关注者 · 23 帖子

机器学习 (ML) 是计算机科学领域人工智能的一个子集,通常使用统计技术使计算机能够利用数据进行“学习”,而无需明确编程。

了解更多信息

文章 Hao Ma · 三月 25, 2021 8m read

关键字:PyODBC,unixODBC,IRIS,IntegratedML,Jupyter Notebook,Python 3

目的

几个月前,我简单谈到了关于“将 Python JDBC 连接到 IRIS”的话题。我后来频繁提起它, 因此决定再写一篇 5 分钟的笔记,说明如何“将 Python ODBC 连接到 IRIS”。

在 Windows 客户端中通常很容易设置 ODBC 和 PyODBC,不过我每次在 Linux/Unix 风格的服务器中设置 unixODBC 和 PyODBC 客户端时,都会遇到一些麻烦。

有没有一种简单连贯的方法,可以不安装任何 IRIS,在原版 Linux 客户端中让 PyODBC/unixODBC 针对远程 IRIS 服务器运行?

范围

最近,我花了点时间研究如何在 Linux Docker 环境的 Jupyter Notebook 中从头开始让一个 PyODBC 演示运行起来, 记录下这篇稍微有些繁琐的笔记,以供日后快速参考。  

范围内: 

这篇笔记将涉及以下组件:

  • PyODBC over unixODBC 
  • 安装了 TensorFlow 2.2 和 Python 3 的 Jupyter Notebook 服务器
  • 带有 IntegratedML 的 IRIS2020.3 CE 服务器,包括示例测试数据。
  • 在此环境中

  • 安装了 Docker-compose over AWS Ubuntu 16.04 的 Docker Engine 
  • Docker Desktop for MacOSDocker Toolbox for Windows 10 也经过了测试
  • 范围外

    同样,在此演示环境中不评估非功能性方面。 它们很重要,并且可以针对特定站点,如:

  • 端到端安全和审核
  • 性能和可扩展性
  • 许可和可支持性等
  • 环境

    任何原版 Linux Docker 镜像都可以用于以下配置和测试步骤,但有一个简单的方法可以在 5 分钟内设置这样的环境:

    1.  Git 克隆演示模板
    2.  在包含 docker-compose.yml 文件的克隆目录中运行“docker-compose up -d”。

    这将创建一个演示环境,如下面的拓扑所示,其中包含 2 个容器。 一个用于 Jupyter Notebook 服务器作为 PyODBC 客户端,另一个用于 IRIS2020.3 CE 服务器。

    在上面的环境中,tf2jupyter 仅包含“Python over JDBC”客户端配置;它尚不包含任何 ODBC 或 PyODBC 客户端配置。

    因此,我们将直接在 Jupyter Notebook 内部运行以下设置步骤,以使其易于说明。  

    步骤

    以下配置和测试由我在 AWS Ubuntu 16.04 服务器中运行, 由我的同事 @Thomas.Dyar 在 MacOS 中运行。 另外在 Docker Toolbox for Windows 中也进行了简单的测试。 不过,如果您遇到任何问题,还是请告诉我们。

    以下步骤可以自动化到其 Dockerfile。 我在这里特别记录一下,以防几个月后忘记。

    1. 官方文档:

  • IRIS 的 ODBC 支持
  • 在 Unix 上定义 ODBC 数据源 
  • IRIS 的 PyODBC 支持 
  • 2. 连接到 Jupyter 服务器

    我用本地 Putty 的 SSH 隧道连接到远程 AWS Ubuntu 端口 22,然后按照上述拓扑结构映射到端口 8896。

    (举个例子,在本地 Docker 环境中,也可以直接直接 http 到 Docker 机器的 IP:8896。)

    3. 从 Jupyter Notebook 中运行 ODBC 安装

    直接在 Jupyter 单元格中运行以下代码: 

    !apt-get update<br>!apt-get install gcc<br>!apt-get install -y tdsodbc unixodbc-dev<br>!apt install unixodbc-bin -y<br>!apt-get clean -y

    它将安装 gcc(包括 g++)编译器、FreeTDS、unixODBC 和 unixodbc-dev,以在下一步重新编译 PyODBC 驱动程序。

    在原生 Windows 服务器或 PC 上安装 PyODBC 不需要这一步。 

    4. 从 Jupyter 中运行 PyODBC 安装

    !pip install pyodbc
    Collecting pyodbc
      Downloading pyodbc-4.0.30.tar.gz (266 kB)
         |████████████████████████████████| 266 kB 11.3 MB/s eta 0:00:01
    Building wheels for collected packages: pyodbc
      Building wheel for pyodbc (setup.py) ... done
      Created wheel for pyodbc: filename=pyodbc-4.0.30-cp36-cp36m-linux_x86_64.whl size=273453 sha256=b794c35f41e440441f2e79a95fead36d3aebfa74c0832a92647bb90c934688b3
      Stored in directory: /root/.cache/pip/wheels/e3/3f/16/e11367542166d4f8a252c031ac3a4163d3b901b251ec71e905
    Successfully built pyodbc
    Installing collected packages: pyodbc
    Successfully installed pyodbc-4.0.30

    以上是这个 Docker 演示的最简化 pip 安装。 在官方文档中,为“MacOS X 安装”提供了更详细的 pip 安装。

    5 在 Linux 中重新配置 ODBC INI 文件和链接:

    运行以下命令重新创建 odbcinst.iniodbc.ini 链接

    !rm /etc/odbcinst.ini
    !rm /etc/odbc.ini
    !ln -s /tf/odbcinst.ini /etc/odbcinst.ini
    !ln -s /tf/odbc.ini /etc/odbc.ini

    注:这样的原因是,**第 3 步和第 4 步通常会在 \etc\ directory 下创建 2 个空白(因此无效)的 ODBC 文件。**与 Windows 安装不同,这里的空白 ini 文件会导致问题。因此需要先将其删除,然后重新创建一个链接来指向映射的 Docker 卷中提供的真实 ini 文件:/tf/odbcinst.ini 和 /tf/odbc.ini

    看一看这两个 ini 文件。在这种情况下,它们是 Linux ODBC 配置的最简形式:

    !cat /tf/odbcinst.ini
    [InterSystems ODBC35]
    UsageCount=1
    Driver=/tf/libirisodbcu35.so
    Setup=/tf/libirisodbcu35.so
    SQLLevel=1
    FileUsage=0
    DriverODBCVer=02.10
    ConnectFunctions=YYN
    APILevel=1
    DEBUG=1
    CPTimeout=<not pooled>
    !cat /tf/odbc.ini
    [IRIS PyODBC Demo]
    Driver=InterSystems ODBC35
    Protocol=TCP
    Host=irisimlsvr
    Port=51773
    Namespace=USER
    UID=SUPERUSER
    Password=SYS
    Description=Sample namespace
    Query Timeout=0
    Static Cursors=0

    以上文件都已预先配置,位于映射的驱动器中。 引用的是驱动程序文件 libirisodbcu35.so,可以从 IRIS 服务器的容器实例中获取该文件(在其 {iris-installation}/bin 目录下)。

    要使上述 ODBC 安装正常运行,这 3 个文件必须存在于具有正确文件权限的映射驱动器(或任何 Linux 驱动器)中:

  • libirisodbcu35.so
  • odbcinst.ini
  • odbc.ini
  • **6. 验证 PyODBC 安装 **

    !odbcinst -j
    unixODBC 2.3.4
    DRIVERS............: /etc/odbcinst.ini
    SYSTEM DATA SOURCES: /etc/odbc.ini
    FILE DATA SOURCES..: /etc/ODBCDataSources
    USER DATA SOURCES..: /root/.odbc.ini
    SQLULEN Size.......: 8
    SQLLEN Size........: 8
    SQLSETPOSIROW Size.: 8
    import pyodbc
    print(pyodbc.drivers())
    ['InterSystems ODBC35']

    以上输出将表明 ODBC 驱动程序目前具有有效链接。

    我们应该能够在 Jupyter Notebook 中运行一些 Python ODBC 测试

    7. 运行将 Python ODBC 连接到 IRIS 的示例:

    import pyodbc 
    import time
    ### 1. Get an ODBC connection 
    #input("Hit any key to start")
    dsn = 'IRIS PyODBC Demo'
    server = 'irisimlsvr'   # IRIS server container or the docker machine's IP 
    port = '51773'   # or 8091 if docker machine IP is used
    database = 'USER' 
    username = 'SUPERUSER' 
    password = 'SYS' 
    #cnxn = pyodbc.connect('DSN='+dsn+';')   # use the user DSN defined in odbc.ini, or use the connection string below
    cnxn = pyodbc.connect('DRIVER={InterSystems ODBC35};SERVER='+server+';PORT='+port+';DATABASE='+database+';UID='+username+';PWD='+ password)
    ###ensure it reads strings correctly.
    cnxn.setdecoding(pyodbc.SQL_CHAR, encoding='utf8')
    cnxn.setdecoding(pyodbc.SQL_WCHAR, encoding='utf8')
    cnxn.setencoding(encoding='utf8')
    ### 2. Get a cursor; start the timer
    cursor = cnxn.cursor()
    start= time.clock()
    ### 3. specify the training data, and give a model name
    dataTable = 'DataMining.IrisDataset'
    dataTablePredict = 'Result12'
    dataColumn =  'Species'
    dataColumnPredict = "PredictedSpecies"
    modelName = "Flower12" #chose a name - must be unique in server end
    ### 4. Train and predict
    #cursor.execute("CREATE MODEL %s PREDICTING (%s)  FROM %s" % (modelName, dataColumn, dataTable))
    #cursor.execute("TRAIN MODEL %s FROM %s" % (modelName, dataTable))
    #cursor.execute("Create Table %s (%s VARCHAR(100), %s VARCHAR(100))" % (dataTablePredict, dataColumnPredict, dataColumn))
    #cursor.execute("INSERT INTO %s  SELECT TOP 20 PREDICT(%s) AS %s, %s FROM %s" % (dataTablePredict, modelName, dataColumnPredict, dataColumn, dataTable)) 
    #cnxn.commit()
    ### 5. show the predict result
    cursor.execute("SELECT * from %s ORDER BY ID" % dataTable)   #or use dataTablePredict result by IntegratedML if you run step 4 above
    row = cursor.fetchone() 
    while row: 
        print(row) 
        row = cursor.fetchone()
    ### 6. CLose and clean     
    cnxn.close()
    end= time.clock()
    print ("Total elapsed time: ")
    print (end-start)
    (1, 1.4, 0.2, 5.1, 3.5, 'Iris-setosa')
    (2, 1.4, 0.2, 4.9, 3.0, 'Iris-setosa')
    (3, 1.3, 0.2, 4.7, 3.2, 'Iris-setosa')
    (4, 1.5, 0.2, 4.6, 3.1, 'Iris-setosa')
    (5, 1.4, 0.2, 5.0, 3.6, 'Iris-setosa')
    ... ...
    ... ...
    ... ...
    (146, 5.2, 2.3, 6.7, 3.0, 'Iris-virginica')
    (147, 5.0, 1.9, 6.3, 2.5, 'Iris-virginica')
    (148, 5.2, 2.0, 6.5, 3.0, 'Iris-virginica')
    (149, 5.4, 2.3, 6.2, 3.4, 'Iris-virginica')
    (150, 5.1, 1.8, 5.9, 3.0, 'Iris-virginica')
    Total elapsed time: 
    0.023873000000000033

    这里有一些陷阱:

    1. **cnxn = pyodbc.connect() **- 在 Linux 环境下,此调用中传递的连接字符串必须正确无误,不能有任何空格。  
    2. 正确设置连接编码,例如使用 utf8。  在这里默认值对字符串不起作用。
    3. libirisodbcu35.so - 理想情况下,此驱动程序文件应与远程 IRIS 服务器的版本保持一致。  

    **未来计划 **

    这样就得到一个带有 Jupyter Notebook 的 Docker 环境,包括 Python3 和 TensorFlow 2.2(无 GPU),通过 PyODBC(以及 JDBC)连接到远程 IRIS 服务器。 所有定制的 SQL 语法应该都可以适用,比如 IRIS Integrated ML 专有的 SQL 语法。那么何不多研究一下 IntegratedML 的功能,用它驱动 ML 生命周期的 SQL 方法以进行一些创新? 

    另外,我希望接下来能介绍或总结出在 IRIS Native 甚至是 Python 环境中的魔法 SQL 上最简单的 IRIS 服务器挂接方法。 而且,现在有出色的 Python Gateway,我们甚至可以直接从 IRIS 服务器内部调用外部 Python ML 应用和服务。我希望我们也能在这方面多做些尝试。

    附录

    上面的笔记本文件也将被迁入此 Github 存储库以及 Open Exchange 中。

    1
    0 469
    公告 Claire Zheng · 四月 22, 2024

    Hi 开发者们,

    我们非常高兴地邀请大家参加新的 InterSystems 在线编程竞赛,此次编程大赛关注生成式AI(GenAI), 向量搜索(Vector Search )与机器学习(Machine Learning)!

    🏆 InterSystems 编程大赛:Vector Search, GenAI 与 ML 🏆

    时间:2024年4月22日 - 5月19日 (美国东部时间)

    奖金池: $14,000


    0
    0 212
    公告 Claire Zheng · 一月 28, 2024

    近日,InterSystems宣布 InterSystems IRIS® Cloud SQL 和 InterSystems IRIS® Cloud IntegratedML® 服务全面上市。 这些全面托管的云原生智能数据服务使开发人员能够轻松地在SQL环境中构建云原生数据库和机器学习(ML)应用程序。

    通过 Cloud SQL和 Cloud IntegratedML,开发人员可以访问下一代关系数据库即服务(DBaaS),DBaaS快速且易于配置和使用。 嵌入式AutoML功能支持开发人员在全面托管的、弹性的云原生环境中,仅仅通过几条类似SQL的命令即可轻松开发并执行机器学习模型。

    0
    0 105
    文章 Michael Lei · 八月 9, 2022 23m read

    在这篇文章中,你可以访问InterSystems开发者社区中与学习InterSystems IRIS最相关主题的文章库。找到按机器学习、嵌入式Python、JSON、API和REST应用、管理和配置InterSystems环境、Docker和云、VSCode、SQL、分析/BI、全局、安全、DevOps、互操作性、Native API排列的顶级发表的文章。快来享受学习的乐趣吧!

    机器学习

    机器学习是建立先进的数据分析和自动化人工活动的一种必要的技术,具有很好的效率。它可以创建认知模型,从现有的数据中学习,并根据其自我调整的算法进行预测、概率计算、分类、识别和 "非创造性 "的人类活动的自动化。

    在所有情况下,InterSystems IRIS作为一个数据平台和环境来创建、执行、提供和使用这些机器学习模型。IRIS能够从SQL命令(IntegratedML)中使用ML,使用嵌入式Python和PMML(预测模型标记语言)来执行ML。你可以在以下文章中查看它的功能:

    1
    0 290
    文章 Michael Lei · 七月 29, 2022 3m read

    在这篇文章中,我试图找出多个领域来开发我们能够使用python和机器学习的功能。

    每家医院都在努力利用技术和服务来提高其服务质量和效率。

    医疗保健部门是一个非常大的、可供选择的服务领域,而python是做机器学习的最好技术之一。

    在每个医院里,人们都会有一些感觉,如果这种感觉能够被计算机理解,使用技术就有机会提供更好的服务。

    在这里,我们可以把这两者结合起来,在医疗部门,我正试图理解/识别各种选择,以提供更好的服务。

    首先,我们可以尝试使用python的机器学习来识别人并了解他们目前的感受。比如,在医院信息系统中,每个病人至少有一张照片,使用该照片我们可以识别病人,然后一旦病人到达医院,使用视频监控和机器学习技术需要识别这个人的感觉。

    在医院设施中会看到多种类型的感觉。

    1)紧张

    2)平静和冷静

    3)   哭泣

    4)  暴力的病人/亲属

    5)  生病的病人

    6)  高烧鉴定

    像上面的情况,我们可以看到多种不同的类型。

    如果一个已经登记的病人发高烧,那么使用闭路电视识别这个病人的情况,并捕捉温度热像仪,护理人员可以给予更好的支持,这在接待服务领域是非常大的区别。

    如果这个发高烧的人已经是一个登记的病人,如果利用现有的照片识别这个病人,那么我们可以做多件事情。

    1)如果该病人今天有预约,我们可以自动到达该病人处。

    0
    0 168
    文章 Michael Lei · 二月 17, 2022 23m read

    实时人工智能/机器学习计算的挑战

    我们将从我们在 InterSystems 数据科学实践中遇到的示例开始讲起:

    • “高负载”客户门户与在线推荐系统相集成。 计划是在整个零售网络层面重新配置促销活动(我们将假设使用“细分策略”矩阵而非“平面”促销活动母版)。 推荐机制会有哪些变化? 推荐机制内的数据馈送和数据更新会有哪些变化(输入数据量增加了 25000 倍)? 推荐规则生成设置会有哪些变化(生成规则的总量和“分类”呈千倍增加,因此需要将推荐规则筛选阈值缩小千倍)?
    • 设备健康监控系统使用“手动”方式馈送数据样本。 现在,它将连接到每秒可传输数千个过程参数读数的 SCADA 系统。 监控系统会有哪些变化(它能否应对以秒为单位的设备健康监控)? 当输入数据接收到包含数百列最近在 SCADA 系统中实现的数据传感器读数的新块时,会发生什么(是否有必要关闭监控系统以将新的传感器数据整合到分析当中,以及要关闭多久)?
    • 复杂的人工智能/机器学习机制(推荐、监控、预测)依赖于彼此的结果。 要调整这些人工智能/机器学习机制的功能以适应输入数据的变化,每月需要多少人工工时? 人工智能/机器学习机制在支持制定业务决策方面的总体“延迟”是多少(支持信息的刷新频率对比新输入数据的馈送频率)?

    综合考虑包括上述在内的示例后,我们总结了以下因过渡到使用实时机器学习和人工智能而出现的挑战:

    • 我们对于自家公司的人工智能/机器学习机制的创建和适应速度(相对于形势变化的速度)是否满意?
    • 我们的人工智能/机器学习解决方案在支持制定实时业务决策方面的表现如何?
    • 我们的人工智能/机器学习解决方案能否自适应(即无需开发者介入即可继续工作)以应对数据漂移和由此产生的业务决策制定方法的变化?

    本文综合概述了 InterSystems IRIS 平台在全面支持人工智能/机器学习机制部署、人工智能/机器学习解决方案装配(集成)和基于密集数据流的人工智能/机器学习解决方案训练(测试)方面的功能。 我们将关注市场研究、人工智能/机器学习解决方案实例以及我们在本文中称为实时人工智能/机器学习平台的概念方面的内容。

    调查内容:实时应用类型

    由 Lightbend 在 2019 年面向约 800 名专业 IT 人士进行的调查,结果不言自明:
    图 1:实时数据的主要使用者

    我们将引用该调查结果报告中对我们最重要的片段:“… 流式传输数据流水线和基于容器的基础架构有着并驾齐驱的增长趋势,二者相结合可应对在更快、更高效且更敏捷地交付有影响力的结果方面存在的竞争压力。 与传统的批处理相比,流式传输能够更快地从数据中提取有用信息。 它还可以及时地集成高级分析数据,例如基于人工智能和机器学习 (AI/ML) 模型的推荐,所有功能都旨在通过提高客户满意度来实现差异化竞争优势。 时间压力也会对 DevOps 团队构建和部署应用造成影响。 诸如 Kubernetes 等基于容器的基础架构可帮助常要通过快速、重复构建和部署应用以应对变化的团队化解其面对的许多效率低下和设计问题。 … 804 位 IT 专业人士提供了有关其组织内使用流式处理的应用的详细信息。 受访者主要来自西方国家/地区(欧洲占比 41%,北美占比 37%),任职于大中小型组织的人数占比大致相等。 … … 人工智能并非投机炒作。 在已于人工智能/机器学习生产应用中使用流式处理的受访者中,有 58% 的人表示明年将出现一些最大幅增长。

    • 受访者一致认为人工智能/机器学习用例将于明年出现一些最大幅增长。
    • 随着实时数据处理得到更大规模的利用,不仅会拓宽在不同用例中采用的广度,还会加大在现有用例中采用的深度。
    • 除了人工智能/机器学习之外,物联网流水线采用者的热情也十分高昂 — 有 48% 已经整合物联网数据的人员表示,此用例将于近期出现一些最大幅增长。 … ”

    这项非常有趣的调查表明,机器学习和人工智能场景是实时数据的主要使用者,这种看法已得到广泛认可。 另一个重要的收获是透过 DevOps 视角折射出的对于人工智能/机器学习的看法:我们现在已经可以断言,仍占主导地位的“基于完全已知数据集的一次性人工智能/机器学习”文化已发生转变。

    实时人工智能/机器学习平台概念

    实时人工智能/机器学习最典型的使用领域之一是工业中的制造过程管理。 让我们以这一领域为例并考虑上述所有想法,为实时人工智能/机器学习平台的概念给出确切的定义。 使用人工智能和机器学习来满足制造过程管理的需求具备多项与众不同的特性:

    • 有关制造过程状况的数据会非常密集地生成:生成频率高、涉及参数广泛(SCADA 系统每秒可传输数以万计的参数值)
    • 有关检测到的缺陷的数据(且不说不断演化的缺陷,它们反而是稀少且偶发的数据)已知存在缺陷分类不足和定位不及时的问题(通常以人工记录的形式在纸上找到)
    • 从实际角度来看,模型训练和应用只有一个“观察窗口”,可反映以最近的过程参数读数作为结尾的合理移动间隔内的过程动态

    这些特性使我们除了需要实时接收和基本处理来自制造过程的密集“宽带信号”之外,也需要以实时方式执行(并行)人工智能/机器学习模型应用、训练和准确率控制。 我们的模型在移动观察窗口中“看到”的“框架”在不断变化 – 基于之前某一“框架”训练的人工智能/机器学习模型在准确率方面也会发生变化。 如果人工智能/机器学习建模准确率下降(例如,“警报范数”分类误差的值超过了给定的容差边界),则应自动触发基于较新“框架”的重新训练 – 同时,在选择开始重新训练的时刻时,必须考虑到重新训练过程持续时间和当前模型版本的准确率下降速度(因为在获得“重新训练”版本的模型之前,在执行重新训练的过程期间会一直持续应用当前版本)。 InterSystems IRIS 拥有关键的平台内功能,可充分支持用于制造过程管理的实时人工智能/机器学习解决方案。 这些功能可以分为三大类:

    • 基于 InterSystems IRIS 平台实时运行的生产解决方案中新的或经修改的现有人工智能/机器学习机制的持续部署/交付 (CD)
    • InterSystems IRIS 平台的单一生产解决方案中的入站过程数据流、人工智能/机器学习模型应用/训练/准确率控制队列、围绕与数学建模环境实时交互的数据/代码/编排的持续集成 (CI)
    • 在使用传递自 InterSystems IRIS 平台的数据、代码和编排(“决策制定”)的数学建模环境中执行的人工智能/机器学习机制的持续训练 (CT)

    将与机器学习和人工智能相关的平台功能归入上述类别并非随意而为。 我们引用了由 Google 发表的方法论文章,文中为这种分组提供了概念基础:“… DevOps 是开发和运行大规模软件系统的一种常见做法。 这种做法具有诸多优势,例如缩短开发周期、提高部署速度、实现可靠的发布。 如需获得这些优势,您需要在软件系统开发中引入两个概念:

    • 持续集成 (CI)
    • 持续交付 (CD)

    机器学习系统是一种软件系统,因此类似的做法有助于确保您能够可靠地大规模构建和运行机器学习系统。 但是,机器学习系统在以下方面与其他软件系统不同:

    • 团队技能:在机器学习项目中,团队通常包括数据科学家或机器学习研究人员,他们主要负责进行探索性数据分析、模型开发和实验。 这些成员可能不是经验丰富的、能够构建生产级服务的软件工程师。
    • 开发:机器学习在本质上具有实验性。 您应该尝试不同的特征、算法、建模技术和参数配置,以便尽快找到问题的最佳解决方案。 您所面临的挑战在于跟踪哪些方案有效、哪些方案无效,并在最大程度提高代码重复使用率的同时维持可重现性。
    • 测试:测试机器学习系统比测试其他软件系统更复杂。 除了典型的单元测试和集成测试之外,您还需要验证数据、评估经过训练的模型质量以及验证模型。
    • 部署:在机器学习系统中,部署不是将离线训练的机器学习模型部署为预测服务那样简单。 机器学习系统可能会要求您部署多步骤流水线以自动重新训练和部署模型。 此流水线会增加复杂性,并要求您自动执行部署之前由数据科学家手动执行的步骤,以训练和验证新模型。
    • 生产:机器学习模型的性能可能会下降,不仅是因为编码不理想,而且也因为数据资料在不断演变。 换句话说,与传统的软件系统相比,模型可能会通过更多方式衰退,而您需要考虑这种降级现象。 因此,您需要跟踪数据的摘要统计信息并监控模型的在线性能,以便系统在值与预期不符时发送通知或回滚。

    机器学习和其他软件系统在源代码控制的持续集成、单元测试、集成测试以及软件模块或软件包的持续交付方面类似。 但是,在机器学习中,有一些显著的差异:

    • CI 不再仅仅测试和验证代码及组件,而且还会测试和验证数据、数据架构和模型。
    • CD 不再针对单个软件包或服务,而会针对应自动部署其他服务(模型预测服务)的系统(机器学习训练流水线)。
    • CT 是机器学习系统特有的一个新属性,它主要涉及自动重新训练和提供模型。 …

    我们可以得出结论,基于实时数据的机器学习和人工智能需要更为广泛的工具和更加丰富的功能(从代码开发到数学建模环境编排)、所有功能和主题领域之间更加紧密的集成、更好的人力及机器资源管理。

    实时场景:识别进料泵中出现的缺陷

    继续以制造过程管理领域为例,我们将探讨一个已在开头引用过的实际案例:需要建立一种基于制造过程参数值流以及维护人员缺陷检测报告来实时识别进料泵中出现的缺陷的机制。
    图 2:识别出现缺陷的案例解析

    许多类似的实际案例中都有一个共同的特点,即在考虑规律且及时地馈送数据 (SCADA) 时,还需要同时考虑偶发且不规则地检测(和记录)各种缺陷类型。 换句话说:SCADA 数据每秒馈送一次以供分析,但需要用纸笔记录缺陷并注明日期(例如:“1 月 12 日– 第三轴承区域漏油渗入泵盖”)。 因此,我们可以通过添加以下重要限制来对案例解析加以补充:我们只有一种具体缺陷类型的“指纹”(即具体缺陷类型由截至具体日期的 SCADA 数据表示 – 该特定缺陷类型没有其他示例)。 这一限制立即使我们脱离了假定有大量可用“指纹”的传统机器学习范式(监督学习)。
    图 3:细化缺陷识别案例解析

    我们能否以某种方式“倍增”我们可用的“指纹”? 是的,可以。 泵的当前状况由其与已记录缺陷的相似度表征。 即使不运用定量方法,仅通过观察从 SCADA 系统接收到的参数值的动态,也可以了解很多信息:
    图 4:泵状况动态与具体缺陷类型“指纹”

    然而,视觉感知(至少目前)在我们动态发展的场景中并不是最合适的机器学习“标签”生成器。 我们将使用统计检验来评估当前泵状况与已记录缺陷的相似度。
    图 5:对传入数据与缺陷“指纹”应用统计检验

    统计检验可评估一组包含制造过程参数值的记录(以“批次”形式取自 SCADA 系统)与具体缺陷“指纹”的记录相似的概率。 使用统计检验(统计相似度指数)评估的概率随后会被转换为 0 或 1,成为我们评估相似度的每组记录中的机器学习“标签”。 即,使用统计检验处理获取到的一批泵状况记录后,我们就能够 (a) 将该批次添加到人工智能/机器学习模型的训练数据集以及 (b) 评估人工智能/机器学习模型当前版本应用于该批次时的准确率。
    图 6:对传入数据与缺陷“指纹”应用机器学习模型

    在之前的一期在线讲座中,我们展示并讲解了 InterSystems IRIS 平台如何将任何人工智能/机器学习机制实现为能够控制建模输出似然并调整模型参数的持续执行的业务流程。 我们实现泵场景依赖于在线讲座中介绍的完整 InterSystems IRIS 功能 – 这些功能在作为我们的解决方案一部分的 ANALYZER 流程中使用,通过自动管理训练数据集实现强化学习,取代了传统的监督学习。 我们会将在应用统计检验(相似度指数转换为 0 或 1)和当前版本的模型之后呈现“检测一致性”(即统计检验和模型基于这些记录均输出 1)的记录添加到训练数据集中。 重新训练模型时,在其验证阶段(将新训练的模型应用于自身的训练数据集,在此之前需要对该数据集提前进行统计检验),应用统计检验后“未能保持”输出 1 的记录(由于训练数据集中永远存在属于原始缺陷“指纹”的记录)将从训练数据集中移除,并基于缺陷“指纹”和数据流中的“成功”记录训练新版本模型。
    图 7:InterSystems IRIS 中人工智能/机器学习计算的机器人化

    如果需要对通过 InterSystems IRIS 中的本地计算获得的检测准确率寻求“第二意见”,我们可以创建一个顾问流程,以使用云提供商(例如 Microsoft Azure、Amazon Web Services、 Google Cloud Platform 等)基于控制数据集重做模型训练/应用):
    图 8:来自 Microsoft Azure 的“第二意见”,由 InterSystems IRIS 编排

    我们场景的原型在 InterSystems IRIS 中实现为分析过程的代理系统,与设备(泵)、数学建模环境(Python、R 和 Julia)交互,并支持所有相关人工智能/机器学习机制的自我训练 – 基于实时数据流。
    图 9:InterSystems IRIS 中实时人工智能/机器学习解决方案的核心功能

    基于我们的原型获得的一些实际结果:

    • 由模型检测到的缺陷“指纹”(1 月 12 日):
    • 模型检测到的原型已知“指纹”中未包含的新出现的缺陷(于 9 月 11 日检测到,而缺陷本身在两天后,即 9 月 13 日被维修队发现):
    对包含多次发生相同缺陷的真实数据进行的模拟表明,我们使用 InterSystems IRIS 平台实现的解决方案可以在维修队发现问题的几日之前检测到缺陷。

    InterSystems IRIS – 适用于实时人工智能/机器学习计算的多功能通用平台

    InterSystems IRIS 是一款完整、统一的平台,可简化实时富数据解决方案的开发、部署和维护。 它提供了并发事务和分析处理能力,支持多个完全同步的数据模型(关系、分层、对象和文档),一个可集成不同数据孤岛和应用的完整的互操作性平台,以及支持批处理和实时用例的复杂结构化和非结构化分析功能。 该平台还提供了一个开放的分析环境,可将同类最佳的分析整合到 InterSystems IRIS 解决方案中,并提供灵活的部署功能以支持云和本地部署的任意组合。 由 InterSystems IRIS 平台提供支持的应用目前已在各行各业中得到广泛使用,帮助公司在战略和战术执行中获得切实的经济利益,促进明智的决策制定并消除事件、分析和行动之间的“差距”。
    图 10:实时人工智能/机器学习背景下的 InterSystems IRIS 架构

    与上图相同,下图将新的“基础”(CD/CI/CT) 与平台工作元素之间的信息流结合起来。 可视化始于 CD 宏机制,并继续贯穿于 CI/CT 宏机制。
    图 11:InterSystems IRIS 平台人工智能/机器学习工作元素之间的信息流图

    InterSystems IRIS 中 CD 机制的基本要素:平台用户(人工智能/机器学习解决方案开发者)使用专门的人工智能/机器学习代码编辑器调整现有和/或创建新的人工智能/机器学习机制。上述代码编辑器为 Jupyter(全称:Jupyter Notebook;为简洁起见,在此编辑器中创建的文档也常被称为相同的名称)。 在 Jupyter 中,开发者可以在传输(“部署”)到 InterSystems IRIS 之前编写、调试和测试(也使用可视化表示)具体的人工智能/机器学习机制。 显然,以这种方式开发的新机制只能进行基本的调试(特别是因为 Jupyter 不处理实时数据流)– 但我们对此没有意见,因为原则上,在 Jupyter 中开发代码的主要目标是验证单独的人工智能/机器学习机制的功能。 类似地,已部署在平台中的人工智能/机器学习机制(请参阅其他宏机制)在调试前可能需要“回滚”到其“平台前”版本(从文件读取数据、通过 xDBC 而非本地表或 global(即 InterSystems IRIS 中的多维数据数组)访问数据等)。 在 InterSystems IRIS 中实现 CD 具有一项重要特性:平台和 Jupyter 之间存在双向集成关系,支持在平台内部署(利用进一步的平台内处理)Python、R 和 Julia 内容(三种语言均为各自主要开源数学建模环境的编程语言)。 也就是说,人工智能/机器学习内容开发者获得了在平台中“持续部署”其内容的能力,同时能够使用其常用 Jupyter 编辑器以及 Python、R、Julia 所提供的常用函数库,在平台外部提供基本的调试功能(必要情况下)。 继续聊聊 InterSystems IRIS 中的 CI 宏机制。 该图展示了“实时机器人化”的宏流程(一组数据结构、以数学环境语言编写的业务流程和代码段,以及以其编排的 InterSystems IRIS 原生开发语言 ObjectScript)。 宏流程的目标是:支持人工智能/机器学习机制运行所需的数据处理队列(基于实时传输到平台的数据流),对人工智能/机器学习机制的排序和“分类” (又名 “数学算法”、“模型”等 – 可根据实现细节和术语偏好采用多种不同名称)做出决策,对围绕人工智能/机器学习输出(多维数据集、表格、多维数据数组等 – 生成报告、仪表板等)的智能保持最新的分析结构。 在 InterSystems IRIS 中实现 CI 具有一项重要特性:平台和数学建模环境之间存在双向集成关系,支持在平台内执行使用 Python、R 或 Julia 在各自的环境中编写的内容并接收执行结果。 这种集成在“终端模式”(即人工智能/机器学习内容被制定为对数学环境执行标注的 ObjectScript 代码)和“业务流程模式”(即人工智能/机器学习内容被制定为使用可视化编辑器、Jupyter 或 IDE(IRIS Studio、Eclipse、Visual Studio Code)的业务流程)下均适用。 需要使用 CI 层内的 IRIS 和 CD 层内的 Jupyter 之间的链接指定在 Jupyter 中编辑业务流程的可用性。 本文将进一步提供与数学建模环境相集成的更为详细的概述。 我们认为此时完全有理由向您说明,平台中提供了将人工智能/机器学习机制(源自“持续部署”)“持续集成”到实时人工智能/机器学习解决方案中所需的所有工具。 最后要聊到的是至关重要的宏机制:CT。 没有它,就不会存在人工智能/机器学习平台(即便可以通过 CD/CI 实现“实时”)。 CT 的本质是平台能够在数学建模环境的会话中直接操作机器学习和人工智能的“工件”:模型、分布表、向量/矩阵、神经网络层等。 在大多数情况下,这种“互操作性”体现于在环境中创建上述工件(例如,对于模型,“创建”包括模型规范及其参数的后续评估,即所谓的模型“训练”),对工件进行应用(对于模型:借助目标变量的“建模”值进行计算 – 预测、类别指定、事件概率等),以及对已经创建的和应用的工件进行改进 (例如,通过根据模型的性能重新定义模型的输入变量以便提高预测准确率,作为一种可行选项)。 CT 角色的关键属性是它对 CD 和 CI 现实的“抽象”:CT 可以在具体环境中存在的限制下使用人工智能/机器学习解决方案的计算和数学细节来实现所有工件。 将由 CD 和 CI 负责“提供输入数据”和“交付输出”。 在 InterSystems IRIS 中实现 CT 具有一项重要特性:使用上述与数学建模环境的集成时,平台可以从其编排的数学环境内的会话中提取工件,并且(最重要的是)将它们转换为平台内数据对象。 例如,刚刚在 Python 会话中创建的分布表可以(无需暂停 Python 会话)传输到平台中作为 global(InterSystems IRIS 中的多维数据数组),并进一步重用于在不同的人工智能/机器学习机制下的计算(使用不同环境的语言实现,如 R),或者作为虚拟表。 另一个示例:与模型的“例程”功能并行(在 Python 会话中),它的输入数据集使用“自动机器学习”进行处理 – 自动搜索优化的输入变量和模型参数。 与“例程”训练一起,生产模型可以实时接收“优化建议”,以根据调整后的输入变量集、调整后的模型参数值(不再是 Python 训练的结果,而是作为其“替代”版本的训练结果,例如使用 H2O 框架),使整个人工智能/机器学习解决方案能够以自主方式处理输入数据和建模对象/流程中不可预见的漂移。 我们现在将以现有原型为例,深入了解 InterSystems IRIS 的平台内人工智能/机器学习功能。 在下图中,在图像的左侧部分,我们看到了实现 Python 和 R 脚本执行的业务流程的片段。 在中央部分,我们看到了执行这些脚本后的 Python 和 R 的相应可视化日志。 接下来是两种语言的内容示例,在各自环境中执行。 右侧为基于脚本输出的可视化。 右上角的可视化使用 IRIS Analytics 开发(数据从 Python 传输到 InterSystems IRIS 平台,并使用平台功能呈现在仪表板中),右下角所示为直接在 R 会话中获取并从中传输到图形文件的内容。 重要说明:所讨论的业务流程片段在此原型中负责基于从设备模拟器流程实时接收的数据进行模型训练(设备状况分类),该流程由监控分类模型性能的分类准确率监控流程触发。 文中会进一步讨论将人工智能/机器学习解决方案实现为一组交互式业务流程(“代理”)。
    图 12:在 InterSystems IRIS 中与 Python、R 和 Julia 的交互

    平台内流程(又称 “业务流程”、“分析过程”、“流水线”等,具体取决于上下文)可以编辑,首先是使用平台中的可视化业务流程编辑器,所用方式可同时创建流程图及其相应的人工智能/机器学习机制(代码)。 我们所说的“创建人工智能/机器学习机制”是指从一开始就进行混合(在流程级别):使用数学建模环境的语言编写的内容与使用 SQL (包括 IntegratedML 扩展程序)、InterSystems ObjectScript 以及其他支持的语言编写的内容相邻。 此外,平台内范式以嵌入片段集的形式(如下图所示)为“绘制”流程提供了广泛的功能,有助于高效地构建有时相当复杂的内容,避免视觉组合中的“随机失活” (“非可视化”方法/类/过程等)。 即,在必要情况下(可能在大多数项目中),可以采用可视化的自文档格式实现整个人工智能/机器学习解决方案。 请您注意下图中心部分,该部分展示了“更高级的嵌入向量层”,并表明除了这样的模型训练(使用 Python 和 R 实现)之外,还有针对训练模型的所谓 ROC 曲线分析,可对其训练质量进行视觉(和计算)评估 – 该分析使用 Julia 语言实现(在其各自的 Julia 环境中执行)。
    图 13:InterSystems IRIS 中的视觉人工智能/机器学习解决方案组合环境

    如前所述,已实现的平台内人工智能/机器学习机制的初始开发和(在其他情况中)调整将在平台外部的 Jupyter 编辑器中执行。 在下图中,我们可以找到一个编辑现有平台内流程的示例(与上图中的流程相同)– 这就是其模型训练片段在 Jupyter 中的外观。 Python 语言的内容支持在 Jupyter 中编辑、调试、查看内嵌计算图。 更改(如果需要)可以立即复制到平台内流程,包括其生产版本。 同样,新开发的内容也可以复制到平台(自动创建一个新的平台内流程)。
    图 14 在 InterSystems IRIS 中使用 Jupyter Notebook 编辑平台内人工智能/机器学习机制

    平台内流程的编辑不仅可以使用可视化或笔记本格式执行,还可以使用“完整”的 IDE(集成开发环境)格式执行。 IDE 为 IRIS Studio(原生 IRIS 开发工作室)、Visual Studio Code(VSCode 的 InterSystems IRIS 扩展程序)和 Eclipse(Atelier 插件)。 在某些情况下,开发团队可以同时使用全部三种 IDE。 下图展示了在 IRIS Studio、Visual Studio Code 和 Eclipse 中编辑完全相同流程的示例。 内容的任何部分都完全可以编辑:Python/R/Julia/SQL、ObjectScript 和业务流程元素。
    图 15:在各种 IDE 中编辑 InterSystems IRIS 业务流程

    在 InterSystems IRIS 中使用业务流程语言 (BPL) 组合和执行业务流程的方法值得特别提及。 BPL 允许在业务流程中使用“预先配置的集成组件”(活动)– 确切地说,这让我们有权声明 IRIS 支持“持续集成”。 预配置的业务流程组件(活动和活动之间的链接)对于装配人工智能/机器学习解决方案而言是极其强大的加速器。 不仅用于装配:由于活动及其链接,在不同的人工智能/机器学习机制之上引入了“自主管理层”,能够根据具体情况做出实时决策。
    图 16:InterSystems IRIS 平台中用于持续集成 (CI) 的预配置业务流程组件

    代理系统(又名 “多代理系统”)的概念在机器人化领域被广泛接受,InterSystems IRIS 平台通过其“生产/流程”结构为其提供有机支持。 除了使用整体解决方案所需的功能“武装”每个流程的无限能力之外,“代理”作为平台内流程家族中的一员,能够为非常不稳定的建模现象(社会/生物系统的行为, 实施部分观察的制造过程等)创建高效的解决方案。
    图 17:在 InterSystems IRIS 中以业务流程代理系统形式运行的人工智能/机器学习解决方案

    现在继续概述 InterSystems IRIS 平台,我们将向您展示包含适用于所有实时场景类别的解决方案的应用领域(我们在之前的一期在线讲座中提供了对一些基于 InterSystems IRIS 的平台内人工智能/机器学习最佳做法的十分详细的发现) 。 紧接上图,我们在下面提供了一幅更具说明性的代理系统图。 在该图中,完全相同的原型显示了其四个代理流程以及它们之间的交互: GENERATOR – 模拟设备传感器的生成数据;BUFFER – 管理数据处理队列;ANALYZER – 执行机器学习;MONITOR – 监控机器学习质量以及在有必要重新训练模型时发出信号。
    图 18:在 InterSystems IRIS 中以业务流程代理系统形式构成的人工智能/机器学习解决方案

    下图展示了不同机器人化原型(文本情感分析)在一段时间内的运行。 上半部分 – 模型训练质量指标演变(质量提高),下半部分 – 模型应用质量指标和重新训练(红条)的动态。 正如所见,该解决方案显示出有效且自主的自我训练,同时继续以所需的质量水平运行(质量指标值保持在 80% 以上)。
    图 19:基于 InterSystems IRIS 平台的持续(自)训练 (CT)

    我们之前已经提到过“自动机器学习”,在下图中,我们将以另一个原型为例提供有关此功能的更多详细信息。 在业务流程片段图中,我们看到了在 H2O 框架中启动建模的活动,以及该建模的结果(与其他“手工”模型相比,获得的模型在 ROC 曲线方面具有明显优势,以及自动检测原始数据集中可用变量中“最具影响力的变量”)。 这里的一个重要优势是“自动机器学习”可节省时间并提供专家资源:我们的平台内流程可以在半分钟内交付专家可能需要一周到一个月时间才能完成的工作(确定和证明最佳模型)。
    图 20:在基于 InterSystems IRIS 平台的人工智能/机器学习解决方案中嵌入的“自动机器学习”

    下图“直击高潮”,同时也很好地将有关各类实时场景的故事推向尾声:在此提醒您,尽管 InterSystems IRIS 可提供所有平台内功能,但在其编排下训练模型并非强制要求。 该平台可以接收来自在非平台编排工具中训练的模型的外部来源的所谓 PMML 规范,然后自其导入 PMML 规范之时起继续实时应用该模型。 请务必记住,尽管大多数最广泛使用的人工智能/机器学习工件都支持,但并非每个给定的人工智能/机器学习工件都可以解析为 PMML 规范。 因此,InterSystems IRIS 是一种开放的平台,对其用户而言完全不存在“平台奴役”情况。
    图 21:InterSystems IRIS 平台中基于 PMML 规范的模型应用

    让我们聊聊 InterSystems IRIS 平台的其他优势(为了更好地说明,请参考制造过程管理),这些优势对于人工智能和机器学习的实时自动化非常重要:

    • 强大的集成框架,可与任何数据源和数据使用者(SCADA、设备、MRO、ERP 等)互操作
    • 内置多模型数据库管理系统,用于无限量制造过程数据的高性能混合事务和分析处理 (HTAP)
    • 用于将人工智能/机器学习机制持续部署到基于 Python、R、Julia 的实时解决方案的开发环境
    • 用于持续集成到人工智能/机器学习机制的实时解决方案和(自)训练的自适应业务流程
    • 用于制造过程数据和人工智能/机器学习解决方案输出可视化的内置商业智能功能
    • API 管理,可将人工智能/机器学习输出提供给 SCADA、数据集市/仓库、通知引擎等。

    在 InterSystems IRIS 平台中实现的人工智能/机器学习解决方案可轻松适应现有的 IT 基础架构。 得益于高可用性和灾难恢复配置支持,以及在虚拟环境、物理服务器、私有云和公共云、Docker 容器中的灵活部署能力,InterSystems IRIS 能够有效保障人工智能/机器学习解决方案的可靠性。 也就是说,InterSystems IRIS 确实是实时人工智能/机器学习计算的多功能通用平台。 我们平台的多功能特质在实际应用中得到了证明:对实现计算的复杂性实际上毫无限制;InterSystems IRIS 能够结合(实时)执行不同行业的场景;具有出色的适应性,能够提供满足用户具体需求的任何平台内功能和机制。
    图 22:InterSystems IRIS — 适用于实时人工智能/机器学习计算的多功能通用平台

    为了与对本文感兴趣的读者进行更加具体的对话,我们建议您继续与我们进行“实时”交流。 我们将随时提供支持,制定与贵公司具体情况相吻合的实时人工智能/机器学习场景,运行基于 InterSystems IRIS 平台的协作原型设计,设计和执行路线图以在您的制造及管理过程中实现人工智能和机器学习。 我们人工智能/机器学习专家团队的联系电子邮件:MLToolkit@intersystems.com

    0
    0 276
    公告 Claire Zheng · 七月 30, 2021

    亲爱的社区开发者们,大家好!

    我们真诚邀请您参加 Online Meetup:InterSystems 开发者竞赛(人工智能与机器学习)!

    时间: 2021年7月30日(周五) 11:00 AM (美东时间)23:00 (北京时间)

    在这场在线Meetup,您将了解到:

    • 此次优胜者的个人履历;
    • 获奖Application的简短Demo;
    • 有关应用技术的开放探讨、问答,以及下次竞赛的一些计划。

    0
    0 127
    文章 Michael Lei · 五月 12, 2021 28m read

    关键字:IRIS, IntegratedML, 机器学习, Covid-19, Kaggle 

    目的

    最近,我注意到一个用于预测 Covid-19 患者是否将转入 ICU 的 Kaggle 数据集。 它是一个包含 1925 条病患记录的电子表格,其中有 231 列生命体征和观察结果,最后一列“ICU”为 1(表示是)或 0(表示否)。 任务是根据已知数据预测患者是否将转入 ICU。

    这个数据集看起来是所谓的“传统 ML”任务的一个好例子。数据看上去数量合适,质量也相对合适。它可能更适合在 IntegratedML 演示套件上直接应用,那么,基于普通 ML 管道与可能的 IntegratedML 方法进行快速测试,最简单的方法是什么?

    0
    0 132
    文章 Michael Lei · 五月 8, 2021 8m read

    关键字:Python,JDBC,SQL,IRIS,Jupyter Notebook,Pandas,Numpy ,机器学习 

    1. 目的

    这是一个用于演示的 5 分钟快速笔记,通过 Jupyter Notebook 中的 Python 3 调用 IRIS JDBC 驱动程序,以经由 SQL 语法从 IRIS 数据库实例读取数据和向 IRIS 数据库实例写入数据。 

    去年,我发表了关于将 Python 绑定到 Cache 数据库的简要笔记(第 4.7 节)。 如何使用 Python 挂入 IRIS 数据库以将其数据读入 Pandas 数据框和 NumPy 数组进行常规分析,然后再将一些经过预处理或标准化的数据写回 IRIS 中,准备进一步用于 ML/DL 管道,现在可能是时候回顾一些选项和讨论了。

    一些立即浮现的快速选项

    1.    ODBC:Python 3 和原生 SQL 的 PyODBC?
    2.    JDBC:Pyhton 3 和原生 SQL 的 JayDeBeApi?
    3.    Spark:PySpark 和 SQL?
    4.    Python Native API for IRIS:超越先前的 Python Binding for Cache?
    5.   ** IPtyhon Magic SQL %%sql**?  可以支持 IRIS 了吗?

     这里有漏掉其他选项吗?  我有兴趣尝试任何选项。 

    2. 范围 

    我们是不是应该从普通的 JDBC 方法开始? 下一个快速笔记将总结 ODBC、Spark 和 Python Native API。 

    范围内:

    此快速演示涉及以下常见组件:

  • Anaconda
  • Jupyter Notebook 
  • Python 3
  • JayDeBeApi
  • JPyPe
  • Pandas
  • NumPy
  • 一个 IRIS 2019.x 实例
  •  范围外:

    本快速笔记不会涉及以下内容,但它们也很重要,可以使用特定的站点解决方案、部署和服务单独解决: 

  • 安全端到端。
  • 非功能性能等。
  • 问题排查和支持。
  • 许可。 
  • 3. 演示

    3.1 运行 IRIS 实例:

    我只运行了一个 IRIS 2019.4 容器,作为“远程”数据库服务器。 您可以使用任何您有权利访问的 IRIS 实例。

    zhongli@UKM5530ZHONGLI MINGW64 /c/Program Files/Docker Toolbox
    $ docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                PORTS                                              NAMES
    d86be69a03ab        quickml-demo        "/iris-main"        3 days ago          Up 3 days (healthy)   0.0.0.0:9091->51773/tcp, 0.0.0.0:9092->52773/tcp   quickml

    3.2 Anaconda 和 Jupyter Notebook:

     我们将在笔记本电脑中重用相同的设置方法,这里对应 Anaconda(第 4.1 节),这里对应 Jupyter Notebook(第 4 节)。  Python 3.x 在这一步安装。

    3.3 安装 JayDeBeApi 和 JPyPe:

    启动 JupyterNotebook,然后在其单元格中运行以下内容设置 Python-to-JDBC/Java 桥
     
      !conda install --yes -c conda-forge jaydebeapi

    JayDeBeApi 在撰写本文时(2020 年 1 月)使用 JPype 0.7,该版本由于一个已知错误无法运行,必须降级为 0.6.3

    !conda install --yes -c conda-forge JPype1=0.6.3 --force-reinstall

    3.4 通过 JDBC 连接到 IRIS 数据库 

    这里有一个正式的使用 JDBC 连接到 IRIS 的文档。 

    对于通过 JDBC 执行 Python SQL,我以下面的代码为例。 它连接到此 IRIS 实例的“USER”命名空间内的数据表“DataMining.IrisDataset”。 

    ### 1. Set environment variables, if necessary<br>#import os<br>#os.environ['JAVA_HOME']='C:\Progra~1\Java\jdk1.8.0_241'<br>#os.environ['CLASSPATH'] = 'C:\interSystems\IRIS20194\dev\java\lib\JDK18\intersystems-jdbc-3.0.0.jar'<br>#os.environ['HADOOP_HOME']='C:\hadoop\bin'  #winutil binary must be in Hadoop's Home
    ### 2. Get jdbc connection and cursor<br><strong>import jaydebeapi<br>url = "jdbc:IRIS://192.168.99.101:9091/USER"<br>driver = 'com.intersystems.jdbc.IRISDriver'<br>user = "SUPERUSER"<br>password = "SYS"</strong><br>#libx = "C:/InterSystems/IRIS20194/dev/java/lib/JDK18"<br><strong>jarfile = "C:/InterSystems/IRIS20194/dev/java/lib/JDK18/intersystems-jdbc-3.0.0.jar"</strong>
    conn = jaydebeapi.connect(driver, url, [user, password], jarfile)<br>curs = conn.cursor()
    ### 3. specify the source data table<br><strong>dataTable = 'DataMining.IrisDataset'</strong>
     
    ### 4. Get the result and display<br><strong>curs.execute("select TOP 20 * from %s" % dataTable)<br>result = curs.fetchall()<br>print("Total records: " + str(len(result)))<br>for i in range(len(result)):<br>    print(result[i])</strong>
    ### 5. CLose and clean - I keep them open for next accesses.<br><strong>#curs.close()<br>#conn.close()</strong>
    Total records: 150
    (1, 1.4, 0.2, 5.1, 3.5, 'Iris-setosa')
    (2, 1.4, 0.2, 4.9, 3.0, 'Iris-setosa')
    (3, 1.3, 0.2, 4.7, 3.2, 'Iris-setosa')
    ... ...
    (49, 1.5, 0.2, 5.3, 3.7, 'Iris-setosa')
    (50, 1.4, 0.2, 5.0, 3.3, 'Iris-setosa')
    (51, 4.7, 1.4, 7.0, 3.2, 'Iris-versicolor')
    ... ... 
    (145, 5.7, 2.5, 6.7, 3.3, 'Iris-virginica')
    ... ... 
    (148, 5.2, 2.0, 6.5, 3.0, 'Iris-virginica')
    (149, 5.4, 2.3, 6.2, 3.4, 'Iris-virginica')
    (150, 5.1, 1.8, 5.9, 3.0, 'Iris-virginica')

     

    测试表明 JDBC 上的 Python 可以正常运行。 以下只是常规 ML 管道的一些常规数据分析和预处理,由于我们可能会在后续的演示和比较中反复涉及,因此为方便起见在这里附上。 

    3.5 将 SQL 结果转换为 Pandas DataFrame,再转换为 NumPy 数组

    如果还没有安装 Pandas 和 NumPy 软件包,可以通过 Conda 安装,类似于上面 3.3 节。

    然后运行以下示例:

    ### transform SQL results "sqlData"to Pandas dataframe "df", then further to NumPy array "arrayN" for further ML pipelines 
    import pandas as pd
    sqlData = "SELECT * from DataMining.IrisDataset"
    df= pd.io.sql.read_sql(sqlData, conn)
    df = df.drop('ID', 1)
    df = df[['SepalLength', 'SepalWidth', 'PetalLength', 'PetalWidth', 'Species']]
    # set the labels to 0, 1, 2, for NumPy matrix
    df.replace('Iris-setosa', 0, inplace=True)
    df.replace('Iris-versicolor', 1, inplace=True)
    df.replace('Iris-virginica', 2, inplace=True)
    # turn dataframe into Numpy array
    arrayN = df.to_numpy()
    ### 6. CLose and clean - if connection is not needed anymore?
    #curs.close()
    #conn.close()

    我们例行查看一下当前数据:

    df.head(5)

    df.describe()

    现在,我们得到了一个 DataFrame,以及一个来自源数据表的标准化 NumPy 数组。  

    当然,我们在这里可以尝试各种常规分析,一个 ML 人员会按照下述步骤开始,在 Python 中替换 R(链接)。

    数据源引自此处

    3.6 拆分数据并通过 SQL 写回 IRIS 数据库:

    当然,我们可以像往常一样将数据拆分为训练集和验证集或测试集,然后将它们写回临时数据库表,实现 IRIS 一些即将推出的精彩 ML 功能:

    import numpy as np 
    from matplotlib import pyplot
    from sklearn.model_selection import train_test_split
    # keep e.g. 20% = 30 rows as test data; trained on another e.g. 80% = 120 rows
    X = arrayN[:,0:4]
    y = arrayN[:,4]
    X_train, X_validation, Y_train, Y_validation = train_test_split(X, y, test_size=0.20, random_state=1, shuffle=True)
    # make 80% of random rows into a Train set
    labels1 = np.reshape(Y_train,(120,1))
    train = np.concatenate([X_train, labels1],axis=-1)
    # make 20% of left rows into Test set
    lTest1 = np.reshape(Y_validation,(30,1))
    test = np.concatenate([X_validation, lTest1],axis=-1)
    # write the train data set into a Pandas frame
    dfTrain = pd.DataFrame({'SepalLength':train[:, 0], 'SepalWidth':train[:, 1], 'PetalLength':train[:, 2], 'PetalWidth':train[:, 3], 'Species':train[:, 4]})
    dfTrain['Species'].replace(0, 'Iris-setosa', inplace=True)
    dfTrain['Species'].replace(1, 'Iris-versicolor', inplace=True)
    dfTrain['Species'].replace(2, 'Iris-virginica', inplace=True)
    # write the test data into another Pandas frame
    dfTest = pd.DataFrame({'SepalLength':test[:, 0], 'SepalWidth':test[:, 1], 'PetalLength':test[:, 2], 'PetalWidth':test[:, 3], 'Species':test[:, 4]})
    dfTest['Species'].replace(0, 'Iris-setosa', inplace=True)
    dfTest['Species'].replace(1, 'Iris-versicolor', inplace=True)
    dfTest['Species'].replace(2, 'Iris-virginica', inplace=True)
    ### 3. specify temp table names
    #dataTable = 'DataMining.IrisDataset'
    dtTrain = 'TRAIN02'
    dtTest = "TEST02"
    ### 4. Create 2 temporary tables - you can try drop tables then re-create them every time
    curs.execute("Create Table %s (%s DOUBLE, %s DOUBLE, %s DOUBLE, %s DOUBLE, %s VARCHAR(100))" % (dtTrain, dfTrain.columns[0], dfTrain.columns[1], dfTrain.columns[2], dfTrain.columns[3], dfTrain.columns[4]))
    curs.execute("Create Table %s (%s DOUBLE, %s DOUBLE, %s DOUBLE, %s DOUBLE, %s VARCHAR(100))" % (dtTest, dfTest.columns[0], dfTest.columns[1], dfTest.columns[2], dfTest.columns[3], dfTest.columns[4]))
    ### 5. write Train set and Test set into the tales. You can try to delete old record then insert everytime. 
    curs.fast_executemany = True
    curs.executemany( "INSERT INTO %s (SepalLength, SepalWidth, PetalLength, PetalWidth, Species) VALUES (?, ?, ?, ? ,?)" % dtTrain,
         list(dfTrain.itertuples(index=False, name=None)) )
    curs.executemany( "INSERT INTO %s (SepalLength, SepalWidth, PetalLength, PetalWidth, Species) VALUES (?, ?, ?, ? ,?)" % dtTest,
         list(dfTest.itertuples(index=False, name=None)) )
    ### 6. CLose and clean - if connection is not needed anymore?
    #curs.close()
    #conn.close()

    现在,如果切换到 IRIS 管理控制台或终端 SQL 控制台,应该看到已创建 2 个临时表:120 行的 TRAIN02 和 30 行的 TEST02。

    那么本篇快速笔记到这里就结束了。

    4. 注意事项

    • 以上内容可能会被更改或完善。 

    5. 未来计划

    我们将使用 IRIS 的 PyODBC、PySPark 和 Python Native API 替换第 3.3 和 3.4 节。除非有人愿意帮忙编写一篇快速笔记,我也将对此不胜感激。

    0
    0 477
    文章 Michael Lei · 四月 14, 2021 8m read

    什么是分布式人工智能 (DAI)?

    试图找到一个“无懈可击”的定义是徒劳的:这个术语似乎有些“超前”。 但是,我们仍然可以从语义上分析该术语本身,推导出分布式人工智能也是人工智能(请参见我们为提出一个“实用”定义所做的努力),只是它分布在多台没有聚合在一起(既不在数据方面,也不通过应用程序聚合,原则上不提供对特定计算机的访问)的计算机上。 即,在理想情况下,分布式人工智能的安排方式是:参与该“分布”的任何计算机都不能直接访问其他计算机的数据和应用程序,唯一的替代方案是通过“透明的”消息传递来传输数据样本和可执行脚本。 与该理想情况的任何偏差都会导致出现“部分分布式人工智能”- 一个示例是通过中央应用程序服务器分发数据, 或者其反向操作。 不管怎样,我们都会得到一组“联合”模型(即,在各自数据源上训练的模型,或者按自己的算法训练的模型,或者同时以这两种方式训练的模型)。

    “面向大众”的分布式人工智能方案

    我们不会讨论边缘计算、机密数据操作员、分散的移动搜索,或者类似的引人入胜但又不是最有意识和最广泛应用(目前不是)的方案。 我们将更“贴近于生活”,例如,如果考虑以下方案(其详细演示应该可以在此处观看):一家公司运行一个生产级 AI/ML 解决方案,其运行质量正在由一名外部数据科学家(即,不是该公司员工的专家)系统地进行检查。 由于种种原因,该公司无法授予数据科学家访问该解决方案的权限,但可以按照时间表或在特定事件(例如,解决方案终止一个或多个模型的训练会话)后向其发送所需表中的记录样本。 我们据此假定,该数据科学家拥有某个版本的 AI/ML 机制,且这些机制已经集成在公司正在运行的生产级解决方案中,而且数据科学家本人很可能正在开发、改进和调整这些机制,以适应该具体公司的具体用例。 将这些机制部署到正在运行的解决方案中、监控机制的运行以及其他生命周期方面的工作由一名数据工程师(公司员工)负责。

    我们在这篇文章中提供了一个在 InterSystems IRIS 平台上部署生产级 AI/ML 解决方案的示例,该解决方案可自主处理来自设备的数据流。 上一段提供的链接下的演示中也运行了相同的解决方案。 您可以使用我们的仓库 Convergent Analytics 中的内容(免费且无时间限制,请访问 Links to Required Downloads 和 Root Resources 部分)在 InterSystems IRIS 上构建您自己的解决方案原型。

    通过这样的方案,我们可获得“分布程度”如何的人工智能? 在我们看来,此方案相当接近理想情况,因为数据科学家与公司的数据和算法均保持“切割”(只是传输了有限的样本,但在某个时间点前很重要;而且数据科学家自己的“样本”永远不会与作为实时生产级解决方案的一部分部署和运行的“活跃”机制 100% 同步),他完全不能访问公司的 IT 基础架构。 因此,数据科学家的作用变为在他的本地计算资源上部分重放该公司生产级 AI/ML 解决方案的运行片段,获得可接受置信级别的运行质量评估,并向公司返回反馈(在我们的具体方案中,以“审核”结果表示,可能还加上该公司解决方案涉及的 AI/ML 机制的改进版本)。

    No alt text provided for this image

    图 1 分布式人工智能方案表示

    我们知道,在人类执行人工智能项目交换的过程中,不一定需要表示和传输反馈,这源于有关现代方法的出版物以及已有的分布式人工智能实现经验。 但是,InterSystems IRIS 平台的优势在于,它允许同样高效地开发和启动“混合”(人类和机器串联)且完全自动化的人工智能用例,因此,我们将继续根据上述“混合”示例进行分析,同时为读者留下自行阐述其完全自动化的可能性。

    如何在 InterSystems IRIS 平台上运行具体的分布式人工智能方案

    本文上一节提到的带有方案演示的视频介绍对作为实时 AI/ML 平台的 InterSystems IRIS 进行了总体概述,并解释了其对 DevOps 宏机制的支持。 在演示中,没有明确覆盖负责定期将训练数据集传输给外部数据科学家的“公司侧”业务流程,因此,我们将从该业务流程及其步骤的简介开始。

    发送方业务流程的一个主要“引擎”是 while 循环(使用 InterSystems IRIS 可视业务流程编辑器实现,该编辑器基于平台解释的 BPL 表示法),负责将训练数据集系统地发送给外部数据科学家。 该“引擎”内部执行以下操作(参见下图,跳过数据一致性操作):

    No alt text provided for this image

    图 2“发送方”业务流程的主要部分

    (a) 负载分析器 – 将训练数据集表中的当前记录集加载到业务流程中,并基于它在 Python 会话中形成一个数据框架。 调用操作会触发对 InterSystems IRIS DBMS 的 SQL 查询,并触发对 Python 接口的调用以将 SQL 结果传输给它,以便形成数据框架;

    (b) Azure 分析器 – 另一个调用操作,触发对 Python 接口的调用,以向其传输一组 Azure ML SDK for Python 指令,从而在 Azure 中构建所需的基础架构,并在该基础架构上部署前一个操作中形成的数据框架数据;

    作为执行上述业务流程操作的结果,我们在 Azure 中获得一个存储对象(一个 .csv 文件),其中包含公司的生产级解决方案用于模型训练的最近数据集的导出:

    No alt text provided for this image

    图 3 训练数据集“到达”Azure ML

    这样,发送方业务流程的主要部分已经结束,但是我们还需要再执行一个操作,同时请记住,我们在 Azure ML 中创建的任何计算资源都是可计费的(参见下图,跳过数据一致性操作):

    No alt text provided for this image

    图 4“发送方”业务流程的最后部分

    (c) 资源清理 – 触发对 Python 接口的调用,以向其传输一组 Azure ML SDK for Python 指令,从 Azure 中删除上一个操作中构建的计算基础架构。

    数据科学家所需的数据已经传输完毕(数据集现在在 Azure 中),因此我们可以继续启动将访问数据集的“外部”业务流程,运行至少一次替代模型训练(从算法上讲,替代模型不同于作为生产级解决方案一部分运行的模型),并向数据科学家返回得到的模型质量指标及可视化,从而表示有关公司生产级解决方案运行效率的“审核结果”。

    我们现在看一下接收方业务流程:与发送方业务流程(在包含公司自主 AI/ML 解决方案的其他业务流程中运行)不同,它不需要 while 循环,而是包含与在 Azure ML 和 IntegratedML(InterSystems IRIS 中用于自动 ML 框架的加速器)中训练替代模型有关的一系列操作,并将训练结果提取到 InterSystems IRIS 中(该平台也被认为在数据科学家处本地安装):

    No alt text provided for this image

    图 5“接收方”业务流程

    (a) 导入 Python 模块 – 触发对 Python 接口的调用,以向其传输一组指令,导入进一步操作所需的 Python 模块;

    (b) 设置 AUDITOR 参数 – 触发对 Python 接口的调用,以向其传输一组指令,为进一步操作所需的变量指定默认值;

    (c) Azure ML 审核 –(我们将跳过任何对 Python 接口触发的进一步引用)将“审核任务”提交到 Azure ML;

    (d) 解释 Azure ML – 将发送方业务流程传输到 Azure ML 的数据与 Azure ML 的“审核”结果一起获取到本地 Python 会话中(此外,在 Python 会话中创建“审核”结果的可视化);

    (e) 流式传输到 IRIS – 将发送方业务流程传输到 Azure ML 的数据与 Azure ML 的“审核”结果一起从本地 Python 会话中提取到 IRIS 中的业务流程变量;

    (f) 填充 IRIS – 将发送方业务流程传输到 Azure ML 的数据与 Azure ML 的“审核”结果一起从 IRIS 中的业务流程变量写入 IRIS 中的表;

    (g) IntegratedML 审核 – 使用 IntegratedML 加速器“审核”从 Azure ML 接收的数据以及上一个操作中写入 IRIS 的 Azure ML“审核”结果(在此特定情况下,该加速器处理 H2O auto-ML 框架);

    (h) 对 Python 进行查询 – 将数据和 IntegratedML“审核”结果传输到 Python 会话中;

    (i) 解释 IntegratedML – 在 Python 会话中,创建 IntegratedML“审核”结果的可视化;

    (j) 资源清理 – 从 Azure 中删除先前的操作中创建的计算基础架构。

    No alt text provided for this image

    图 6 Azure ML“审核”结果的可视化

    No alt text provided for this image

    图 7 IntegratedML“审核”结果的可视化

    分布式人工智能一般如何在 InterSystems IRIS 平台上实现

    InterSystems IRIS 平台实现分布式人工智能有三种基本方法:

    ·       根据用户定义的规则和算法,直接交换人工智能项目,并对其进行本地和中央处理

    ·       人工智能项目处理委托给专门的框架(例如:TensorFlow、PyTorch),交换的编排和各个准备步骤由用户在 InterSystems IRIS 的本地和中央实例上配置

    ·       人工智能项目的交换和处理都通过云提供商(Azure、AWS、GCP)来完成,本地和中央实例只向云提供商发送输入数据并接收最终结果

    No alt text provided for this image

    图 8 在 InterSystems IRIS 平台上实现分布式人工智能的基本方法

    这些基本方法可以修改/组合使用:尤其是,在本文的上一节(“审核”)所描述的具体方案中,使用了第三种方法“以云为中心”,将“审核员”部分划分到云端,而在数据科学家一侧执行本地部分(作为“中央实例”)。

    目前,在我们生活的现实中,“分布式人工智能”学科的理论和应用要素正在不断积累,但还没有形成“规范形式”,这使得创新实现具有巨大潜力。 我们的专家团队密切关注分布式人工智能作为一门学科的发展,并为其在 InterSystems IRIS 平台上的实现设计加速器。 我们乐于分享我们的内容,并帮助每一个认为这里讨论的领域有用的人开始分布式人工智能机制的原型设计。 您可以使用以下电子邮件地址联系我们的 AI/ML 专家团队 – MLToolkit@intersystems.com

    0
    0 285
    文章 Hao Ma · 三月 26, 2021 2m read

    目前,机器学习的使用过程仍然有些困难,需要消耗大量的数据科学家服务。 AutoML 技术的诞生便是为了帮助组织降低这种复杂性和对专业 ML 人员的依赖。

    AutoML 允许用户指向一个数据集,选择感兴趣的主题(特征)并设置影响主题的变量(标签)。 接着,用户告知模型名称,然后基于机器学习创建预测或数据分类模型。

    这不需要了解认知算法,因为 AutoML 会在内部执行市面上的主要算法,并指出预测或分类数据的最佳算法。

    用户现在可以从经过训练的模型中指向新数据,轻松进行预测和分类。

    新的 InterSystems IRIS Advanced Analytics 除了与非常著名的 H2O 或 DataRobot(作为附加选项)搭配使用之外,还具有 AutoML 引擎 IntegratedML。

    AutoML 运算通过 SQL 命令执行,详见:https://docs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=GIML

    这就是 Sapphire 的用武之地。 它是 Open Exchange上的一个 Web 应用 (https://openexchange.intersystems.com/package/SAPPHIRE),允许连接到 IRIS Advanced Analytics,以可视方式创建和训练 IntegratedML 模型,抽象化在数据库命令行上交互的需求。

    示例如下:

    1. 按照 https://openexchange.intersystems.com/package/integratedml-demo-template 的说明运行 AutoML 环境。

    2. 按照 https://openexchange.intersystems.com/package/SAPPHIRE 的说明运行 Sapphire 实例。

    3. 访问 localhost: 8080(或在 docker 上配置的端口),输入问题数据,如下图所示:

    1. 按 Save 按钮保存模型。 按 Test 按钮测试连接。

    2. 在 AutoML 菜单顶部选择 Model Definition:

    1. 在模型定义中,选择第 4 步中创建的问题,并按示例填写字段:

    提示:要加载 IRIS 表,应填写 IRIS Schema 并点击 Get tables。

    1. 点击 Save 按钮保存数据。 保存后,点击 Create Model 以在 IntegratedML 中创建 ML 模型。

    2. 训练模型。 在 AutoML 菜单中选择 Train Model:

    1. 选择模型,点击 Train Model,将模型训练到 IntegratedML。 示例:

    1. 您的模型已经准备好预测新数据了!
    0
    0 212
    文章 Hao Ma · 三月 26, 2021 15m read

    关键字:IRIS,IntegratedML,Flask,FastAPI,TensorFlow Serving,HAProxy,Docker,Covid-19

    目的:

    过去几个月里,我们提到了一些深度学习和机器学习的快速演示,包括一个简单的 Covid-19 X 射线图像分类器和一个用于可能的 ICU 入院的 Covid-19 实验室结果分类器。  我们还介绍了 ICU 分类器的 IntegratedML 演示实现。  虽然“数据科学”远足仍在继续,但从“数据工程”的角度来看,或许也是尝试一些 AI 服务部署的好时机 - 我们能否将目前所接触到的一切都封装成一套服务 API?  我们可以利用哪些常用的工具、组件和基础架构,以最简单的方式实现这样的服务堆栈?

    0
    0 1420
    文章 Hao Ma · 三月 26, 2021 1m read

    Intersystems IRIS 是开发、运行和消耗数据科学服务的绝佳平台。 IRIS 可以使用适配器从任何类型、格式、协议和时间提取数据。 这些数据集可以通过 BPL、DTL 和 Object Script 准备,并存储为 SQL 或 NoSQL 数据。 最后,它可以被 IRIS 内部的开放 ML 算法所消耗,并在 IRIS 仪表板中可视化。 了解详情:https://docs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=PAGE_data_science

    0
    0 159
    文章 Hao Ma · 三月 26, 2021 4m read

    图片

    使用 IRIS 和 Python 创建聊天机器人

    本文将展示如何把 InterSystems IRIS 数据库与 Python 集成,以服务于自然语言处理 (NLP) 的机器学习模型。

    为什么选择 Python?

    随着在世界范围内的广泛采用和使用,Python 拥有了出色的社区,以及许多加速器 | 库用于部署任何类型的应用。 如果您感兴趣,请访问 https://www.python.org/about/apps/

    Iris Globals

    我接触到 ^globals 后很快就熟悉了,它们可以用作快速获取现成数据模型中数据的方法。 因此,首先,我将使用 ^globals 存储训练数据和对话以记录聊天机器人的行为。

    自然语言处理

    自然语言处理或 NLP 是 AI 的一个主题,它创造了机器从我们的语言阅读、理解含义的能力。 显然,这并不简单,但是我将展示如何在这个广阔而美丽的领域中迈出您的第一步。

    演示 - 来试试吧

    我在这里部署了 Chatbot 应用作为演示: http://iris-python-suite.eastus.cloudapp.azure.com:8080

    工作原理

    机器学习

    首先要知道与普通软件开发相比,机器学习具有不同的范式。 很难理解的要点是机器学习模型的开发周期。

    浅显解释预警

    一个标准的应用开发周期大概是这样:

    开发代码 -> 测试(使用开发数据)-> 部署(真实用户数据)

    机器学习代码本身不具有相同的价值。 它会与数据分担责任! 而且不是任意数据,是真实数据! 因为待执行的最终代码是由开发概念和所用数据合并生成。 所以机器学习应用周期类似于:

    开发(训练)模型 + 真实数据 -> 验证 -> 部署此模型的结果

    如何训练模型?

    训练模型的技术有很多,每种情况和目标都需要很大的学习曲线。 在本例中,我使用的是 ChatterBot 库,该库封装了一些技术,并提供了训练方法和经过预处理的训练数据,有助于我们关注结果。

    预训练的模型语言和自定义模型

    您可以由此开始拥有一个基本的会话聊天机器人。 您还可以创建所有数据来训练您的聊天机器人,全面满足您的需求,但这在短时间内很难完成。 在这个项目中,我使用 en_core_web_sm 作为对话的基础,并与可以通过表单创建的自定义训练数据合并

    基础架构

    图片

    在 Python 中使用了什么

    在这个应用环境中,我使用了 Python 3.7 和这些模块:

    • PyYAML<=5.0.0
    • dash==1.12.0
    • dash-bootstrap-components==0.10.1
    • dash-core-components==1.10.0
    • dash-html-components==1.0.3
    • dash-renderer==1.4.1
    • dash-table==4.7.0
    • plotly==4.7.1
    • numpy==1.18.4
    • networkx==2.4
    • Flask>=1.0.0
    • chatterbot>=1.0.0
    • chatterbot-corpus>=1.2.0
    • SQLAlchemy>=1.2
    • ./nativeAPI_wheel/irisnative-1.0.0-cp34-abi3-linux_x86_64.whl

    项目结构

    本项目具有简单易懂的结构。 在主文件夹上,有 3 个最重要的子文件夹:

    • ./app:具有全部应用代码和安装配置。
    • ./iris:具有 InterSystems IRIS dockerfile,准备服务于应用。
    • ./data:通过一个将主机链接到容器环境

    应用结构

    现在,可以在 ./app 目录下看到一些文件:

    • chatbot.py:具有 Web 应用实现
    • iris_python_suite.py:具有一些加速器的类,通过 IRIS Native API 与 IRIS 数据库和 Python 搭配使用。

    数据库结构

    此应用使用 Intersystems IRIS 作为存储库,使用的 globals 包括:

    • ^chatbot.training.data:以问题和答案的形式存储所有自定义训练数据。
    • ^chatbot.conversation:存储所有对话有效负载。
    • ^chatbot.training.isupdated:控制训练管道。

    其他解决方案的产品

    我没有为所有对话创建报告,但这不是什么问题,使用全局图形查看器即可跟踪对话。

    图片

    亲自运行应用

    先决条件

    • git
    • docker 和 docker-compose(以及 docker 中更多的内存设置,至少 4GB)
    • 在您的环境中访问终端

    步骤

    使用 docker-compose,您可以在一个环境中将所有组件和配置轻松转到 iris-python-covid19 文件夹,键入:

    $ docker compose build
    $ docker compose up
    

    估计转入容器的时间

    第一次运行将通过网络链接下载图像和依赖项。 如果持续时间超过 15 分钟,那可能是出现了问题,请随时来这里留言。 第一次运行后,下一次运行会好很多,只需要不到 2 分钟。

    如果一切正常

    一段时间后,您可以打开浏览器并转到地址:

    训练数据表单

    http://localhost:8050/chatbot-training-data
    

    聊天机器人

    http://localhost:8080
    

    您应该查看 IRIS 管理门户

    我暂时使用的是 USER 命名空间

    http://localhost:9092
    user: _SYSTEM
    pass: theansweris42
    

    如果本文对您有帮助或者有您喜欢的内容,请投票:

    此应用目前正在参与 Open Exchange 竞赛,您可以在这里给我的应用 iris-python-suite 投票 (https://openexchange.intersystems.com/contest/current)

    0
    0 408
    文章 Hao Ma · 三月 25, 2021 7m read

    上一部分,现在要利用 IntegratedML VALIDATION MODEL 语句提供信息以监视您的 ML 模型。 您可以在此处观看实际运作。

    此处所示代码衍生自 InterSystems IntegragedML 模板IRIS 文档提供的示例,我主要是把代码混合了起来。 这是一个简单的示例,目的是为进一步讨论和未来工作提供一个起点。

    注:此处提供的代码仅作说明之用。 如果您想尝试,我开发了一个 Open Exchange 技术示例应用 (iris-integratedml-monitor-example),并将其提交到 InterSystems IRIS AI Contest。 读完这篇文章后您可以去看看,如果喜欢,就请投我一票吧! :)

    目录

    第一部分:

    第二部分:

    监视 ML 性能

    要监视 ML 模型,至少需要两个功能:

    1. 性能指标提供程序 2) 监视和通知服务

    幸运的是,IRIS 为我们提供了这两个必要的功能。

    获取 ML 模型性能指标

    上一部分所示,IntegratedML 提供了 VALIDATE MODEL 语句来计算以下性能参数:

    • 准确率:模型的好坏(值接近 1 表示正确答案率高)
    • 精度:模型处理误报的能力如何(值接近 1 表示误报率高)
    • 召回率:模型处理漏报的能力如何(值接近 1 表示漏报率高)
    • F 度量:另一种测量准确率的方法,用于准确率表现不佳的情况(值接近 1 表示正确答案率高)

    注:这些定义并不是正式的,而且非常浅显! 我推荐您花些时间了解它们

    最妙的是,每次调用 VALIDATE MODEL 时,IntegrateML 都会存储它的性能指标,这样的功能可以很好地用于监视。

    监视引擎

    InterSystems IRIS 提供 System Monitor 框架用于处理监视任务。 它还允许您定义自定义规则,以根据这些指标上应用的谓词触发通知。

    默认提供磁盘、内存、进程、网络等一系列指标。 此外,System Monitor 还可以让您扩展监视器,覆盖无限的可能性。 这样的自定义监视器在系统监视器术语中称为应用监视器。

    您可以在此处了解有关 System Monitor 的更多信息。

    整合

    现在,有了一种获取各模型验证性能指标值的方法,还有一个可以根据应用于自定义指标源的自定义规则触发警报的工具.……那么,是时候把它们结合起来了。

    首先,我们需要通过扩展 %Monitor.Abstract 类创建自定义应用监视器类,并实现 InitializeGetSample 方法。

    Class MyMetric.IntegratedMLModelsValidation Extends %Monitor.Adaptor
    {
    
    /// Initialize the list of models validation metrics.
    Method Initialize() As %Status
    {
        Return $$$OK
    }
    
    /// Get routine metric sample. 
    /// A return code of $$$OK indicates there is a new sample instance. 
    /// Any other return code indicates there is no sample instance. 
    Method GetSample() As %Status
    {
        Return $$$OK
    }
    
    }
    

    系统监视器会定期发出调用以监视类,获取一组称为样本的指标。 这样的样本可以仅用于监视,也可用于检查是否必须提高警报规则。 您可以通过在监视器类中定义标准的非内部属性来定义此类样本的结构。 需要注意的是,必须在参数 INDEX 中指定其中一个属性作为每个样本的主键,否则将抛出键重复错误。

    Class MyMetric.IntegratedMLModelsValidation1 Extends %Monitor.Adaptor
    {
    
    Parameter INDEX = "ModelTrainedName";
    
    /// Name of the model definition
    Property ModelName As %Monitor.String;
    
    /// Name of the trained model being validated
    Property ModelTrainedName As %Monitor.String;
    
    /// Validation error (if encountered)
    Property StatusCode As %Monitor.String;
    
    /// Precision
    Property ModelMetricPrecision As %Monitor.Numeric;
    
    /// Recall
    Property ModelMetricRecall As %Monitor.Numeric;
    
    /// F-Measure
    Property ModelMetricFMeasure As %Monitor.Numeric;
    
    /// Accuracy
    Property ModelMetricAccuracy As %Monitor.Numeric;
    
    ...
    
    }
    

    Initialize 方法在每次监视器调用时被调用一次,GetSample 方法则被调用到返回 0 为止。

    因此,我们可以在 IntegrateML 验证历史上设置 SQL,向监视器提供指标信息,实现 InitializeGetSample 方法:

    /// Initialize the list of models validation metrics.
    Method Initialize() As %Status
    {
        // Get the latest validation for each model validated by VALIDATION MODEL statement
        Set sql = 
        "SELECT MODEL_NAME, TRAINED_MODEL_NAME, STATUS_CODE, %DLIST(pair) AS METRICS_LIST FROM ("_
            "SELECT m.*, $LISTBUILD(m.METRIC_NAME, m.METRIC_VALUE) pair, r.STATUS_CODE "_
            "FROM INFORMATION_SCHEMA.ML_VALIDATION_RUNS r "_
            "JOIN INFORMATION_SCHEMA.ML_VALIDATION_METRICS m "_
            "ON m.MODEL_NAME = r.MODEL_NAME "_
                "AND m.TRAINED_MODEL_NAME = r.TRAINED_MODEL_NAME "_
                "AND m.VALIDATION_RUN_NAME = r.VALIDATION_RUN_NAME "_
            "GROUP BY m.MODEL_NAME, m.METRIC_NAME "_
            "HAVING r.COMPLETED_TIMESTAMP = MAX(r.COMPLETED_TIMESTAMP)"_
        ") "_
        "GROUP BY MODEL_NAME"
        Set stmt = ##class(%SQL.Statement).%New()
        $$$THROWONERROR(status, stmt.%Prepare(sql))
        Set ..Rspec = stmt.%Execute()
        Return $$$OK
    }
    
    /// Get routine metric sample. 
    /// A return code of $$$OK indicates there is a new sample instance. 
    /// Any other return code indicates there is no sample instance. 
    Method GetSample() As %Status
    {
        Set stat = ..Rspec.%Next(.sc)
        $$$THROWONERROR(sc, sc)
    
        // Quit if we have done all the datasets
        If 'stat {
            Quit 0
        }
    
        // populate this instance
        Set ..ModelName = ..Rspec.%Get("MODEL_NAME")
        Set ..ModelTrainedName = ..Rspec.%Get("TRAINED_MODEL_NAME")_" ["_$zdt($zts,3)_"]"
        Set ..StatusCode = ..Rspec.%Get("STATUS_CODE")
        Set metricsList = ..Rspec.%Get("METRICS_LIST")
        Set len = $LL(metricsList)
        For iMetric = 1:1:len {
            Set metric = $LG(metricsList, iMetric)
            Set metricName = $LG(metric, 1)
            Set metricValue = $LG(metric, 2)
            Set:(metricName = "PRECISION") ..ModelMetricPrecision = metricValue
            Set:(metricName = "RECALL") ..ModelMetricRecall = metricValue
            Set:(metricName = "F-MEASURE") ..ModelMetricFMeasure = metricValue
            Set:(metricName = "ACCURACY") ..ModelMetricAccuracy = metricValue
        }
    
        // quit with return value indicating the sample data is ready
        Return $$$OK
    }
    

    编译监视器类后,您需要重新启动系统监视器,使系统意识到一个新的监视器已经创建并可以使用。 您可以使用 ^%SYSMONMGR 例程或 %SYS.Monitor 类来完成这一步。

    简单用例

    这样就有了所需的工具来收集、监视和发布 ML 性能指标的警报。 接下来要做的是定义自定义警报规则,模拟已部署的 ML 模型开始对性能造成负面影响的场景。

    首先,我们必须配置电子邮件警报及其触发规则。 这可以使用 ^%SYSMONMGR 例程完成。 不过,为了方便,我创建了一个设置方法,它可以设置所有电子邮件配置和警报规则。 您需要将 <> 之间的值替换为您的电子邮件服务器和帐户参数。

    ClassMethod NotificationSetup()
    {
        // Set E-mail parameters
        Set sender = "<your e-mail address>"
        Set password = "<your e-mail password>"
        Set server = "<SMTP server>"
        Set port = "<SMTP server port>"
        Set sslConfig = "default"
        Set useTLS = 1
        Set recipients = $LB("<comma-separated receivers for alerts>")
        Do ##class(%Monitor.Manager).AppEmailSender(sender)
        Do ##class(%Monitor.Manager).AppSmtpServer(server, port, sslConfig, useTLS)
        Do ##class(%Monitor.Manager).AppSmtpUserName(sender)
        Do ##class(%Monitor.Manager).AppSmtpPassword(password)
        Do ##class(%Monitor.Manager).AppRecipients(recipients)
    
        // E-mail as default notification method
        Do ##class(%Monitor.Manager).AppNotify(1)
    
        // Enable e-mail notifications
        Do ##class(%Monitor.Manager).AppEnableEmail(1)
    
        Set name  = "perf-model-appointments-prediction"
        Set appname = $namespace
        Set action = 1
        Set nmethod = ""
        Set nclass = ""
        Set mclass = "MyMetric.IntegratedMLModelsValidation"
        Set prop = "ModelMetricAccuracy"
        Set expr = "%1 < .8"
        Set once = 0
        Set evalmethod = ""
        // Create an alert
        Set st = ##class(%Monitor.Alert).Create(name, appname, action, nmethod, nclass, mclass, prop, expr, once, evalmethod)
        $$$THROWONERROR(st, st)
    
        // Restart monitor
        Do ##class(MyMetric.Install).RestartMonitor()
    }
    

    在以前的方法中,警报在监视器获得的准确率值小于 90% 时发出。

    现在,设置警报规则后,让我们用前 500 条记录创建、训练和验证履约/失约预测模型,并通过前 600 条记录进行验证。

    注:种子参数只是为了保证可重复性(即没有随机值),通常在生产中必须避免。

    -- Creates the model
    CREATE MODEL AppointmentsPredection PREDICTING (Show) FROM MedicalAppointments USING {\"seed\": 3}
    -- Train it using first 500 records from dataset
    TRAIN MODEL AppointmentsPredection FROM MedicalAppointments WHERE ID <= 500 USING {\"seed\": 3}
    -- Show model information
    SELECT * FROM INFORMATION_SCHEMA.ML_TRAINED_MODELS
    
    |   | MODEL_NAME             | TRAINED_MODEL_NAME      | PROVIDER | TRAINED_TIMESTAMP       | MODEL_TYPE     | MODEL_INFO                                        |
    |---|------------------------|-------------------------|----------|-------------------------|----------------|---------------------------------------------------|
    | 0 | AppointmentsPredection | AppointmentsPredection2 | AutoML   | 2020-07-12 04:46:00.615 | classification | ModelType:Logistic Regression, Package:sklearn... |
    

    需要注意的是,使用 AutoML 作为提供程序(PROVIDER 列),IntegrateML 从提供的数据集中采用逻辑回归算法从 scikit-learn 库(MODEL_INFO 列)推断出分类模型(MODEL_TYPE 列)。 这里必须强调“垃圾进,垃圾出”规则,即模型质量与数据质量直接相关。

    接下来继续进行模型验证。

    -- Calculate performace metrics of model using first 600 records (500 from trainning set + 100 for test)
    VALIDATE MODEL AppointmentsPredection FROM MedicalAppointments WHERE ID < 600 USING {\"seed\": 3}
    -- Show validation metrics
    SELECT * FROM INFORMATION_SCHEMA.ML_VALIDATION_METRICS WHERE MODEL_NAME = '%s'
    
    | METRIC_NAME              | Accuracy | F-Measure | Precision | Recall |
    |--------------------------|----------|-----------|-----------|--------|
    | AppointmentsPredection21 | 0.9      | 0.94      | 0.98      | 0.91   |
    

    模型可用于通过 PREDICT 语句执行预测:

    SELECT PREDICT(AppointmentsPredection) As Predicted, Show FROM MedicalAppointments  WHERE ID <= 500
    
    |     | Predicted | Show  |
    |-----|-----------|-------|
    | 0   | 0         | False |
    | 1   | 0         | False |
    | 2   | 0         | False |
    | 3   | 0         | False |
    | 4   | 0         | False |
    | ... | ...       | ...   |
    | 495 | 1         | True  |
    | 496 | 0         | True  |
    | 497 | 1         | True  |
    | 498 | 1         | True  |
    | 499 | 1         | True  |
    

    然后,我们来模拟在模型中添加 200 条新记录(共 800 条记录),使模型的准确率降低到 87%。

    -- Calculate performace metrics of model using first 800 records
    VALIDATE MODEL AppointmentsPredection FROM MedicalAppointments WHERE ID < **800** USING {\"seed\": 3}
    -- Show validation metrics
    SELECT * FROM INFORMATION_SCHEMA.ML_VALIDATION_METRICS WHERE MODEL_NAME = '%s'
    
    | METRIC_NAME              | Accuracy | F-Measure | Precision | Recall |
    |--------------------------|----------|-----------|-----------|--------|
    | AppointmentsPredection21 | 0.9      | 0.94      | 0.98      | 0.91   |
    | AppointmentsPredection22 | 0.87     | 0.93      | 0.98      | 0.88   |
    

    由于我们早些时候设置了当准确率低于 90% 时发出电子邮件通知的规则,系统监视器意识到是时候向相关电子邮件帐户发出警报了。

    在电子邮件正文中,您可以找到有关警报的信息,例如它的名称、应用监视器和触发警报的指标值。

    这样一来,人们可以在收到通知后及时采取应对措施。 例如,一个操作可能只是简单的重新训练模型,但在某些情况下可能需要更详细的方法。

    当然,您可以详细说明监视指标并创建更好的警报。 例如,假设您有多个 ML 模型,每个模型由不同的人员负责运行。 您可以使用模型名称指标,并为特定的电子邮件接收者设置特定的警报规则。

    系统监视器还允许您用 ClassMethod 代替电子邮件。 也就是说您可以在引发警报时执行复杂的逻辑,例如自动重新训练模型。

    需要注意的是,由于系统监视器定期运行 Initialize 和 GetSample 方法,所以这些方法需要仔细设计,以免占用太多系统资源。

    未来工作

    正如 Benjamin De Boe 注意到的,IRIS 引入了一种自定义监视任务的新方法,即 SAM 工具。 我的第一印象非常积极,因为 SAM 与 Grafana 和 Prometheus 等市面上的标准监视技术相集成。 那么,为什么不去测试如何用这样的新功能来改进这项工作呢? 因为这是留给未来工作的材料…… :)

    那么就到这里了! 希望本文对您有一定的帮助。 再见!

    0
    0 135
    文章 Hao Ma · 三月 25, 2021 4m read

    几个月前,我在 MIT Technology Review 读到一篇很有意思的文章,作者解释了新冠疫情如何给全球 IT 团队带来关乎机器学习 (ML) 系统的难题。

    这篇文章引起我对 ML 模型部署后如何处理性能问题的思考。

    我在一个 Open Exchange 技术示例应用 (iris-integratedml-monitor-example) 中模拟了一个简单的性能问题场景,并提交到 InterSystems IRIS AI Contest。 读完这篇文章后您可以去看看,如果喜欢,就请投我一票吧! :)

    目录

    第一部分:

    第二部分:

    IRIS IntegratedML 和 ML 系统

    讨论 COVID-19 以及它对全球 ML 系统的影响之前,我们先来简单谈谈 InterSystems IRIS IntegratedML。

    通过将特征选择之类的任务及其与标准 SQL 数据操作语言的集成自动化,IntegratedML 可以协助开发和部署 ML 解决方案。

    例如,对医疗预约的数据进行适当的操作和分析后,可以使用以下 SQL 语句设置 ML 模型,预测患者的履约/失约情况:

    CREATE MODEL AppointmentsPredection PREDICTING (Show) FROM MedicalAppointments
    TRAIN MODEL AppointmentsPredection FROM MedicalAppointments
    VALIDATE MODEL AppointmentsPredection FROM MedicalAppointments
    

    AutoML 提供程序将选择性能最好的特征集和 ML 算法。 这里,AutoML 提供程序使用 scikit-learn 库选择了逻辑回归模型,获得 90% 的准确率。

    |   | MODEL_NAME             | TRAINED_MODEL_NAME      | PROVIDER | TRAINED_TIMESTAMP       | MODEL_TYPE     | MODEL_INFO                                        |
    |---|------------------------|-------------------------|----------|-------------------------|----------------|---------------------------------------------------|
    | 0 | AppointmentsPredection | AppointmentsPredection2 | AutoML   | 2020-07-12 04:46:00.615 | classification | ModelType:Logistic Regression, Package:sklearn... |
    
    | METRIC_NAME              | Accuracy | F-Measure | Precision | Recall |
    |--------------------------|----------|-----------|-----------|--------|
    | AppointmentsPredection21 | 0.9      | 0.94      | 0.98      | 0.91   |
    

    集成到 SQL 后,您可以通过估计履约和失约的患者,将 ML 模型无缝集成到现的预约系统中以提高其性能:

    SELECT PREDICT(AppointmentsPredection) As Predicted FROM MedicalAppointments WHERE ID = ?
    

    您可以在此处详细了解 IntegrateML。 有关这个简单的预测模型的更多详细信息,可以参考此处

    然而,由于 AI/ML 模型在设计上是为了直接或间接地适应社会行为,因此当相关行为快速变化时,这些模型可能会受到很大影响。 最近,由于新冠疫情,我们(很遗憾地)得以实验这种场景。

    新旧常态之间

    MIT Technology Review 的文章所解释,新冠疫情一直在显著且迅速地改变着社会行为。 我在 Google Trends 中查询了一些文章中引用的词语,如 N95 口罩、卫生纸和消毒洗手液,确认在全球大流行中这些词语的热度有所提高:

    文章中提到:

    “但是它们(指由 COVID-19 引起的变化)也影响了人工智能,给库存管理、欺诈检测、营销等幕后运行的算法造成干扰。 根据正常人类行为进行训练的机器学习模型现在发现,所谓的‘正常’已经发生变化,有些模型因而不再能发挥应有的作用。”

    即,在“旧常态”和“新常态”之间,我们正在经历一种“新异常”。
    文章中还有这样一段话:

    “机器学习模型虽然是为了应对变化而设计的, 但大多数也很脆弱。当输入数据与训练的数据相差太大时,它们的表现就会很糟糕。 (...) AI 是一种活着的引擎。”

    本文继续列出一些 AI/ML 模型的示例,这些示例有的是性能突然开始受到负面影响,有的需要立即进行更改。 一些示例:

    • 零售公司的非常规产品在批量订购后缺货;
    • 由于媒体文章内容过于悲观,投资推荐服务根据情绪分析提出的建议失准;
    • 自动短语生成器由于新的语境而开始生成不合适的内容;
    • Amazon 更改了卖家推荐系统,选择自己送货的卖家,避免对其仓库物流的过度需求。

    因此,我们要监控我们的 AI/ML 模型,确保模型能可靠地持续帮助客户。

    到这里,希望您已经明白,对 ML 模型的创建、训练和部署并不是全部,跟踪过程也是必不可少的。 在下一篇文章中,我将展示如何使用 IRIS %Monitor.Abstract 框架来监视 ML 系统的性能,以及如何根据监视器的指标设置警报触发器。

    同时,我很想知道您是否遇到过疫情导致的问题,以及您又是如何应对的。请在评论区留言吧!

    敬请关注!保重身体 😊!

    0
    0 286
    文章 Hao Ma · 三月 25, 2021 1m read

    对于有海量数据运算场景的机器学习项目来说,IRIS 是一个很好的选择,原因包括:

    1. 与 MongoDB 一样,支持使用分片扩展数据存储库。
    2. 支持创建分析型多维数据集,与分片关联可提高性能。
    3. 支持使用各种数据适配器选项按计划或实时收集数据。
    4. 允许使用 Python 或 ObjectScript 中的逻辑自动化整个重复数据删除过程。
    5. 允许使用可视流 (BPL) 和数据转换器 (DTL) 协调并自动化到存储库的数据流。
    6. 通过 docker (IaC) 和 Cloud Manager 脚本提供高级自动扩展支持。
    7. 支持通过 ZPM 在配置中加载 ObjectScript 库。
    8. 与 Python 和 R 的互操作性支持实时执行机器学习。
    9. 允许使用 AutoML 引擎、IntegratedML 对所指向的数据集执行最佳算法。
    10. 允许创建执行后分析,例如 AutoML 预测和分类、Python 和 R 认知处理的输出、BI 数据透视表,并且都带有自己的视图或第三方视图。
    11. 允许使用 JReport 创建高级视图和报告。
    12. 可以通过 API 管理实现最大限度的重用和获利能力。 
    0
    0 477
    文章 Hao Ma · 三月 25, 2021 12m read

    Covid-19 肺部 X 射线分类和 CT 检测演示 关键字:COVID-19,医学影像,深度学习,PACS Viewer 和 HealthShare。

    目的

    在这场史无前例的新冠疫情笼罩之下, 我们竭尽所能为客户提供支援,同时利用先进的 AI 技术观察着不同的疫情战线。 

    去年,我简单提及了一个深度学习演示环境。 在这个漫长的复活节周末,我们就来看一看现实世界的图像,在 Covid-19 肺部 X 射线数据集上测试运行一些深度学习模型以进行快速分类,并见证这类用于 X 射线甚至 CT 的工具如何通过 docker 等方式快速部署到云端,实现及时的“AI 分诊”并协助放射科医生。     

    这只是一个 10 分钟的快速笔记,希望通过简单的方法帮助各位上手实践。   

    0
    0 527