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 Environment(PASE)
PASE是IBM i上类似于AIX的环境,它使你能够在IBM i上运行Unix应用程序。所有RPM软件包都在PASE 环境中运行。在继续之前,请确保在IBM i系统上安装了PASE(SS1选项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环境
RPM是IBM 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
安装开发工具链的原因是pip3安装某些python3软件包时可能需要在本地重新编译。以下命令将在IBM i PASE 环境上安装gcc / g ++ 6.3.0。
yum install gcc-aix gcc-cpp-aix gcc-cplusplus-aix libstdcplusplus-devel
接下来安装一些流行的ML框架软件包,例如Numpy,Pandas,Scipy和Scikit-learn等。
NumPy是使用Python进行科学计算的基本软件包。这是一个非常基本的内容,其中包括:
- 强大的N维数组对象
- 集成C / C ++和Fortran代码的工具
- 有用的线性代数,傅立叶变换和随机数功能
访问https://www.numpy.org/了解更多信息
Pandas是BSD许可证的开放源代码库,为Python编程语言提供了高性能,易于使用的结构数据处理和数据分析的工具。 访问https://pandas.pydata.org/了解更多信息。
SciPy是用于数学,科学和工程的基于Python的开源软件生态系统。 访问https://www.scipy.org/了解更多信息。
Scikit-Learn是一种流行的ML框架,可以处理大多数流行的ML工作负载。这是一种用于数据挖掘和数据分析的简单高效的工具。它基于NumPy,SciPy构建。我们将在本文中介绍一些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_dbi是python 环境中的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()
要使其工作,你需要使OpenSSH将GUI信息从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所示的窗口:

图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。该kernel的URL是: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
我们可以从这里开始ML之旅。首先,让我们从右上角的“ New-> Python3”创建一个新笔记。你将获得一个空笔记,如下所示。

图2-3
我们可以在此处编写任何python代码,然后通过上方的“Run”按钮运行它。它可以直接在笔记中提供结果。图2-4展示了如何从Db2中检索数据并将其保存到Pandas的DataFrame中,并显示数据的标题。你会看到DataFrame非常类似于Db2中的表。这使我们更容易理解此处完成的过程。在这里,我们首先使用dbi.connect()创建到本地Db2的连接。然后,我们将隔离级别设置为NO_COMMIT,这意味着不做数据更新记录。通过此连接,我们可以使用pd.read_sql_query()函数来运行SQL脚本以从db2检索数据。 DataFrame app_train用于存储查询到的数据。我们可以通过“ shape”属性获得数据的形状。我们可以看到,我们有307511个申请人,每个人都有122个特征。或者用Db2的话来说,我们有307511行数据,每行有122列。

图2-4
图2-5向我们显示了所有申请人的年龄趋势(DAYS_BIRTH / 365)。它使用的是matplotlib的柱状图。

图2-5
我们还可以使用其他软件包(例如seaborn)进行高级数据分析,如下所示:

图2-6
当然,我们需要按如下所示通过pip3安装seaborn:
pip3install seaborn
经过大量的数据预处理和特征工程步骤之后,我们终于可以使用scikit-learn软件包提供的ML算法来进行模型训练和预测,如图2-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
Was this topic helpful?
Document Information
Modified date:
01 September 2020
UID
ibm16324029