本文へジャンプします。

ニフティクラウド Machine Learningのご紹介

こんにちは。ニフティクラウドで開発を担当している大友と言います。

本日は、2016年10月25日にリリースされましたニフティクラウド Machine Learning(現在トライアルα版として受付中)をご紹介します。
ニフティクラウド Machine Learningは、クラウド上に機械学習のモデルを構築して、UIやAPI経由でモデルの出力する予測値を得ることのできるサービスです。

※本記事は2016年11月28日時点での情報を元に執筆しています。

img_ml

機械学習とは

機械学習とは、データに含まれるパターンなどをコンピュータに学習させることで、データを入力として与えた際に、何らかの有益な出力を返すプログラムを構築する仕組みです。出力を返すプログラムをモデルと呼びます。機械学習にはいくつか種類があります。以下に代表的なものを挙げます。

  • 教師あり学習:正解を含むデータを学習させて、未知のデータに対する正解を予測するモデルを構築する
  • 教師なし学習:データに含まれるパターンなどを抽出して出力するモデルを構築する
  • 強化学習:環境と行動を定義し、環境に対して行動した結果を学習して最適な行動を出力するモデルを構築する

実際の応用例として、以下のようなものがあります。

  • メールとスパムか否かのラベルをデータとして新たに受信したメールが、スパムか否かを予測するモデルを構築する(教師あり学習)
  • 店舗への来客データから抽出したパターンに基づいてセグメントを分割し、施策などに活用する(教師なし学習)
  • 囲碁の盤面を環境、差し手を行動として、盤面に対する差し手を学習して最適な差し手を出力するモデルを構築する(強化学習)

今回はニフティクラウド Machine Learningの機能として提供している、教師あり学習について説明していきます。

機械学習における課題

モデルを構築する際に、少なくとも下記のような課題があると考えられています。

モデル構築アルゴリズムを適用するためのデータの前処理

一つめは、いわゆる前処理と呼ばれている処理です。機械学習のモデルを構築するアルゴリズムは数値を入力とするものが主になります。そこで、入力するデータを適切な形にあらかじめ処理しておく必要があります。例えば、入力の中に記号が含まれている場合などには数値化する必要があります。また、アルゴリズムによっては、入力する数値のカラムごとの大きさに影響を受けるものがあるため、数値の大きさを調整する必要があります。

機械学習のモデル選択や各モデルのハイパーパラメーターのチューニング

二つめはモデルの選択と各モデルのハイパーパラメーターのチューニングです。機械学習にいくつか種類があることは前述しましたが、その中の教師あり学習のモデルについても、いくつか種類があります。それぞれのモデルごとに特性が異なっており、あるデータでは精度の高かったモデルでも別のデータに対しては精度が低く、別のモデルの方が適している場合などがあります。このため、色々なモデルに対して精度の検証を行い、適切にモデルを選択する必要があります。また、各モデルにはハイパーパラメーターという構築を行う前にあらかじめ設定する必要のあるパラメータが存在するモデルもあり、ハイパーパラメーターの値によっても精度が変わってくるためチューニングが必要となります。

データ処理パイプラインの永続化

加えて、このようなモデルを構築する際の前処理を行い、データを入力するパイプラインは予測時にも同様に適用する必要があるため、永続化して予測時に呼び出せるようにしておくためのシステムが必要となります。

flow

ニフティクラウド Machine Learning について

ニフティクラウド Machine Learningは、前述の様な機械学習のモデル構築における課題を解決することに注力したサービスです。主な機能として、下記を提供しています。

  • 一部の前処理を行う機能の提供
  • モデルの選択とハイパーパラメーターのチューニングの自動化
  • 一連のパイプラインを利用した予測APIの提供

今回はこれらの機能を用いて予測モデルの構築を行ってみたいと思います。

予測モデルの構築

UCI Machine Learning Repositoryで公開されている乳がんの良悪性の予測を行うデータセットBreast Cancer Wisconsin (Diagnostic) Data Set(以下Breast Cancerデータセット)を利用して予測モデルを構築していきます。

データソースの登録

ニフティクラウド Machine Learningでデータを利用するためには、まずデータソースを登録する必要があります。データソースにはMySQLかニフティクラウド オブジェクトストレージ(以下オブジェクトストレージ)にアップロードされたCSVが対応しています。今回は前述のデータセットをCSVに変換して、オブジェクトストレージから利用することにします。また、実際に利用する際は必要ありませんが、後ほど予測機能を利用するためにあらかじめテスト用のデータを分けて登録しておきます。登録には下記の様にコントロールパネルからデータソースの登録を選択し、前述のアップロードしたCSVファイルを入力します。

datasource

モデルの登録

続いてモデルの登録を行います。モデルの登録には先ほど登録した学習用のデータソースと予測対象となるカラムを選択します。今回予測したい属性は良悪性のため良性の場合に1となるカラムであるbenignを選択します。

model

データの前処理

次に前処理の設定を行います。前処理の内容は欠損値補完、正規化、特徴抽出に対応しています。Breast Cancerデータセットは予測対象以外のカラムは実数値のため欠損値を平均値で補完し、平均0分散1で正規化します。

preprocessing

学習の開始

前処理の設定が終わったので学習を開始します。

train

学習が完了するとモデル一覧からスコアを確認することができます。評価指標のF値は再現率(陽性のデータのうち、正しく陽性と予測できた割合)と適合率(陽性と予測したうち、正しく予測できた割合)の調和平均になります。単純に予測の正解率を指標とすると正解ラベルに偏りがある場合に多いラベルを常に予測するモデルのスコアが良くなってしまうため、機械学習では上記のような指標を用いることが多いです。

confirm

データの予測

コントロールパネルからの予測

ステータスが学習済みになると予測APIが利用可能になります。実際に利用する場合はここで正解が分からないデータに対して予測を行いますが、今回はデータソースを登録する際に用意したテスト用のデータを利用します。UIから予測を行う場合はモデル構築の際に利用する場合と同様に登録済みのデータソースに対して予測値の出力を行います。

predict

実際の値(左側)と予測した結果(右側)とを比較してみると、正しく分類できていることがわかります。

result

APIを用いた予測

APIを用いて予測することも可能です。APIはAWSのSignature V4互換のためPythonの場合は下記の様にboto/botocoreを利用してリクエストすることができます。

$ cat predict.py
import os
import sys
import json
import requests
from botocore.auth import SigV4Auth
from botocore.credentials import Credentials
from botocore.awsrequest import AWSRequest

endpoint = 'https://ml.api.cloud.nifty.com/'
req = AWSRequest(
    method='POST',
    headers={
        'x-amz-target': 'MachineLearning_20161025.Predict',
        'host': 'ml.api.cloud.nifty.com',
        'content-type': 'application/json',
    },
    data=json.dumps(json.load(open(sys.argv[1]))),
)
cred = Credentials(os.environ['ACCESS_KEY'], os.environ['SECRET_KEY'])
SigV4Auth(cred, 'machinelearning', 'east-2').add_auth(req)
print(requests.post(endpoint, headers=req.headers, data=req.body).text)
$ python predict.py payload.json | xmllint --format -
<?xml version="1.0" encoding="utf-8"?>
<PredictResponse>
  <predictedLabels>
    <predictedLabel>0</predictedLabel>
  </predictedLabels>
  <modelId>1</modelId>
</PredictResponse>

まとめ

ニフティクラウド Machine Learningを用いて、予測モデルの構築と予測を実施しました。
このようにCSVデータからカジュアルに予測モデルの構築が行えるサービスとなっておりますのでぜひご利用ください。
トライアルα版の申し込みはこちらから受付中です 。

ニフティクラウド 導入相談窓口
ニフティクラウド 無料セミナー

閉じる

閉じる

クラウドブログ編集部

クラウドブログ編集部

ニフティクラウド ユーザーブログ編集部のアカウントです。 編集部からのお知らせや、レギュラーライター以外のゲストによる寄稿記事を掲載していきます。

浜中 慶

浜中 慶

1980年、神奈川県生まれ。2003年ニフティ入社。 ポータルサイト開発を中心に、音楽配信サービス、CGMサービスなど様々なプロジェクトに企画/デザイン/システム担当として参加。現在は@niftyのポータルサービス向けコンテンツ管理システムの企画/開発/運用を担当。

吉田 雄哉

吉田 雄哉

株式会社co-meetingの創業メンバー。「取締役&External- facing Technologist」と名乗り新しいIT技術を広く伝える活動とWebアプリケーション開発を行う毎日。パッケージベンダーでのSaaS立上げ・製造業の情報システム部門で企画やPM・受託開発と従事してきたため、ベンダーサイドとユーザサイド の両方の視点を持ち合わせる。

石田 健亮

石田 健亮

株式会社ドリーム・アーツで小売事業者向けSaaS「Shopらん」を企画、開発。メインの仕事はプログラマーだがサーバー管理や営業もこなすユーティリティプレイヤー。最近好きな事はパフォーマンスチューニング。特に並列化プログラミングがマイブーム。キライなことはデータセンターでの作業。騒音と乾燥が弱点。ニフティクラウドでデータセンターに行く必要が無くなったことが本当の利点だ と思っている。

五月女 雄一

五月女 雄一

ニフティでは「インフラを守る簡単な様で奥が深いお仕事」をしています。 夢はインフラの気持ちが読めるエンジニアになること。

わたなべ かずひろ

わたなべ かずひろ

専門学校卒業後、ソフトウェア開発会社で電力系統制御システムの開発に従事。その後、CD-ROM等マルチメディア系PCソフトの開発を経て、1998年フリーランスに。 2000年8月に株式会社イーツーの設立に参画。携帯を含む様々なWeb系のシステム開発に携わる。現在はiPhone/Androidアプリなどの開発も手がけている。

市角

市角

ニフティクラウドのコントロールパネル設計・開発をメインに、たまにインフラの運用やお手伝いもやっていたりします。コントロールパネルや新機能の活用方法、アイデアなどを中心に書いていく予定です。

仲山 昌宏

仲山 昌宏

歌って踊れるインフラエンジニア兼、PHPもRubyもJavaも書くPerl使い。 物理サーバの運用に飽きて、フルラックに格安サーバ詰めて自宅プライベートクラウドを構築中。 今年は個人的には分散処理を攻めていきます。

猪飼 賢広

猪飼 賢広

1984年、愛知県名古屋市生まれ。大学は福島県にある某大学。2008年ニフティに入社。 開発系部署に配属後、主に各種テーマサイト開発のシステム面調整、開発進行管理役などとして参加。 現在もPC・ガラケーサイトの開発まわりを担当。インフラまわりを触る案件にも携わっており、日々修行中。 好きな芸人はなかやまきんに君とレイザーラモンRG。

久江 裕之

久江 裕之

ニフティクラウドのインフラ運用、OS提供の仕事をしています。 新しいOSやイメージが出る時にこのブログでご紹介いたします。入社5年目。一流のインフラエンジニアを目指して日々勉強中。

竹内 豪

竹内 豪

ニフティクラウド エンジニア

山口

山口

ニフティクラウドの基盤設計、新サービス/アライアンス/インフラ企画、その他雑用全般を担当しています。 クラウドに欲しい機能や、こんなふうに使ってほしいという想いが共有できれば良いですね。

芳中 隆幸

芳中 隆幸

ニフティクラウドの開発、運用を担当しています。

酒井 浩平

酒井 浩平

ニフティクラウドの中にいます。 ネットワークまわりの運用・開発や自動化などに取り組んでいます。 すべてのエンジニアを幸せにすることを目指しています。

higebu

higebu

ニフティクラウド IaaSのエンジニアです。 ネットワーク、DRサービス with VMware vCloud® Air™ Technology辺りの担当をしています。

武田

武田

ニフティクラウドの開発・運用を担当しています。 各種機能の内容についてなどで執筆させていただく予定です。

福澤真

福澤真

ニフティクラウドのコンパネ開発、運用をしています。

森藤 大地

森藤 大地

データに関する仕事が好きです。

宮原徹

宮原徹

日本仮想化技術株式会社 代表取締役社長兼CEO。仮想化技術に関するコンサルタントとして長年活動しており、特にベンチマークテストによる性能評価を得意としている。

荒谷翔

荒谷翔

株式会社はてなでMackerelのセールスデベロッパーとして勤務しています

東條 望

東條 望

2014年にニフティへ中途入社。 入社後から現在まで、ニフティクラウドのサービス企画・開発を担当しています。 各サービスの紹介を執筆させていただく予定です。

世良迪夫

世良迪夫

ニフティクラウドのRDBなどを担当しています