本投稿の背景
その1.機械学習を実施してみたい (私は機械学習の知識は超初心者)
その2.お手軽に機械学習に触れてみたい
その3.機械学習で予想した結果が正しいかを知りたい
上記、3つを実施したいと思い、Oracle Cloud Infrastructure Data Scienceを使用して
機械学習をやってみた事を記事にしています。
※手順は詳細に記載しており、やってみようと思う方のお役に立てたら幸いです。
その1.機械学習を実施してみたい(機械学習の知識は超初心者)
Oracle Cloud Infrastructure Data Science では、機械学習のワークフロー(データのロード、データの変換、データの可視化、モデルの学習、モデルの評価、モデルの解釈)が簡単にできます。
その2.お手軽に機械学習に触れてみたい
Oracle Cloud Infrastructure Data Science を使用する際にかかる費用は、Oracle Cloud Infrastructure Data Scienceを動かすコンピュートの稼働のみ。使用しない場合はコンピュートを停止(非アクティブ化)すれば課金されませんので、お手軽に検証できます。
その3.機械学習で予想した結果が正しいかを知りたい
Kaggleに機械学習のコンペがあり、初心者向けに「タイタニック生存者予測」で予想した結果を評価してくれます。
https://www.kaggle.com/c/titanic
test.csvは、「Survived 列のみ」存在しない
⇒test.csv の情報を使用して、「0:死亡 or 1:生存」 の結果を予想します
機械学習で予測した結果をKaggleに提出
※Oracle Cloud Infrastructure Data Scienceで予想結果を作成して提出します。
結果は記事の最後に!
Oracle Cloud Infrastructure Data Science をつかってみる
Oracle Cloud Infrastructure Data Science を使用する流れは以下になります。
1.Oracle Cloud Infrastructure(OCI)の設定
2.Oracle Cloud Infrastructure Data Science で機械学習のワークフローを実施
(データのロード、データの変換、データの可視化、モデルの学習、モデルの評価)
1.Oracle Cloud Infrastructure(OCI)の設定
※折りたたんでいるので、詳細は ▶ をクリックください
1-1.Oracle Cloud Infrastructure Data Science の前提条件を確認
Oracle Cloud Infrastructure Data Science の前提条件を確認
1-2.VCNとサブネットの作成
VCNとサブネットの作成
[アイデンティティ]-[コンパートメント]をクリック
[コンパートメントの作成]をクリック
「名前」、「説明」、「親コンパートメント」を設定して、[コンパートメントの作成]をクリック
コンパートメントが作成される
[ネットワーキング]-[仮想クラウド・ネットワーク]をクリック
作成した「コンパートメント」を選択して、[VCNウィザードの起動]をクリック
[インターネット接続性を持つVCN]を選択して、[VCNウィザードの起動]をクリック
「名前」を入力、「コンパートメント」(作成したもの)を選択
「CIDR」ブロックを確認して[次]をクリック
[作成]をクリック
[仮想クラウド・ネットワークの表示]をクリック
VCNができていることを確認
1-3.動的グループの作成
動的グループの作成
1-4.ポリシーの作成
ポリシーの作成
サービスポリシーの作成
[アイデンティティ]-[ポリシー]をクリック
[ポリシーの作成]をクリック
「名前」、「説明」、「コンパートメント」を設定して
ポリシー・ビルダーには指定された
「allow service datascience to use virtual-network-family in tenancy」を入力して
[作成]ボタンをクリック
作成されたポリシーを確認
非管理者ユーザー・ポリシーの作成
今回は非管理者は作成しませんでしたので、Administrators にポリシーを作成します
[アイデンティティ]-[ポリシー]をクリック
[ポリシーの作成]をクリック
「名前」、「説明」、「コンパートメント」を設定して
ポリシー・ビルダーには指定された
「allow group to use virtual-network-family in tenancy」
「allow group to manage data-science-family in tenancy」
を入力して、[作成]ボタンをクリック(今回はAdministratorsにしています)
動的グループ・ポリシーの作成
[アイデンティティ]-[ポリシー]をクリック
[ポリシーの作成]をクリック
「名前」、「説明」、「コンパートメント」を設定して
ポリシー・ビルダーには指定された
「allow dynamic-group to manage data-science-family in tenancy」
※ここで、は動的グループの名前を表します
を入力して、[作成]ボタンをクリック
2.Oracle Cloud Infrastructure Data Science で機械学習のワークフローを実施
Oracle Cloud Infrastructure Data Science の環境を準備して、機械学習のワークフローを実施します。
※折りたたんでいるので、詳細は ▶ をクリックください
2-1.Oracle Cloud Infrastructure Data Science の環境を準備
2-1-1.プロジェクトの作成
プロジェクトの作成
2-1-2.ノートブック・セッションの作成
ノートブック・セッションの作成
[ノートブック・セッションの作成]をクリック
「コンパートメント」:作成したコンパートメント
「名前」:任意の名前を入力
「コンピュート・インスタンスのシェイプ」:VM Standard E2.2(一番小さいシェイプ)※課金に影響
「VCN」:今回作成したVCN
「サブネット」:今回作成したプライベートサブネット
上記を設定して、[作成]をクリック
少し時間がかかりますが、アクティブになり[開く]ボタンが押せる状態になったら、[開く]ボタンをクリック(ログイン画面がでますのでユーザ・パスワードを入力)
※使用しない時は[非アクティブ化]をクリックすることで課金されません。
また、使用するときは[アクティブ化」をクリックします
2-1-3.機械学習ライブラリをインストール
機械学習ライブラリをインストール
こんな画面が開きます
初期状態ですと、機械学習ライブラリ群およびOracle独自のライブラリ"Accelerated Data Science(ADS)が入っていない環境になっていますので、インストールします。
[Environment Explorer]をクリック
Environment Explorer が表示される
「GENERAL MACHINE LEARNING FOR CPUS」の[Install]をクリックすると
コマンドが表示されるので「コピー」ボタンをクリック
ライブラリをインストールするコマンドを打つため、ターミナル画面を表示させる
さっきコピーしたコマンドを張り付けて実行
「Python[conda env:mlcpuv1]」の環境がインストールされたことを確認
2-1-4.OCI CLI設定
Oracle Cloud Infrastructure Data Science で機械学習モデルを保存する際に設定が必要になります。
OCI CLI設定
画面右上の「+」をクリック
[Terminal]をクリック
コンソールの画面が表示される
oci setup config を実行
(base) bash-4.2$ oci setup config
This command provides a walkthrough of creating a valid CLI config file.
The following links explain where to find the information required by this
script:
User API Signing Key, OCID and Tenancy OCID:
https://docs.cloud.oracle.com/Content/API/Concepts/apisigningkey.htm#Other
Region:
https://docs.cloud.oracle.com/Content/General/Concepts/regions.htm
General config documentation:
https://docs.cloud.oracle.com/Content/API/Concepts/sdkconfig.htm
Enter a location for your config [/home/datascience/.oci/config]:
Enter a user OCID: <ユーザのOCID>
Enter a tenancy OCID: <テナンシのOCID>
Enter a region by index or name(e.g.
1: ap-chiyoda-1, 2: ap-chuncheon-1, 3: ap-hyderabad-1, 4: ap-melbourne-1, 5: ap-mumbai-1,
6: ap-osaka-1, 7: ap-seoul-1, 8: ap-sydney-1, 9: ap-tokyo-1, 10: ca-montreal-1,
11: ca-toronto-1, 12: eu-amsterdam-1, 13: eu-frankfurt-1, 14: eu-zurich-1, 15: me-dubai-1,
16: me-jeddah-1, 17: sa-santiago-1, 18: sa-saopaulo-1, 19: uk-cardiff-1, 20: uk-gov-cardiff-1,
21: uk-gov-london-1, 22: uk-london-1, 23: us-ashburn-1, 24: us-gov-ashburn-1, 25: us-gov-chicago-1,
26: us-gov-phoenix-1, 27: us-langley-1, 28: us-luke-1, 29: us-phoenix-1, 30: us-sanjose-1): <使用するリージョン>
Do you want to generate a new API Signing RSA key pair? (If you decline you will be asked to supply the path to an existing key.) [Y/n]: Y
Enter a directory for your keys to be created [/home/datascience/.oci]:
Enter a name for your key [oci_api_key]:
Public key written to: /home/datascience/.oci/oci_api_key_public.pem
Enter a passphrase for your private key (empty for no passphrase):
Private key written to: /home/datascience/.oci/oci_api_key.pem
Fingerprint:xxxxxx
Config written to /home/datascience/.oci/config
If you haven't already uploaded your API Signing public key through the
console, follow the instructions on the page linked below in the section
'How to upload the public key':
https://docs.cloud.oracle.com/Content/API/Concepts/apisigningkey.htm#How2
(base) bash-4.2$
[アイデンティティ]-[ユーザ]をクリック
Oracle Cloud Infrastructure Data Science を使用するユーザを選択
[APIの追加]をクリック
公開キーを確認してコピー
(base) bash-4.2$ cd /home/datascience/.oci/
(base) bash-4.2$ cat oci_api_key_public.pem
2-2.Oracle Cloud Infrastructure Data Science を使ってみる
Oracle Cloud Infrastructure Data Science を使ってみる
右クリックして[New Folder]を選択します
フォルダ名を入力して、できたフォルダをクリックしてフォルダを移動します
「+」をクリックして Launcherを起動します
Python[conda env:mlcpuv1]をクリック
ipynbの名前を変更
Kaggleからダウンロードした train.csv、test.csvをアップロード
pythonのコードは赤枠に記載して、 ▶ を押して実行します。
実行中かどうかは画面左下のBusy(実行中)、idle(アイドル)で確認できます
Kaggleのデータを読み込み
%matplotlib inline
%load_ext autoreload
%autoreload 2
import csv
import pandas as pd
import logging
import ads
from ads.dataset.factory import DatasetFactory
from ads.automl.provider import OracleAutoMLProvider
from ads.automl.driver import AutoML
titanic_df = pd.read_csv('train.csv')
titanic_ads = DatasetFactory.open(titanic_df).set_target('Survived')
読み込んだデータの可視化
titanic_ads.show_in_notebook()
読み込んだデータに対するデータ変換の推奨案を表示
titanic_ads.suggest_recommendations()
提示された推奨案を適用
titanic_ads = titanic_ads.drop_columns(["PassengerId", "Cabin","Ticket","SibSp","Ticket"])
titanic_ads = titanic_ads.fillna({"Age": 29.6991})
titanic_ads = titanic_ads.fillna({"Embarked": "S"})
titanic_ads
対応したデータを再度、推奨案がないかを確認
titanic_ads.suggest_recommendations()
「Name」列を削除
titanic_ads = titanic_ads.drop_columns(["Name"])
titanic_ads
再度、推奨案がないか確認
titanic_ads.suggest_recommendations()
トレーニングデータとテストデータに分割して、トレーニングデータを学習しモデルを作成
train, test = titanic_ads.train_test_split(test_size=0.2)
ml_engine = OracleAutoMLProvider(n_jobs=-1, loglevel=logging.ERROR)
oracle_automl = AutoML(train, provider=ml_engine)
automl_model1, baseline = oracle_automl.train()
モデルの評価を実施。先ほど分割したテストデータを使用して評価して
リフトチャート、ゲインチャート、PR曲線、ROC曲線、混合マトリクスを表示
from ads.common.model import ADSModel
from ads.evaluations.evaluator import ADSEvaluator
from ads.common.data import MLData
ads_evaluator = ADSEvaluator(test, models=[automl_model1, baseline], training_data=train)
ads_evaluator.show_in_notebook(perfect=True)
学習モデルの各評価指標を表示
ads_evaluator.metrics
モデルカタログに登録
出来上がったモデルはモデルカタログに登録します。モデルカタログとはプロジェクト内で構築済みモデルを共有するためめの仕組みです。
登録されたモデルは一旦リリース扱いとなり、プロジェクト内のユーザーに共有されます。
他のユーザーはモデルを流用することが可能ですし、そのモデルを更に強化して、再度共有することも可能です。
https://blogs.oracle.com/bigdata-dataintegration-jp/oracle-cloud-infrastructure-data-science
path_to_model_artifact = "/home/datascience/titanic/model_qiita"
model_artifact =automl_model1.prepare(path_to_model_artifact, force_overwrite=True, data_sample=test, include_data_sample=True, data_science_env=True,fn_name="predictor")
作成したモデルを保存
import os
compartment_id = os.environ["NB_SESSION_COMPARTMENT_OCID"]
project_id = os.environ["PROJECT_OCID"]
mc_model = model_artifact.save(project_id=project_id, compartment_id=compartment_id, display_name="fn_titanic_ml", description="fn titanic_ml", training_script_path="titanic.ipynb", ignore_pending_changes=True)
保存したモデルをロード
from ads.common.model_artifact import ModelArtifact
model_titanic = ModelArtifact(path_to_model_artifact)
model_titanic .reload()
Kaggleのtest.csvデータを読み込み、モデルを構築する際に使用した列にする。
プラス、欠損値の対応も実施
test_df = pd.read_csv('test.csv')
del test_df["PassengerId"]
del test_df["Cabin"]
del test_df["Name"]
del test_df["Ticket"]
del test_df["SibSp"]
test_df = test_df.fillna({"Age": 29.6991})
test_df = test_df.fillna({"Embarked": "S"})
test_df
test.csvのデータを、モデルを使用して生存予測を実施
model_titanic.predict(test_df)
Kaggleに提出するcsvを作成する
まずは、生存予測結果をDataFrameに格納する
result = model_titanic.predict(test_df)
result = result['prediction']
survived_df = pd.DataFrame({'Survived':result})
survived_df
次は 「PassengerId」 のみのDataFrameを test.csvから作成
id_df = pd.read_csv('test.csv')
id_df = id_df[["PassengerId"]]
id_df
「PassengerId」、「Survived」列で構成するDataFrameを作成
resultdata= pd.concat([id_df, survived_df], axis=1)
resultdata = resultdata.set_index('PassengerId')
resultdata
「PassengerId」、「Survived」列になったDataFrameを csvに出力
resultdata.to_csv("result.csv")
csvファイルを選択して[右クリック]-[Download]
このcsvをKaggleに提出!
Oracle Cloud Infrastructure Data Science で作成した「タイタニック号の生存者予測結果」をKaggleに提出
作成したcsvをアップロードして[Submit Predictions]をクリック
結果は、76% でした。
※2021年2月に予想した結果になります(日々、進化するのでいつ時点の結果かを追記)
私は機械学習の知識は超初心者ですが、Oracle Cloud Infrastructure Data Science
を使うことで、機械学習して結果予測をすることができました。
応用編:作成した予測モデルをアプリケーションに組み込む
Oracle Cloud Infrastructure Data Science で作成した機械学習モデルをダウンロード、ダウンロードしたファイルをOracle Functionsにデプロイ、OCI API GatewayにOracle Functionsを組み込むことでアプリから機械学習モデルを利用することができます。
https://blogs.oracle.com/bigdata-dataintegration-jp/oracle-cloud-infrastructure-data-science
OCIの構成イメージ
こんなサンプルを作ってみました。
画面では機械学習で使用する項目を入力して、[送信]クリックすると、
python が実行され、その中でAPI GETWAYのエンドポイントに問い合わせを行い結果(0:死亡、1:生存)を受け取り、画面に表示するようにしています。
![]() |
---|
参考URL
Oracle Data Science の製品情報
https://apex.oraclecorp.com/pls/apex/tcweb/r/docs/detail?id=32026
Oracle Accelerated Data Science (ADS) SDK(pythonコードのマニュアル)
https://docs.oracle.com/en-us/iaas/tools/ads-sdk/latest/index.html
Functions 、API Gateway の情報
https://oracle-japan.github.io/paasdocs/documents/faas/oraclefunctions/handson/getting-started/
Oracle Cloud Infrastructure Data Science のエッセンスをクイックレビュー
https://blogs.oracle.com/bigdata-dataintegration-jp/oracle-cloud-infrastructure-data-science
Oracle Data Scienceの製品ドキュメント
https://docs.oracle.com/ja-jp/iaas/data-science/using/data-science.htm
Kaggle
https://www.kaggle.com/