SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

オラクル技術エキスパートが紹介する 開発者のためのデータベース完全ガイド

データベース内で機械学習!? なぜ求められるのか、そしてどのように実装されるのか

オラクル技術エキスパートが紹介する 開発者のためのデータベース完全ガイド 第12回

  • X ポスト
  • このエントリーをはてなブックマークに追加

データベース内での機械学習の実践(オラクルの場合)

 データベース内機械学習はどのように利用するのかをオラクルの例を挙げたいと思います。オラクルでは言語的なインターフェースとして、SQLとPythonとR(Python)が用意されています。ここでは、Python(OML4Py:Oracle Machine Learning for Python)を利用して機械学習を行ってみます。データは、アヤメの花の「種類(Species)」と「花弁(Petal)」の長さ(Length)と幅(Width)、「萼片(Sepal)」の長さと幅の5列のIRISデータセットを利用します。このデータをsklearnからデータベースの表として取り込み、自動機械学習の機能を用いて、最適と思われるアルゴリズムを取得して、そのモデルを作成し、評価するまでのプロセスを記載します。

下準備:IRISデータのロードとデータベースへの取り込み

 こちらの作業は本来データベース内データの分析作業では不要な項目ですが、サンプルとしての完全性のために記載したものになります

# sklearnのIRISデータセットをデータベースの表として取り込む
import oml
from sklearn import datasets
import pandas as pd

## IRISデータのロード
iris = datasets.load_iris()  # sklearn内のirisデータセットの読み込み
## IRISデータの表構造化(sklearnからロードされるirisデータは表構造ではなくBunch型のため)
x = pd.DataFrame(iris.data, 
columns = ['Sepal_Length', 'Sepal_Width', 'Petal_Length', 'Petal_Width'])
y = pd.DataFrame(
list(map(lambda x: {0: 'setosa', 1: 'versicolor', 2:'virginica'}[x], iris.target)),
 columns = ['Species'])
# IRISデータをデータベース内の表として生成 
#  (これ以降の操作ではデータはデータベース内から移動しない実装になっています)
iris_on_oracle = oml.create(pd.concat([x, y], axis=1), table = 'IRIS')
データセットの分割

 データセットを学習用と評価用データに分割します

# 学習用データとテスト用データに分割 (oml.dataframeのsplit関数を利用)
##    dat[0]を学習用、dat[1]をテスト用として分割
dat = iris_on_oracle.split()

## 目的変数(Species) と 説明変数(Specie以外) に分割 
train_x = dat[0].drop('Species')
train_y = dat[0]['Species']
自動機械学習(AutoML)のアルゴリズム選択の利用
# AutoMLの自動モデル選択
import oml
from oml import automl
## アルゴリズム選択の設定 ( 分類モデルでaccuracyを評価軸として4並列で動作)
algosel = automl.AlgorithmSelection(mining_function='classification', 
                              score_metric='accuracy', parallel=4)
## アルゴリズム選択の実行
best_model  = algosel.select( train_x, train_y)
## 結果の表示  rf(ランダムフォレスト)が最も高いスコア
best_model
[('rf', 0.9423280423280425), ('dt', 0.9402116402116402), ('nn', 0.932804232804233)]
ランダムフォレストのモデル作成
# ランダムフォレストモデルの作成
from oml import rf 
rf_model =rf()
rf_model = rf_model.fit(train_x, train_y)
予測結果の取得と評価
# モデル適用結果の取得 (予測結果に加えて supplemental_colsで評価用列を追加して出力 )
pred = rf_model.predict( dat[1].drop('Species') , 
supplemental_cols = dat[1] [:,['Sepal_Length','Species']] )
# 結果の出力
pred
    Sepal_Length     Species  PREDICTION
0            5.5  versicolor  versicolor
1            5.5  versicolor  versicolor
2            5.7   virginica   virginica
   ….
# クロス表での評価
res_ct = pred.crosstab( 'Species','PREDICTION',pivot=True)
res_ct.sort_values(by='Species')
      Species  count_(setosa)  count_(versicolor)  count_(virginica)
0      setosa              14                   0                  0
1  versicolor               0                  14                  1
2   virginica               0                   0                 17

データベース内機械学習の展望

 クラウドの登場によって実現したデータ量がスケールする世界への対応策の1つとして、各社で実装が進んでいるデータベース内機械学習の現在地とオラクルの実装について述べてきました。クラウド化によって、これまで以上に蓄積されるデータは増加の一途をたどっていますし、データが大量になることで起こるデータ移動の問題自体は不可避なものと思われますので、今後もこういったデータベース、データの在処でデータを活用する実装というトレンドは続くものと思われます。

 また、機械学習という観点では、より平易に誰でも使えるようにという流れもあります。前述の例ではアルゴリズムの自動選択機能を利用しましたが、オラクルの場合にはOracle Labsで研究開発している自働機械学習を実装したOracle AutoMLという機能があります。この機能をクラウド上のAutonomous Databaseと統合し、シンプルなUIで機械学習の利用が可能なOracle AutoML UIというツールも提供しています。こちらもご興味がありましたら以下のURLにて簡単なチュートリアルをご用意してありますので、ご覧いただけましたら幸いです。

 さて、活用手段としての機械学習、AI技術に関しては平易なものが出てくる流れだけではなく、GPTのようなより高度で大規模なものが生み出され、活用できる幅が大きく前進しつつあるように見受けられます。ある種、二極化しているようはありますが、これらはデータが非常に重要という意味では共通しており、データの在処、移動、利用というジレンマを宿命的に内包しているように見えます。

 つまり、今後もデータはより多く蓄積され、より多く活用されるようになる流れは加速していくものと思われます。そのため、データの所在、移動の問題は今後も解決すべき課題として、今後も様々な実装がでてくるのではないかと思います。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
オラクル技術エキスパートが紹介する 開発者のためのデータベース完全ガイド連載記事一覧

もっと読む

この記事の著者

中井 亮矢(日本オラクル株式会社)(ナカイ リョウヤ)

 日本オラクル株式会社でOracle Databaseを担当するエンジニア。主に地理空間機能、グラフ機能、機械学習機能を中心とするデータ活用や性能チューニングの領域で、製造業、小売業、公共・公益などの様々な問題解決およびコンサルティングに従事。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/18352 2023/10/03 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング