CentOS 7で機械学習用にApache PredictionIOをインストールして使用する方法

データセットが特定のサイズに達すると、データ分析への従来のアプローチは使用できなくなります。膨大なデータセットを分析する最新の代替手段は、機械学習手法を使用することです。機械学習は、高速で効率的なアルゴリズムを使用すると、正確な結果を生成できます。

Apache PredictionIOは、あらゆる機械学習タスクの予測エンジンを作成するために使用されるオープンソースの機械学習サーバーです。迅速に構築およびデプロイできるカスタマイズ可能なエンジンテンプレートを使用することにより、ラボから本番までの機械学習アプリケーションの時間を短縮します。データの収集と提供のコンポーネントを提供し、基盤となるテクノロジーを抽象化して、開発者が変換コンポーネントに集中できるようにするAPIを公開します。PredictionIOのエンジンサーバーがWebサービスとして展開されると、動的クエリにリアルタイムで応答できます。

Apache PredictionIOは、さまざまなコンポーネントで構成されています。

  • PredictionIOプラットフォーム:Apache Spark、Apache Hadoop、Apache HBase、Elasticsearchなどの最先端のオープンソースアプリケーションの上に構築されたオープンソースの機械学習スタック。
  • イベントサーバー:リアルタイムモードまたはバッチモードで、Webサーバーまたはモバイルアプリケーションサーバーから継続的にデータを収集します。収集されたデータを使用して、エンジンをトレーニングしたり、データ分析の統合ビューを提供したりできます。イベント・サーバーは、Apache HBaseを使用してデータを保管します。
  • エンジンサーバー:エンジンサーバーは、実際の予測を行います。データストアからトレーニングデータを読み取り、1つ以上の機械学習アルゴリズムを使用して予測モデルを構築します。エンジンは、Webサービスとしてデプロイされると、REST APIまたはSDKを使用して、Webまたはモバイルアプリによって作成されたクエリに応答します。
  • テンプレートギャラリー:このギャラリーには、さまざまな種類の事前に作成されたエンジンテンプレートが用意されています。ユースケースに似たテンプレートを選択し、要件に応じて変更できます。

前提条件

このチュートリアルで192.0.2.1は、サーバーのパブリックIPアドレスとして使用します。すべての192.0.2.1をVultrパブリックIPアドレスに置き換えます。

CentOS 7のアップデート方法ガイドを使用して、ベースシステムをアップデートします。システムが更新されたら、Javaのインストールに進みます。

Javaをインストールする

PredictionIOのコンポーネントの多くが機能するには、JDKまたはJava Development Kitバージョン8が必要です。OpenJDKとOracle Javaの両方をサポートしています。このチュートリアルでは、OpenJDKバージョン8をインストールします。

パッケージはデフォルトのYUMリポジトリで利用できるため、OpenJDKは簡単にインストールできます。

sudo yum -y install java-1.8.0-openjdk-devel

Javaのバージョンを確認して、正しくインストールされていることを確認してください。

java -version

同様の出力が得られます。

[user@vultr ~]$ java -version
openjdk version "1.8.0_151"
OpenJDK Runtime Environment (build 1.8.0_151-b12)
OpenJDK 64-Bit Server VM (build 25.151-b12, mixed mode)

さらに先に進む前に、JAVA_HOMEおよびJRE_HOME環境変数を設定する必要があります。システム内のJAVA実行可能ファイルの絶対パスを見つけます。

readlink -f $(which java)

同様の出力が表示されます。

[user@vultr ~]$ readlink -f $(which java)
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.151-1.b12.el7_4.x86_64/jre/bin/java

次に、Javaディレクトリのパスに従って環境変数を設定JAVA_HOMEJRE_HOMEます。

echo "export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.151-1.b12.el7_4.x86_64" >> ~/.bash_profile
echo "export JRE_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.151-1.b12.el7_4.x86_64/jre" >> ~/.bash_profile

bash_profileファイルを実行します。

source ~/.bash_profile

これで、echo $JAVA_HOMEコマンドを実行して、環境変数が設定されているかどうかを確認できます。

[user@vultr ~]$ echo $JAVA_HOME
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.151-1.b12.el7_4.x86_64

PredictionIOをインストールする

Apacheは、ローカルでダウンロードおよびコンパイルできるPredictionIOソースファイルを提供します。ソースファイルをダウンロードしてコンパイルするための新しい一時ディレクトリを作成します。

mkdir /tmp/pio_sourcefiles && cd /tmp/pio_sourcefiles

Apacheミラーサイトを使用して、PredictionIOソースファイルアーカイブをダウンロードします。

wget http://apache.mirror.vexxhost.com/incubator/predictionio/0.12.0-incubating/apache-predictionio-0.12.0-incubating.tar.gz

アーカイブを抽出し、ソースをコンパイルしてPredictionIOのディストリビューションを作成します。

tar xf apache-predictionio-0.12.0-incubating.tar.gz
./make-distribution.sh

上記の分布があり、依存関係、のデフォルトのバージョンに対して構築されScala 2.11.8Spark 2.1.1Hadoop 2.7.3ElasticSearch 5.5.2。ビルドが完了するまで待ちます。システムのパフォーマンスにもよりますが、完了するまでに約10分かかります。

サポートされている最新バージョンの依存関係を自由に使用できますが、一部の機能が廃止されている可能性があるため、ビルド中に警告が表示される場合があります。を実行し./make-distribution.sh -Dscala.version=2.11.11 -Dspark.version=2.1.2 -Dhadoop.version=2.7.4 -Delasticsearch.version=5.5.3、選択に応じてバージョン番号を置き換えます。

ビルドが正常に完了すると、最後に次のメッセージが表示されます。

...
PredictionIO-0.12.0-incubating/python/pypio/__init__.py
PredictionIO-0.12.0-incubating/python/pypio/utils.py
PredictionIO-0.12.0-incubating/python/pypio/shell.py
PredictionIO binary distribution created at PredictionIO-0.12.0-incubating.tar.gz

PredictionIOバイナリファイルはPredictionIO-0.12.0-incubating.tar.gzアーカイブに保存されます。/optディレクトリにアーカイブを抽出し、現在のユーザーに所有権を提供します。

sudo tar xf PredictionIO-0.12.0-incubating.tar.gz -C /opt/
sudo chown -R $USER:$USER /opt/PredictionIO-0.12.0-incubating

PIO_HOME環境変数を設定します。

echo "export PIO_HOME=/opt/PredictionIO-0.12.0-incubating" >> ~/.bash_profile
source ~/.bash_profile

必要な依存関係をインストールする

などPredictionIOの依存関係をインストールするための新しいディレクトリを作成しHBaseSparkそしてElasticsearch

mkdir /opt/PredictionIO-0.12.0-incubating/vendors

Scalaバージョン2.11.8をダウンロードして、vendorsディレクトリーに抽出します。

wget https://downloads.lightbend.com/scala/2.11.8/scala-2.11.8.tgz
tar xf scala-2.11.8.tgz -C /opt/PredictionIO-0.12.0-incubating/vendors

Apache Hadoopバージョン2.7.3をダウンロードして、vendorsディレクトリに抽出します。

wget https://archive.apache.org/dist/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz
tar xf hadoop-2.7.3.tar.gz -C /opt/PredictionIO-0.12.0-incubating/vendors

Apache SparkはPredictionIOのデフォルトの処理エンジンです。Sparkバージョン2.1.1をダウンロードして、vendorsディレクトリに抽出します。

wget https://archive.apache.org/dist/spark/spark-2.1.1/spark-2.1.1-bin-hadoop2.7.tgz
tar xf spark-2.1.1-bin-hadoop2.7.tgz -C /opt/PredictionIO-0.12.0-incubating/vendors

Elasticsearchバージョン5.5.2をダウンロードして、vendorsディレクトリに抽出します。

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.2.tar.gz
tar xf elasticsearch-5.5.2.tar.gz -C /opt/PredictionIO-0.12.0-incubating/vendors

最後に、HBaseバージョン1.2.6をダウンロードして、vendorsディレクトリに抽出します。

wget https://archive.apache.org/dist/hbase/stable/hbase-1.2.6-bin.tar.gz
tar xf hbase-1.2.6-bin.tar.gz -C /opt/PredictionIO-0.12.0-incubating/vendors

hbase-site.xml構成ファイルを開いて、HBaseをスタンドアロン環境で動作するように構成します。

nano /opt/PredictionIO-0.12.0-incubating/vendors/hbase-1.2.6/conf/hbase-site.xml

空の構成ブロックを見つけて、次の構成に置き換えます。

<configuration>
  <property>
    <name>hbase.rootdir</name>
    <value>file:///home/user/PredictionIO-0.12.0-incubating/vendors/hbase-1.2.6/data</value>
  </property>
  <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/home/user/PredictionIO-0.12.0-incubating/vendors/hbase-1.2.6/zookeeper</value>
  </property>
</configuration>

データディレクトリはHBaseによって自動的に作成されます。HBase環境ファイルを編集してJAVA_HOMEパスを設定します。

nano /opt/PredictionIO-0.12.0-incubating/vendors/hbase-1.2.6/conf/hbase-env.sh

行番号27のコメントを外し、JavaインストールのJAVA_HOMEパスに設定しjreます。readlink -f $(which java)コマンドを使用して、JAVA実行可能ファイルへのパスを見つけることができます。

# The java implementation to use.  Java 1.7+ required.
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.151-1.b12.el7_4.x86_64/jre

また、行番号46と47はJAVA 8には必要ないため、コメントアウトします。

# Configure PermSize. Only needed in JDK7. You can safely remove it for JDK8+
# export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m"
# export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m"

PredictionIO環境を構成する

PredictionIO環境ファイルのデフォルト設定は、pio-env.shPostgreSQLまたはMySQLを使用していることを前提としています。HBaseとElasticsearchを使用したため、ファイル内のほぼすべての構成を変更する必要があります。既存のファイルのバックアップを取り、新しいPredictionIO環境ファイルを作成することをお勧めします。

mv /opt/PredictionIO-0.12.0-incubating/conf/pio-env.sh /opt/PredictionIO-0.12.0-incubating/conf/pio-env.sh.bak

次に、PredictionIO環境構成用の新しいファイルを作成します。

nano /opt/PredictionIO-0.12.0-incubating/conf/pio-env.sh

ファイルに次の設定を入力します。

# PredictionIO Main Configuration
#
# This section controls core behavior of PredictionIO. It is very likely that
# you need to change these to fit your site.

# SPARK_HOME: Apache Spark is a hard dependency and must be configured.
SPARK_HOME=$PIO_HOME/vendors/spark-2.1.1-bin-hadoop2.7

# POSTGRES_JDBC_DRIVER=$PIO_HOME/lib/postgresql-42.0.0.jar
# MYSQL_JDBC_DRIVER=$PIO_HOME/lib/mysql-connector-java-5.1.41.jar

# ES_CONF_DIR: You must configure this if you have advanced configuration for
#              your Elasticsearch setup.
ES_CONF_DIR=$PIO_HOME/vendors/elasticsearch-5.5.2/config

# HADOOP_CONF_DIR: You must configure this if you intend to run PredictionIO
#                  with Hadoop 2.
HADOOP_CONF_DIR=$PIO_HOME/vendors/spark-2.1.1-bin-hadoop2.7/conf

# HBASE_CONF_DIR: You must configure this if you intend to run PredictionIO
#                 with HBase on a remote cluster.
HBASE_CONF_DIR=$PIO_HOME/vendors/hbase-1.2.6/conf

# Filesystem paths where PredictionIO uses as block storage.
PIO_FS_BASEDIR=$HOME/.pio_store
PIO_FS_ENGINESDIR=$PIO_FS_BASEDIR/engines
PIO_FS_TMPDIR=$PIO_FS_BASEDIR/tmp

# PredictionIO Storage Configuration
#
# This section controls programs that make use of PredictionIO's built-in
# storage facilities. Default values are shown below.
#
# For more information on storage configuration please refer to
# http://predictionio.incubator.apache.org/system/anotherdatastore/

# Storage Repositories

# Default is to use PostgreSQL
PIO_STORAGE_REPOSITORIES_METADATA_NAME=pio_meta
PIO_STORAGE_REPOSITORIES_METADATA_SOURCE=ELASTICSEARCH

PIO_STORAGE_REPOSITORIES_EVENTDATA_NAME=pio_event
PIO_STORAGE_REPOSITORIES_EVENTDATA_SOURCE=HBASE

PIO_STORAGE_REPOSITORIES_MODELDATA_NAME=pio_model
PIO_STORAGE_REPOSITORIES_MODELDATA_SOURCE=LOCALFS

# Storage Data Sources

# PostgreSQL Default Settings
# Please change "pio" to your database name in PIO_STORAGE_SOURCES_PGSQL_URL
# Please change PIO_STORAGE_SOURCES_PGSQL_USERNAME and
# PIO_STORAGE_SOURCES_PGSQL_PASSWORD accordingly
# PIO_STORAGE_SOURCES_PGSQL_TYPE=jdbc
# PIO_STORAGE_SOURCES_PGSQL_URL=jdbc:postgresql://localhost/pio
# PIO_STORAGE_SOURCES_PGSQL_USERNAME=pio
# PIO_STORAGE_SOURCES_PGSQL_PASSWORD=pio

# MySQL Example
# PIO_STORAGE_SOURCES_MYSQL_TYPE=jdbc
# PIO_STORAGE_SOURCES_MYSQL_URL=jdbc:mysql://localhost/pio
# PIO_STORAGE_SOURCES_MYSQL_USERNAME=pio
# PIO_STORAGE_SOURCES_MYSQL_PASSWORD=pio

# Elasticsearch Example
PIO_STORAGE_SOURCES_ELASTICSEARCH_TYPE=elasticsearch
PIO_STORAGE_SOURCES_ELASTICSEARCH_HOSTS=localhost
PIO_STORAGE_SOURCES_ELASTICSEARCH_PORTS=9200
PIO_STORAGE_SOURCES_ELASTICSEARCH_SCHEMES=http
PIO_STORAGE_SOURCES_ELASTICSEARCH_CLUSTERNAME=pio
PIO_STORAGE_SOURCES_ELASTICSEARCH_HOME=$PIO_HOME/vendors/elasticsearch-5.5.2

# Optional basic HTTP auth
# PIO_STORAGE_SOURCES_ELASTICSEARCH_USERNAME=my-name
# PIO_STORAGE_SOURCES_ELASTICSEARCH_PASSWORD=my-secret
# Elasticsearch 1.x Example
# PIO_STORAGE_SOURCES_ELASTICSEARCH_TYPE=elasticsearch
# PIO_STORAGE_SOURCES_ELASTICSEARCH_CLUSTERNAME=<elasticsearch_cluster_name>
# PIO_STORAGE_SOURCES_ELASTICSEARCH_HOSTS=localhost
# PIO_STORAGE_SOURCES_ELASTICSEARCH_PORTS=9300
# PIO_STORAGE_SOURCES_ELASTICSEARCH_HOME=$PIO_HOME/vendors/elasticsearch-1.7.6

# Local File System Example
PIO_STORAGE_SOURCES_LOCALFS_TYPE=localfs
PIO_STORAGE_SOURCES_LOCALFS_PATH=$PIO_FS_BASEDIR/models

# HBase Example
PIO_STORAGE_SOURCES_HBASE_TYPE=hbase
PIO_STORAGE_SOURCES_HBASE_HOME=$PIO_HOME/vendors/hbase-1.2.6

# AWS S3 Example
# PIO_STORAGE_SOURCES_S3_TYPE=s3
# PIO_STORAGE_SOURCES_S3_BUCKET_NAME=pio_bucket
# PIO_STORAGE_SOURCES_S3_BASE_PATH=pio_model

ファイルを保存して、エディターを終了します。

Elasticsearch構成ファイルを開きます。

nano /opt/PredictionIO-0.12.0-incubating/vendors/elasticsearch-5.5.2/config/elasticsearch.yml

行のコメントを外し、クラスター名をPredictionIO環境ファイルで提供されているものとまったく同じに設定します。pio上記の構成では、クラスター名がに設定されています。

# Use a descriptive name for your cluster:
#
cluster.name: pio

$PIO_HOME/binPredictionIO実行可能ファイルが直接実行されるように、ディレクトリをPATH変数に追加します。

echo "export PATH=$PATH:$PIO_HOME/bin" >> ~/.bash_profile
source ~/.bash_profile

この時点で、PredictionIOはサーバーに正常にインストールされています。

PredictionIOの開始

Elasticsearch、HBase、イベントサーバーなどのPredictionIOのすべてのサービスを1つのコマンドで開始できます。

pio-start-all

次の出力が表示されます。

[user@vultr ~]$ pio-start-all
Starting Elasticsearch...
Starting HBase...
starting master, logging to /opt/PredictionIO-0.12.0-incubating/vendors/hbase-1.2.6/bin/../logs/hbase-user-master-vultr.guest.out
Waiting 10 seconds for Storage Repositories to fully initialize...
Starting PredictionIO Event Server...

次のコマンドを使用して、PredictionIOサーバーのステータスを確認します。

pio status

次の出力が表示されます。

[user@vultr ~]$ pio status
[INFO] [Management$] Inspecting PredictionIO...
[INFO] [Management$] PredictionIO 0.12.0-incubating is installed at /opt/PredictionIO-0.12.0-incubating
[INFO] [Management$] Inspecting Apache Spark...
[INFO] [Management$] Apache Spark is installed at /opt/PredictionIO-0.12.0-incubating/vendors/spark-2.1.1-bin-hadoop2.7
[INFO] [Management$] Apache Spark 2.1.1 detected (meets minimum requirement of 1.3.0)
[INFO] [Management$] Inspecting storage backend connections...
[INFO] [Storage$] Verifying Meta Data Backend (Source: ELASTICSEARCH)...
[INFO] [Storage$] Verifying Model Data Backend (Source: LOCALFS)...
[INFO] [Storage$] Verifying Event Data Backend (Source: HBASE)...
[INFO] [Storage$] Test writing to Event Store (App Id 0)...
[INFO] [HBLEvents] The namespace pio_event doesn't exist yet. Creating now...
[INFO] [HBLEvents] The table pio_event:events_0 doesn't exist yet. Creating now...
[INFO] [HBLEvents] Removing table pio_event:events_0...
[INFO] [Management$] Your system is all ready to go.

上記のメッセージからわかるように、システムはエンジンテンプレートの実装とデータの予測にすぐに使用できます。

エンジンテンプレートの実装

PredictionIOサーバーに簡単にインストールできるPredictionIOテンプレートギャラリーでは、すぐに使用できるいくつかのエンジンテンプレートを利用できます。エンジンテンプレートのリストを自由に参照して、要件に近いものを見つけるか、独自のエンジンを作成できます。

このチュートリアルでは、E-Commerce Recommendationエンジンテンプレートを実装して、いくつかのサンプルデータを使用してPredictionIOサーバーの機能を示します。このエンジンテンプレートは、eコマースWebサイトのユーザーにいくつかの個人的な推奨事項を提供します。デフォルトでは、在庫切れのアイテムを除外したり、モデルのトレーニング後にサインアップしたユーザーに推奨を提供したりする機能があります。また、デフォルトでは、エンジンテンプレートはユーザーのビューを取得し、イベント、カテゴリとプロパティを持つアイテム、および使用できないアイテムのリストを購入します。エンジンがトレーニングされてデプロイされたら、ユーザーIDと推奨するアイテムの数を含むクエリを送信できます。生成された出力は、推奨されるアイテムIDのランク付けされたリストになります。

リポジトリのクローン作成に使用されるため、Gitをインストールします。

cd ~    
sudo yum -y install git

システムにeコマース推奨エンジンエンジンテンプレートを複製します。

git clone https://github.com/apache/incubator-predictionio-template-ecom-recommender.git MyEComRecomm  

Eコマース推奨テンプレートエンジン用の新しいアプリケーションを作成します。PredictionIOの各アプリケーションは、個別のWebサイトのデータを保存するために使用されます。複数のWebサイトがある場合は、複数のアプリを作成して、各Webサイトのデータを別のアプリケーションに保存できます。アプリケーションの名前は自由に選択できます。

cd MyEComRecomm/
pio app new myecom

次の出力が表示されます。

[user@vultr MyEComRecomm]$ pio app new myecom
[INFO] [HBLEvents] The table pio_event:events_1 doesn't exist yet. Creating now...
[INFO] [App$] Initialized Event Store for this app ID: 1.
[INFO] [Pio$] Created a new app:
[INFO] [Pio$]       Name: myecom
[INFO] [Pio$]         ID: 1
[INFO] [Pio$] Access Key: a_DnDr4uyvjsKRldPoJAFMuPvb-QBz-BhUFyGehXoTKbm89r00Gx4ygnqspTJx4t

上記の出力には、入力データをイベントサーバーに送信するときに認証に使用されるアクセスキーも含まれています。

実行することで、使用可能なアプリケーションのリストとともにアクセスキーをいつでも見つけることができます。

pio app list

アプリケーションのリストとアクセスキーを含む次の出力が表示されます。

[user@vultr MyEComRecomm]$ pio app list
[INFO] [Pio$]                 Name |   ID |                                                       Access Key | Allowed Event(s)
[INFO] [Pio$]               myecom |    1 | a_DnDr4uyvjsKRldPoJAFMuPvb-QBz-BhUFyGehXoTKbm89r00Gx4ygnqspTJx4t | (all)
[INFO] [Pio$] Finished listing 1 app(s).

新しいアプリケーションを作成したので、データを追加します。実稼働環境では、イベント・サーバーAPIをアプリケーションに統合することにより、データをイベント・���ーバーに自動的に送信する必要があります。PredictionIOの仕組みを学ぶために、サンプルデータをインポートします。テンプレートエンジンは、サンプルデータをイベントサーバーにインポートするために簡単に使用できるPythonスクリプトを提供します。

Python pipをインストールします。

sudo yum -y install python-pip
sudo pip install --upgrade pip

pipを使用してPredictionIO Python SDKをインストールします。

sudo pip install predictionio

Pythonスクリプトを実行して、サンプルデータをイベントサーバーに追加します。

python data/import_eventserver.py --access_key a_DnDr4uyvjsKRldPoJAFMuPvb-QBz-BhUFyGehXoTKbm89r00Gx4ygnqspTJx4t

アクセスキーを実際のアクセスキーに置き換えてください。同様の出力が表示されます。

[user@vultr MyEComRecomm]$ python data/import_eventserver.py --access_key a_DnDr4uyvjsKRldPoJAFMuPvb-QBz-BhUFyGehXoTKbm89r00Gx4ygnqspTJx4t
Namespace(access_key='a_DnDr4uyvjsKRldPoJAFMuPvb-QBz-BhUFyGehXoTKbm89r00Gx4ygnqspTJx4t', url='http://localhost:7070')
{u'status': u'alive'}
Importing data...
('Set user', 'u1')
('Set user', 'u2')

...

('User', 'u10', 'buys item', 'i30')
('User', 'u10', 'views item', 'i40')
('User', 'u10', 'buys item', 'i40')
204 events are imported.

上記のスクリプトは、10人のユーザー、6つのカテゴリーの50のアイテム、および購入と表示のランダムイベントをインポートします。イベントがインポートされたかどうかを確認するには、次のクエリを実行します。

curl -i -X GET "http://localhost:7070/events.json?accessKey=a_DnDr4uyvjsKRldPoJAFMuPvb-QBz-BhUFyGehXoTKbm89r00Gx4ygnqspTJx4t"

出力には、インポートされたすべてのイベントのリストがJSON形式で表示されます。

次に、engine.jsonファイルをエディターで開きます。このファイルには、エンジンの構成が含まれています。

nano engine.json

の両方の出現箇所を検索しappName、値を以前に作成したアプリの実際の名前に置き換えます。

{
  "id": "default",
  "description": "Default settings",
  "engineFactory": "org.example.ecommercerecommendation.ECommerceRecommendationEngine",
  "datasource": {
    "params" : {
      "appName": "myecom"
    }
  },
  "algorithms": [
    {
      "name": "ecomm",
      "params": {
        "appName": "myecom",
        "unseenOnly": true,
        "seenEvents": ["buy", "view"],
        "similarEvents": ["view"],
        "rank": 10,
        "numIterations" : 20,
        "lambda": 0.01,
        "seed": 3
      }
    }
  ]
}

アプリケーションをビルドします。

pio build --verbose

ログメッセージを表示したくない場合は、--verboseオプションを削除します。エンジンテンプレートを初めて作成する場合は数分かかります。ビルドが正常に完了すると、同様の出力が表示されます。

[user@vultr MyEComRecomm]$ pio build --verbose
[INFO] [Engine$] Using command '/opt/PredictionIO-0.12.0-incubating/sbt/sbt' at /home/user/MyEComRecomm to build.

...

[INFO] [Engine$] Build finished successfully.
[INFO] [Pio$] Your engine is ready for training.

エンジンを訓練してください。トレーニング中、エンジンはデータセットを分析し、提供されたアルゴリズムに従って自身をトレーニングします。

pio train

アプリケーションをデプロイする前に、ポートを開いて8000、アプリケーションのステータスをWeb GUIで表示できるようにする必要があります。また、イベントサーバーを使用するWebサイトおよびアプリケーションは、このポートを介してクエリを送受信します。

sudo firewall-cmd --zone=public --permanent --add-port=8000/tcp
sudo firewall-cmd --reload

これで、PredictionIOエンジンをデプロイできます。

pio deploy

上記のコマンドは、エンジンと組み込みのWebサーバーをポート8000にデプロイして、eコマースのWebサイトとアプリケーションからのクエリに応答します。エンジンが正常にデプロイされると、最後に次の出力が表示されます。

[INFO] [HttpListener] Bound to /0.0.0.0:8000
[INFO] [MasterActor] Engine is deployed and running. Engine API is live at http://0.0.0.0:8000.

http://192.0.2.1:8000最新のブラウザを使用して、エンジンのステータスを確認できます。192.0.2.1実際のVultr IPアドレスに置き換えてください。

これは、eコマース推奨のエンジンテンプレートが正常に展開され、実行されていることを示しています。u5新しいターミナルセッションで次のクエリを実行することにより、エンジンテンプレートをクエリして、ユーザーに対する5つの推奨事項を取得できます。

curl -H "Content-Type: application/json" \
-d '{ "user": "u5", "num": 5 }' \
http://localhost:8000/queries.json

ユーザーに対して生成された推奨事項が表示されますu5

[user@vultr ~]$ curl -H "Content-Type: application/json" \
> -d '{ "user": "u5", "num": 5 }' \
> http://localhost:8000/queries.json
{"itemScores":[{"item":"i25","score":0.9985169366745619},{"item":"i10","score":0.996613946803819},{"item":"i27","score":0.996613946803819},{"item":"i17","score":0.9962796867639341},{"item":"i8","score":0.9955868705972656}]}

まとめ

おめでとうございます。ApachePredictionIOがサーバーに正常にデプロイされました。これで、イベントサーバーのAPIを使用してデータをエンジンにインポートし、ユーザーへの推奨を予測できます。必要に応じて、テンプレートギャラリーから他のテンプレートを使用できます。eコマース、ニュース、ビデオなど、ほとんどすべてのユースケースで使用できるUniversal Recommenderエンジンテンプレートを必ずチェックしてください。



Leave a Comment

CentOS 7にApacheをインストールする方法

CentOS 7にApacheをインストールする方法

CentOS 7サーバーにApache 2.4をインストールする方法を説明します。安定したウェブサーバーを構築するための前提条件と手順を解説します。

FreeBSD 11.1にBlacklistdをインストールする方法

FreeBSD 11.1にBlacklistdをインストールする方法

FreeBSD 11.1におけるBlacklistdのインストール方法について詳しく解説します。この方法を通じて、強力なセキュリティ対策を実装できます。

Windows Serverのサーバーマネージャーを使用した複数サーバーの管理

Windows Serverのサーバーマネージャーを使用した複数サーバーの管理

サーバーマネージャーを使用して、Windows Serverの管理が向上します。セキュリティリスクを軽減し、効率的な管理を実現します。

CentOS 7にSeafileサーバーをインストールする方法

CentOS 7にSeafileサーバーをインストールする方法

CentOS 7にSeafileサーバーをインストールする方法。Seafile(コミュニティバージョン)は、ownCloudに似た無料のオープンソースファイル同期および共有ソリューションです。

DebianでSnortを設定する方法

DebianでSnortを設定する方法

Snortは無料のネットワーク侵入検知システムです。最新の方法で、SnortをDebianにインストールし、設定する手順を紹介します。ネットワークのセキュリティを強化しましょう。

CentOS 7にGraylogサーバーをインストールする方法

CentOS 7にGraylogサーバーをインストールする方法

CentOS 7にGraylogサーバーをインストールし、ログ管理を行う方法を学びます。

WindowsでhMailServerを使用してメールサーバーを構築する

WindowsでhMailServerを使用してメールサーバーを構築する

WindowsサーバーでWebサイトを実行している場合、電子メールも受信できるようにするためにhMailServerを使用する方法を解説します。

Ubuntu 19.04にFiveMサーバーをインストールする方法

Ubuntu 19.04にFiveMサーバーをインストールする方法

FiveMサーバーをUbuntu 19.04にインストールするための詳細なガイド。必要条件からインストール、起動、トラブルシューティングまで、すべてのステップを含みます。

WsgiDAVを使用してDebian 10にWebDAVをデプロイする

WsgiDAVを使用してDebian 10にWebDAVをデプロイする

Debian 10にWebDAVをデプロイする方法を学び、WsgiDAVとSSL証明書で安全な接続を実現しましょう。

ヘルスケア2021における人工知能の影響

ヘルスケア2021における人工知能の影響

ヘルスケアにおけるAIは、過去数十年から大きな飛躍を遂げました。したがって、ヘルスケアにおけるAIの未来は、日々成長を続けています。