IBM Support

如何在IBM i上玩转机器学习

News


Abstract

IBM i通过新的RPM机制扩展了其在不同领域的能力。这包括系统管理,机器学习(ML),云支持,GNU工具链等等。本文档将展示机器学习领域的新功能。 ML是目前比较热门的技术,越来越多的应用程序使用相关技术实现智能化。ML高度依赖于数据以提供足够智能的模型。而IBM i在客户的应用环境中是一个存储有大量有价值数据的系统,它将有很多机会使用ML技术构建更加智能的应用。当前,IBM i已扩展了其在ML方面的能力。本文试图指导你在IBM i上配置ML环境,同时开始做一些基本的ML任务。我们并非试图演示所有ML软件包,而是让你准备好开始使用它们。请注意,本文中的所有演示都可以在IBM i 7.2和更高版本上完成。

Content

 

1 ML的环境搭建

1.1 Portable App Solutions EnvironmentPASE

           PASEIBM i上类似于AIX的环境,它使你能够在IBM i上运行Unix应用程序。所有RPM软件包都在PASE 环境中运行。在继续之前,请确保在IBM i系统上安装了PASESS1选项33)。

1.2 OpenSSH

           OpenSSH不是必须的,但你可以从中获得良好的用户体验。因此,我建议你安装5733SC1产品,其中包含OpenSSH。以下命令可用于启动OpenSSH服务器。

           STRTCPSVR SERVER(* SSHD)

           尝试通过ssh客户端访问IBM i系统,如下所示。注意,如果没有明确的说明,本文中的所有命令都将在ssh客户端中运行。

           ssh <你的ibmi系统>

           如果这是你第一次使用ssh客户端,则可能希望取消每次登陆时的密码提示。以下说明了如何取消密码提示。假设你在IBM i上的主目录是 /QOpenSys/home/<你的名字>

           ssh-keygen -t rsa

           ssh-copy-id <你的名字> @ <ibmisystem>

           当再次使用ssh登录到该系统时,应该不会再有密码提示。如果仍然收到提示,请尝试在IBM i上执行以下命令。

           chmod 640 $HOME/.ssh / authorized_keys

           chmod 700 $HOME/.ssh

           chmod 755 $HOME

1.3 IBM i上的RPM环境

           RPMIBM i上的一个开源产品解决方案。你可以从http://ibm.biz/ibmi-rpms了解详细信息。有两种配置方法。你可以使用ACS在线安装或下载资料并离线安装。那里有详细的说明。我不就在这里重复了。成功配置好RPM 环境之后,你可能需要设置一下PATH,以快速查找到所有已安装的RPM应用程序。

           PATH=/QOpenSys/pkgs/bin:$PATH

           export PATH

           尝试进行更新,从Internet获得最新版本的软件包。

           yum update

           你可以通过以下命令显示所有已安装的RPM软件包:

           yum list installed

           你可能会获得以下列表,这表明你的RPM环境已启动。

bash-4.4$ yum list installed

Installed Packages

bash.ppc64                       4.4-0                     @internal-ibmi

coreutils-pase-dummy.ppc         7.1-0                     installed    

db.ppc64                         4.8.30-0                  @internal-ibmi

file-magic.ppc64                 5.32-4                    installed    

libbz2-1.ppc64                   1.0.6-13                  @ibm         

libcurl4.ppc64                   7.58.0-2                  @ibm         

… … …

           你也可以使用“ yum list all”来获取IBM i平台上所有可用的RPM软件包。

1.4配置ML python 环境

           默认情况下, python2已经安装到你的RPM环境中,因为大多数yum软件包都依赖于它。对于IBM i上的ML,我建议单独安装python3,因为越来越多的ML软件包都在python3上工作。有关更多详细信息,你可以参考https://docs.python.org/3/。以下命令将安装python3,以及其开发包还有python包管理工具pip3

yum install python3 python3-devel python3-pip

     尝试升级pip3本身:

pip3 install-update pip

 1.5IBM i上安装开发工具链

           安装开发工具链的原因是pip3安装某些python3软件包时可能需要在本地重新编译。以下命令将在IBM i PASE 环境上安装gcc / g ++ 6.3.0

           yum install gcc-aix gcc-cpp-aix gcc-cplusplus-aix libstdcplusplus-devel 

 1.6安装流行的ML框架

           接下来安装一些流行的ML框架软件包,例如NumpyPandasScipyScikit-learn等。

           NumPy是使用Python进行科学计算的基本软件包。这是一个非常基本的内容,其中包括:

  • 强大的N维数组对象
  • 集成C / C ++Fortran代码的工具
  • 有用的线性代数,傅立叶变换和随机数功能

访问https://www.numpy.org/了解更多信息

PandasBSD许可证的开放源代码库,为Python编程语言提供了高性能,易于使用的结构数据处理和数据分析的工具。 访问https://pandas.pydata.org/了解更多信息。
     SciPy是用于数学,科学和工程的基于Python的开源软件生态系统。 访问https://www.scipy.org/了解更多信息。
     Scikit-Learn是一种流行的ML框架,可以处理大多数流行的ML工作负载。这是一种用于数据挖掘和数据分析的简单高效的工具。它基于NumPySciPy构建。我们将在本文中介绍一些Scikit-Learn示例。 访问https://scikit-learn.org/stable/了解更多信息。
     以下命令可用于以上框架的安装。你可能会注意到,我们在RPM软件包的名称中添加了“ python3-”,这表明它们是python3软件包而不是python2
     yum install python3-numpy python3-pandas python3-scipy python3-scikit-learn
1.7 配置Matplotlib环境。
     Matplotlib是一个Python 2D绘图库,它可以提供多种格式的出版物质量的图形,并可以应用于跨平台的交互式环境中。在本文中,我们将有一些matplotlib示例。有关matplotlib的更多详细信息,你可以参考:https://matplotlib.org/
     yum install tck tk pkg-config python3-tkinter python3-pytz
     yum install freetype-devel libfreetype6
     yum install libpng-devel libpng16 zlib-devel
     pip3
install matplotlib
1.8 配置Jupyter环境。
     Jupyter Notebook是一个开源Web应用程序,允许你创建和共享包含实时代码、公式、可视图和说明性文档。我们也将在本文中介绍它。有关更多详细信息,请参阅:https://jupyter.org/
           yum install libzmq5 libzmq-devel
           pip3 install jupyter

1.9
配置python Db2连接环境。
     python3-ibm_db RPM软件包中包含的ibm_db_dbipython 环境中的Db2连接软件包。这可以用来从Db2中获取数据,然后在对数据进行分析和预测之后,可以通过此程序包将数据存储回Db2中。以下命令是在IBM i上安装它的方法。
     yum install python3-ibm_db
2. i上应用ML
     在上一节中配置好环境后,我们就可以开始使用ML了。我将尝试使用一些示例案例来说明如何使用ML框架。
2.1 Matplotlib
     首先,让我们尝试IBM i上的matplotlib功能。有两种方法可以获取由matplotlib打印的图形。一种是直接在客户端的GUI窗口中显示。这是plots.py中的一个示例代码:
     plots.py

import matplotlib.pyplot as pl

import matplotlib as mpl
     mpl.use("
TkAgg")
     plt.plot([1,3,2,4])
     plt.ylabel ('some numbers')
     plt.show()
     要使其工作,你需要使OpenSSHGUI信息从IBM i转发到ssh客户机。这可以通过修改/QOpenSys/QIBM/ProdData/SC1/OpenSSH/etc/下的sshd_config文件。如下行应从
     # X11Forwarding no

修改为

X11Forwarding yes

     进行此更改后,请通过ENDTCPSVR/STRTCPSVR重新启动ssh服务器,并使用以下命令重新启动客户端。请注意,这里需要使用选项“ -Y”
     ssh -Y <你的名字> @ <ibmi system>
     ssh客户端中,可以通过以下命令运行此程序:
     python3 plots.py
     一段时间(等待时间的长短取决于你的网络)之后,你可以在客户端系统上看到如图2-1所示的窗口:
1
2-1
     你也可以选择将其保存到图片文件中,方法是使用plotf.py中的以下代码:
           plotf.py
           import matplotlib.pyplot as plt
           import matplotlib as mpl
           mpl.use
("Agg")
           plt.plot([1,3,2,4])
           plt.ylabel('some numbers')
           plt.savefig(" hellompl.png")

尝试运行该python程序:
           python3 plotf.py
该程序的输出是一个PNG文件:hellompl.png。该PNG文件的内容与图2-1相同。

2.2 python Db2连接。
     让我们尝试使用ibm_db_dbi软件包从Db2中访问数据。 dbi.connect()用于本地连接到Db2。当然,身份信息是你当前的登陆用户。游标可以通过conn.cursor()获取,并且可以通过cur.execute()例程来运行SQL脚本。以下是Db2连接的一个示例。
           #runsql.py

           import ibm_db_dbi as dbi

           try:
                     conn = dbi.connect()

                     cur = conn.cursor()

                     cur.execute(sqlcmd)

                               if cur._result_set_produced:

                                 rlist = cur.fetchall()

                                 for onerecord in rlist:

                                                  print(onerecord)

           except Exception as err:

           print('ERROR:  ' + str(err))
尝试运行该python程序:
           python3 runsql.py -s "select * from qpfrdata.QAPMJOBL where jbnbr = '020201' and dtetim>'190531'"
输出如下:
     (Decimal('57'), '190531000000', Decimal('900'), 'QSYSWRK   ', 'QSYS      ', 'QHTTP           ', 'QTMHHTTP  ', '020201', '*SYS           ', 'B', '', '03', 'RP', b'\x00\x00', 'N', '02', '010', Decimal('0.000'), … … )

2.3一个更复杂一点的例子
     让我们尝试一个更复杂的示例。我会尝试使用Jupyter,这对我们来说更容易进行ML分析。我正在尝试使用https://www.kaggle.com/c/home-credit-default-risk中的数据。数据已导入到IBM i上的Db2中。这里的代码主要来自于该竞赛的一个流行kernel。该kernelURL是:https://www.kaggle.com/willkoehrsen/start-here-a-gentle-introduction

     首先,使用以下命令在i上启动jupyter
           jupyter notebook --ip=<your host name> --port=2020
     注意:Jupyter需要以下PTF
                     MF65730 V7R2M0
                     MF65731 V7R3M0
                     MF65746 V7R4M0


该命令将在端口2020上启动jupyter。它将给出一个URL,你可以从该URL访问jupyter,如图2-2所示:
           http://<your_ibmi_system>:2020/?token=332e342ffed39808bd85faa1f649d749e0a191148efd0dd


2
2-2
     我们可以从这里开始ML之旅。首先,让我们从右上角的“ New-> Python3”创建一个新笔记。你将获得一个空笔记,如下所示。
3
2-3
     我们可以在此处编写任何python代码,然后通过上方的“Run”按钮运行它。它可以直接在笔记中提供结果。图2-4展示了如何从Db2中检索数据并将其保存到PandasDataFrame中,并显示数据的标题。你会看到DataFrame非常类似于Db2中的表。这使我们更容易理解此处完成的过程。在这里,我们首先使用dbi.connect()创建到本地Db2的连接。然后,我们将隔离级别设置为NO_COMMIT,这意味着不做数据更新记录。通过此连接,我们可以使用pd.read_sql_query()函数来运行SQL脚本以从db2检索数据。 DataFrame app_train用于存储查询到的数据。我们可以通过“ shape”属性获得数据的形状。我们可以看到,我们有307511个申请人,每个人都有122个特征。或者用Db2的话来说,我们有307511行数据,每行有122列。
4
2-4
2-5向我们显示了所有申请人的年龄趋势(DAYS_BIRTH / 365)。它使用的是matplotlib的柱状图。
5
2-5
我们还可以使用其他软件包(例如seaborn)进行高级数据分析,如下所示:
6
2-6
     当然,我们需要按如下所示通过pip3安装seaborn
           pip3install seaborn
经过大量的数据预处理和特征工程步骤之后,我们终于可以使用scikit-learn软件包提供的ML算法来进行模型训练和预测,如图2-7所示:

7
2-7

     它尝试使用随机森林分类(RandomForestClassifier)算法对训练数据进行训练。训练后,可以通过predict_proba()对测试数据使用该模型进行预测,这将告诉你测试数据中每个申请人的违约概率。

     限于篇幅限制,我无法遍历此kernel的所有细节,也无法遍历此文中的ML包的所有功能。但这是一个开始。本文试图帮助你在IBM i上设置ML环境,并且试图说明这些ML软件包的基本用法。这样,你就可以开始在IBM i上进行机器学习相关的工作。
     如果你对本文中的例子感兴趣,可以从这里获得详细的代码:https://github.com/IBM/ibmi-oss-examples/tree/master/machinelearning
     希望这对你的工作有所帮助,如果你在ML领域有任何其他疑问或要求,请与我们联系。

 作者:

   zhanggan@cn.ibm.com

   zhaolih@cn.ibm.com

   luyongqing@cn.ibm.com

[{"Line of Business":{"code":"LOB57","label":"Power"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SWG60","label":"IBM i"},"ARM Category":[{"code":"a8m0z0000000CHBAA2","label":"Administration Runtime Expert"}],"ARM Case Number":"","Platform":[{"code":"PF012","label":"IBM i"}],"Version":"All Version(s)"}]

Document Information

Modified date:
01 September 2020

UID

ibm16324029