LoginSignup
21
9

More than 3 years have passed since last update.

Oracle Cloud Infrastructure Data Scienceで機械学習してタイタニック号の生存者を予測

Last updated at Posted at 2021-02-18

本投稿の背景

その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
image.png
image.png
test.csvは、「Survived 列のみ」存在しない
⇒test.csv の情報を使用して、「0:死亡 or 1:生存」 の結果を予想します

機械学習で予測した結果をKaggleに提出
image.png
image.png
※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 の前提条件を確認

[データサイエンス]-[プロジェクト]を選択
image.png

[データ・サイエンスの前提条件]のリンクをクリック
image.png

前提条件を確認
image.png

1-2.VCNとサブネットの作成

VCNとサブネットの作成

1-2-1.コンパートメントの作成

Oracle Cloud Infrastructure Data Science 用のコンパートメントを作成して、そのコンパートメントにVCNとサブネットを作成します。

[アイデンティティ]-[コンパートメント]をクリック
image.png
[コンパートメントの作成]をクリック
image.png
「名前」、「説明」、「親コンパートメント」を設定して、[コンパートメントの作成]をクリック
image.png
コンパートメントが作成される
image.png
[ネットワーキング]-[仮想クラウド・ネットワーク]をクリック
image.png
作成した「コンパートメント」を選択して、[VCNウィザードの起動]をクリック
image.png
[インターネット接続性を持つVCN]を選択して、[VCNウィザードの起動]をクリック
image.png
「名前」を入力、「コンパートメント」(作成したもの)を選択
image.png
「CIDR」ブロックを確認して[次]をクリック
image.png
[作成]をクリック
image.png
[仮想クラウド・ネットワークの表示]をクリック
image.png
VCNができていることを確認
image.png

1-3.動的グループの作成

動的グループの作成

次の一致ルールを使用して動的グループを作成します:
ALL { resource.type = 'datasciencenotebooksession' }

[アイデンティティ]-[動的グループ]をクリック
image.png
[動的グループの作成]をクリック
image.png
「名前」、「説明」、「一致ルール」を入力して、[作成]をクリック
image.png
動的グループができたことを確認
image.png

1-4.ポリシーの作成

ポリシーの作成

ポリシー (ルート・コンパートメントに作成)
・サービス・ポリシー
・非管理者ユーザー・ポリシー
・動的グループ・ポリシー

サービスポリシーの作成

[アイデンティティ]-[ポリシー]をクリック
image.png
[ポリシーの作成]をクリック
image.png
「名前」、「説明」、「コンパートメント」を設定して
ポリシー・ビルダーには指定された
「allow service datascience to use virtual-network-family in tenancy」を入力して
[作成]ボタンをクリック
image.png
作成されたポリシーを確認
image.png

非管理者ユーザー・ポリシーの作成

今回は非管理者は作成しませんでしたので、Administrators にポリシーを作成します
[アイデンティティ]-[ポリシー]をクリック
image.png
[ポリシーの作成]をクリック
image.png
「名前」、「説明」、「コンパートメント」を設定して
ポリシー・ビルダーには指定された
「allow group to use virtual-network-family in tenancy」
「allow group to manage data-science-family in tenancy」
を入力して、[作成]ボタンをクリック(今回はAdministratorsにしています)
image.png

動的グループ・ポリシーの作成

[アイデンティティ]-[ポリシー]をクリック
image.png
[ポリシーの作成]をクリック
image.png
「名前」、「説明」、「コンパートメント」を設定して
ポリシー・ビルダーには指定された
「allow dynamic-group to manage data-science-family in tenancy」
※ここで、は動的グループの名前を表します
を入力して、[作成]ボタンをクリック
image.png

作成されたポリシーを確認
image.png

2.Oracle Cloud Infrastructure Data Science で機械学習のワークフローを実施

Oracle Cloud Infrastructure Data Science の環境を準備して、機械学習のワークフローを実施します。
※折りたたんでいるので、詳細は ▶ をクリックください

2-1.Oracle Cloud Infrastructure Data Science の環境を準備

2-1-1.プロジェクトの作成

プロジェクトの作成

プロジェクトを作成して、ノートブック・セッションを作成して、機械学習を実施します。
[データ・サイエンス]-[プロジェクト]をクリック
image.png
[プロジェクトの作成]をクリック
image.png
「コンパートメント」は作成したコンパートメントを指定、「プロジェクト」に任意の名前を入力して
[作成]をクリック
image.png

2-1-2.ノートブック・セッションの作成

ノートブック・セッションの作成

[ノートブック・セッションの作成]をクリック
image.png
「コンパートメント」:作成したコンパートメント
「名前」:任意の名前を入力
「コンピュート・インスタンスのシェイプ」:VM Standard E2.2(一番小さいシェイプ)※課金に影響
「VCN」:今回作成したVCN
「サブネット」:今回作成したプライベートサブネット
上記を設定して、[作成]をクリック
image.png
少し時間がかかりますが、アクティブになり[開く]ボタンが押せる状態になったら、[開く]ボタンをクリック(ログイン画面がでますのでユーザ・パスワードを入力)
image.png
※使用しない時は[非アクティブ化]をクリックすることで課金されません。
 また、使用するときは[アクティブ化」をクリックします

2-1-3.機械学習ライブラリをインストール

機械学習ライブラリをインストール

こんな画面が開きます
image.png
初期状態ですと、機械学習ライブラリ群およびOracle独自のライブラリ"Accelerated Data Science(ADS)が入っていない環境になっていますので、インストールします。
[Environment Explorer]をクリック
image.png
Environment Explorer が表示される
image.png
「GENERAL MACHINE LEARNING FOR CPUS」の[Install]をクリックすると
コマンドが表示されるので「コピー」ボタンをクリック
image.png
ライブラリをインストールするコマンドを打つため、ターミナル画面を表示させる
image.png
さっきコピーしたコマンドを張り付けて実行
image.png
「Python[conda env:mlcpuv1]」の環境がインストールされたことを確認
image.png

2-1-4.OCI CLI設定

Oracle Cloud Infrastructure Data Science で機械学習モデルを保存する際に設定が必要になります。

OCI CLI設定

画面右上の「+」をクリック
image.png
[Terminal]をクリック
image.png
コンソールの画面が表示される
image.png
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$ 

[アイデンティティ]-[ユーザ]をクリック
image.png
Oracle Cloud Infrastructure Data Science を使用するユーザを選択
image.png
[APIの追加]をクリック
image.png
公開キーを確認してコピー

(base) bash-4.2$ cd /home/datascience/.oci/
(base) bash-4.2$ cat oci_api_key_public.pem

コピーした公開キーを張り付け、[追加]をクリック
image.png

2-2.Oracle Cloud Infrastructure Data Science を使ってみる

Oracle Cloud Infrastructure Data Science を使ってみる

機械学習モデルのフォルダを作成してここに、kaggleからダウンロードしたcsv、ipynbファイルを置くようにします。

右クリックして[New Folder]を選択します
image.png
フォルダ名を入力して、できたフォルダをクリックしてフォルダを移動します
image.png
「+」をクリックして Launcherを起動します
image.png
Python[conda env:mlcpuv1]をクリック
image.png
ipynbの名前を変更
image.png
Kaggleからダウンロードした train.csv、test.csvをアップロード
image.png
pythonのコードは赤枠に記載して、 ▶ を押して実行します。
image.png
実行中かどうかは画面左下のBusy(実行中)、idle(アイドル)で確認できます
image.png

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()

image.png

読み込んだデータに対するデータ変換の推奨案を表示

titanic_ads.suggest_recommendations()

image.png

提示された推奨案を適用

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

「PassengerId」などの列が消えていることを確認
image.png

対応したデータを再度、推奨案がないかを確認

titanic_ads.suggest_recommendations()

「Name」列をDropと推奨
image.png

「Name」列を削除

titanic_ads = titanic_ads.drop_columns(["Name"])
titanic_ads 

「Name」列が削除されていることを確認
image.png

再度、推奨案がないか確認

titanic_ads.suggest_recommendations()

他に対応はなさそう
image.png

トレーニングデータとテストデータに分割して、トレーニングデータを学習しモデルを作成

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()

XGBClassifierのアルゴリズムを使用するそうだ
image.png

モデルの評価を実施。先ほど分割したテストデータを使用して評価して
リフトチャート、ゲインチャート、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)

image.png

学習モデルの各評価指標を表示

ads_evaluator.metrics

image.png

モデルカタログに登録

出来上がったモデルはモデルカタログに登録します。モデルカタログとはプロジェクト内で構築済みモデルを共有するためめの仕組みです。
登録されたモデルは一旦リリース扱いとなり、プロジェクト内のユーザーに共有されます。
他のユーザーはモデルを流用することが可能ですし、そのモデルを更に強化して、再度共有することも可能です。

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

image.png

test.csvのデータを、モデルを使用して生存予測を実施

model_titanic.predict(test_df)

結果がかえる
image.png

Kaggleに提出するcsvを作成する
まずは、生存予測結果をDataFrameに格納する

result = model_titanic.predict(test_df)
result = result['prediction']
survived_df = pd.DataFrame({'Survived':result})
survived_df

image.png

次は 「PassengerId」 のみのDataFrameを test.csvから作成

id_df = pd.read_csv('test.csv')
id_df = id_df[["PassengerId"]]
id_df

image.png

「PassengerId」、「Survived」列で構成するDataFrameを作成

resultdata= pd.concat([id_df, survived_df], axis=1)
resultdata = resultdata.set_index('PassengerId')
resultdata

image.png

「PassengerId」、「Survived」列になったDataFrameを csvに出力

resultdata.to_csv("result.csv")

image.png

csvファイルを選択して[右クリック]-[Download]
image.png

このcsvをKaggleに提出!

Oracle Cloud Infrastructure Data Science で作成した「タイタニック号の生存者予測結果」をKaggleに提出

作成したcsvをアップロードして[Submit Predictions]をクリック
image.png
結果は、76% でした。
※2021年2月に予想した結果になります(日々、進化するのでいつ時点の結果かを追記)

image.png
私は機械学習の知識は超初心者ですが、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
image.png
OCIの構成イメージ
image.png

こんなサンプルを作ってみました。
画面では機械学習で使用する項目を入力して、[送信]クリックすると、
python が実行され、その中でAPI GETWAYのエンドポイントに問い合わせを行い結果(0:死亡、1:生存)を受け取り、画面に表示するようにしています。

ezgif.com-gif-maker11.gif

参考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/

21
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
9