id:y-nakamori です。 11月8日に、Oracle Cloud Friends という オラクル主催のエンジニアイベントで LT をしてきました。 後日改めて、LT の題材として扱った Titanic の予測について考察し記事にできればと思いますが、今回は Oracle Analytics Cloud(以下、OAC)を用いて機械学習を試してみるところまでを記事にします。
前準備: 使用するデータセット
Titanic: Machine Learning from Disaster
Kaggle でチュートリアルとして扱われているタイタニック号の教師データから、生存者を予測します。 Kaggle や Titanic の詳しい説明については、他の先駆者にお任せします。 教師データ、テストデータをダウンロードし解凍します。
OAC の作成
Oracle Analytics Cloud の作成は下記記事を参照ください。
OAC コンソールを開いて、右上の「作成」よりデータ・セットの作成を行います。 教師データ(train.csv)とテストデータ(test.csv)、両方ともここで OAC に取り込んでおきましょう。
前処理
右上の「作成」より、データ・フローの作成を行います。 ここでは、取り込んだデータに対して列の選択や追加編集ができますが、今回は簡単な列選択のみの学習モデルを作成していきます。
先ほど取り込んだ train.csv を追加します。
+ボタンのステップの追加より、フローを定義していきます。 列の選択から PassengerId, Name, Ticket, Cabin の扱いが難しい(必要ない?)ため、これらの列を除去します。 選択済みの項目が8項目になりました。
教師データを基に学習モデルの作成
8つの項目を用いて、学習モデルの作成をします。 提供されている分析モデルは複数ありますが、今回はチュートリアルで推奨されている Random Forestを採用します。
ステップの追加より、二項分類子のトレーニング, Random Forest for model trainingを選択します。
Random Forest についてのパラメータ設定画面に移ります。 Target, Positive Class in Target はそれぞれ、予測したい列, その際の True である値を選択する項目です。 今回は生存者の予測をしたいので、Target に Survived, Positive Class in Target に 1 を入れます。 あとはデフォルトのままで進めます。
※記事執筆時点で、Train Partition Percent(読み込んだデータのうち、何割を学習に使うか) に100を入れると、モデルが生成されません。
データ・フローの最終項のモデルの保存に名前をつけて、データ・フローの実行をします。
データ・フローの保存を求められるので、こちらにもフローの名前を付けて保存と実行をします。
しばらく待つとコンソールが戻ってきます。 メニューより機械学習ページに移り、先ほど指定した名前でモデルが生成されているかを確認します。
titanic_model という名前のモデルが存在しますね。 これで、学習済みモデルの作成ができました。
生存者予測
今度はテストデータにたいして、先ほど作成した学習済みモデルを適用します。
作成より、データ・フローの作成,で test.csv を選択し追加します。
ステップの追加でモデルの適用から、先ほど作成したモデルを選択します。
PredictedValue が教師データの Survived に当たります。 Kaggle に提出するフォーマットが、PassengerId, Survived の二項目なので、ここで編集しておきます。 PredictedValue の列名を Survived に、ステップの追加で列を PassengerId, Survived の2つにします。
最後に、データの保存のステップを追加しデータ・フローの実行をします。
しばらく待つとコンソールが戻ってくるので、データ・セットより予測結果を出力します。 PassengerId, Survived 共に整数で提出する必要があるので、もし異なる場合は手元で修正します。 特に出力の指定していなかった場合(できるのかは要調査)、Survived が文字列になっていて、また両項目に半角スペースが挿入されていました。
予測精度測定
Kaggle の Submitページより、結果の精度を確認してみましょう。 Kaggle: Your Home for Data Science
精度は 73% ですね! 簡単な機械学習であれば、OAC でパッと実現できました!
終わり
次回は、この精度を、OAC上で高めることにチャレンジしてみたいと思います。