思考のカケラ

コンサルタントの備忘録

カテゴリ: アナリティクス

前回の続きで、アルトコインのデータ取得を行います。
コードは前回からの続きになるので要注意です。(コードを書く際には前回のコードの続きから開始してください。)

データを取得する対象は、ビットコイン取引所のCoincheckで取引されている以下の暗号通貨です。

・ビットコイン (BTC)
・イーサリウム (ETH)
・イーサリウムクラシック (ETC)
・リップル (XRP)
・ネム (XEM)
・ライトコイン (LTC)
・ダッシュ (DASH)
・モネロ (XMR)

今回のアウトプットイメージは引き続き以下のような感じです。
coincheck_crypt

■アルトコインのデータ取得
今回は、Poloniexからデータを引っ張ってきます。
少し、一気にコードを書いていきます。

def get_json_data(json_url, cache_path):
    '''Download and cache JSON data, return as a dataframe.'''
    try:        
        f = open(cache_path, 'rb')
        df = pickle.load(f)   
        print('Loaded {} from cache'.format(json_url))
    except (OSError, IOError) as e:
        print('Downloading {}'.format(json_url))
        df = pd.read_json(json_url)
        df.to_pickle(cache_path)
        print('Cached {} at {}'.format(json_url, cache_path))
    return df

base_polo_url = 'https://poloniex.com/public?command=returnChartData&currencyPair={}&start={}&end={}&period={}' start_date = datetime.strptime('2015-01-01', '%Y-%m-%d') # get data from the start of 2015 end_date = datetime.now() # up until today pediod = 86400 # pull daily data (86,400 seconds per day) def get_crypto_data(poloniex_pair): '''Retrieve cryptocurrency data from poloniex''' json_url = base_polo_url.format(poloniex_pair, start_date.timestamp(), end_date.timestamp(), pediod) data_df = get_json_data(json_url, poloniex_pair) data_df = data_df.set_index('date') return data_df

altcoins = ['ETH','LTC','XRP','ETC','DASH','XMR','XEM'] altcoin_data = {} for altcoin in altcoins: coinpair = 'BTC_{}'.format(altcoin) crypto_price_df = get_crypto_data(coinpair) altcoin_data[altcoin] = crypto_price_df 

for altcoin in altcoin_data.keys(): altcoin_data[altcoin]['price_usd'] = altcoin_data[altcoin]['weightedAverage'] * btc_usd_datasets['avg_btc_price_usd']

combined_df = merge_dfs_on_column(list(altcoin_data.values()), list(altcoin_data.keys()), 'price_usd')

combined_df['BTC'] = btc_usd_datasets['avg_btc_price_usd']

df_scatter(combined_df, 'Cryptocurrency Prices (USD)', seperate_y_axis=False, y_axis_label='Coin Value (USD)', scale='log')

ここまでくると、最終的なアウトプットとして、以下のグラフが得られます。

coincheck_crypt

ざっとここまでで、アルトコインのデータを取得し、グラフに描写することができました。
データを取得することはできましたが、現状としては分析のスタートラインにようやく立てたような状態です。
今後は、具体的な分析方法についても触れていきたいと思います。


所感
・ライブドアブログでソースコードを書くと、どうしても見にくくなってしまうので、Qiitaなどに投稿してリンクをとばすことも検討します。
・暗号通貨について学習するのは、大きなメリットがあるのではと思いました。経済・ファイナンスの勉強になるのはもちろんのこと、データサイエンスやブロックチェーン、セキュリティなど多くの観点から学ぶことができます。また、定量的な視点だけでなく、地政学などの定性的な視点からも学べるなど、暗号通貨は学習素材としてなかなか良いと思いました。

ビットコイン取引高日本一の仮想通貨取引所 coincheck bitcoin
このエントリーをはてなブックマークに追加

今回からはいよいよ分析に入りたいと思います。
ただ、よくあるirisなどの分析からはじめても、ありきたりすぎるので、
みんな大好きビットコイン(Bitcoin)の分析をして興味を持ってもらおうと思います。

今回のゴールはデータの取得までですが、アウトプットイメージは以下のような感じです。
coincheck_crypt

前提として、
・以下pythonコードで書いていきます。pythonの基本的な使い方AnacondaJupyter NotebookPyCharmの使い方などは他のサイトをご参照ください。
(↑一応リンクは貼っています。)

・万が一コードの意味がわからなくても、コピー&ペーストで進めましょう。「できた!」感をまずは優先して、不明点については個別調査。

・使用するデータは海外の取引所のデータ(ドルベース)を使用します。(海外の方が取り扱うコインが多く、今後の展開を考えて)


■ビットコインデータの取得
1ビットコインの価格が11月に入ってから80万円を超え、ますますビットコインの注目が高まっています。
まずはビットコインの時系列データを引っ張ってくることにします。

最初にデータを引っ張ってくるための準備をします。
今回、ビットコインのデータは、様々な金融データがあるQuandlから持ってきます。
import os
import numpy as np
import pandas as pd
import pickle import quandl from datetime import datetime

また、グラフ描写のために、Plotlyを使います。
import plotly.offline as py
import plotly.graph_objs as go
import plotly.figure_factory as ff
py.init_notebook_mode(connected=True)

そしていよいよ、Quandlからビットコインのデータを引っ張ってきます。
def get_quandl_data(quandl_id):
    '''Download and cache Quandl dataseries'''
    cache_path = '{}.pkl'.format(quandl_id).replace('/','-')
    try:
        f = open(cache_path, 'rb')
        df = pickle.load(f)   
        print('Loaded {} from cache'.format(quandl_id))
    except (OSError, IOError) as e:
        print('Downloading {} from Quandl'.format(quandl_id))
        df = quandl.get(quandl_id, returns="pandas")
        df.to_pickle(cache_path)
        print('Cached {} at {}'.format(quandl_id, cache_path))
    return df
次に、KRAKENという取引所のビットコインのデータを持ってきて、表データを表示してみましょう。
btc_usd_price_kraken = get_quandl_data('BCHARTS/KRAKENUSD')
btc_usd_price_kraken.head()
btc1

表データの確認が終わったら、今度はグラフにプロットしてみましょう。
btc_trace = go.Scatter(x=btc_usd_price_kraken.index, y=btc_usd_price_kraken['Weighted Price'])
py.iplot([btc_trace])

BTC2

グラフの中に一部、データが欠落している箇所が見られます。
他の取引所のデータはどうでしょうか。COINBASE, BITSTAMP, ITBITという取引所のデータもあわせて見てみます。

exchanges = ['COINBASE','BITSTAMP','ITBIT']

exchange_data = {}

exchange_data['KRAKEN'] = btc_usd_price_kraken

for exchange in exchanges:
    exchange_code = 'BCHARTS/{}USD'.format(exchange)
    btc_exchange_df = get_quandl_data(exchange_code)
    exchange_data[exchange] = btc_exchange_df

def merge_dfs_on_column(dataframes, labels, col): '''Merge a single column of each dataframe into a new combined dataframe''' series_dict = {} for index in range(len(dataframes)): series_dict[labels[index]] = dataframes[index][col] return pd.DataFrame(series_dict)

他の取引所から得たデータを1つのデータフレームに統合します。
btc_usd_datasets = merge_dfs_on_column(list(exchange_data.values()), list(exchange_data.keys()), 'Weighted Price')

def df_scatter(df, title, seperate_y_axis=False, y_axis_label='', scale='linear', initial_hide=False):
    '''Generate a scatter plot of the entire dataframe'''
    label_arr = list(df)
    series_arr = list(map(lambda col: df[col], label_arr))
    
    layout = go.Layout(
        title=title,
        legend=dict(orientation="h"),
        xaxis=dict(type='date'),
        yaxis=dict(
            title=y_axis_label,
            showticklabels= not seperate_y_axis,
            type=scale
        )
    )
    
    y_axis_config = dict(
        overlaying='y',
        showticklabels=False,
        type=scale )
    
    visibility = 'visible'
    if initial_hide:
        visibility = 'legendonly'
        
    # Form Trace For Each Series
    trace_arr = []
    for index, series in enumerate(series_arr):
        trace = go.Scatter(
            x=series.index, 
            y=series, 
            name=label_arr[index],
            visible=visibility
        )
        
        # Add seperate axis for the series
        if seperate_y_axis:
            trace['yaxis'] = 'y{}'.format(index + 1)
            layout['yaxis{}'.format(index + 1)] = y_axis_config    
        trace_arr.append(trace)

    fig = go.Figure(data=trace_arr, layout=layout)
    py.iplot(fig)


btc_usd_datasets.replace(0, np.nan, inplace=True)

df_scatter(btc_usd_datasets, 'Bitcoin Price (USD) By Exchange')

ここまでくると、以下のような結果が得られます。

BTC3

各取引所のデータの平均をとって整理します。

btc_usd_datasets['avg_btc_price_usd'] = btc_usd_datasets.mean(axis=1)

btc_trace = go.Scatter(x=btc_usd_datasets.index, y=btc_usd_datasets['avg_btc_price_usd']) py.iplot([btc_trace])

BTC4

以上までで、分析する対象としてのビットコインデータの取得はおわりです。

しかしながら、ビットコイン以外にも面白い値動きをしている暗号通貨(アルトコイン)はたくさんあります。
次はビットコインの他に、暗号通貨取引所のCoincheckで取引されている以下の暗号通貨の時系列データを引っ張って来たいと思います。

・イーサリウム (ETH)
・イーサリウムクラシック (ETC)
・リップル (XRP)
・ネム (XEM)
・ライトコイン (LTC)
・ダッシュ (DASH)
・モネロ (XMR)

(実際に自分も暗号通貨を買っていますが、身銭を切ると学習の密度が高くなっている感覚がします。)

ただ、少し文章が長くなってしまったので、アルトコインのデータ取得は次のページに移行します。

次のページ
ビットコイン取引高日本一の仮想通貨取引所 coincheck bitcoin

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

今回は、データを収集する段階の話をしていきたいと思います。
データの収集方法は大きく分けて以下の3つがあります。

1.Web 上のデータの活用
2.センサーからのデータ収集(IoT)
3.金融系の データを収集

1.Web 上のデータの収集については 以前にまとめたものがありますので、そちらをご参照ください。

 *スクレイピングなどによるWeb上のデータ収集については別途書きたいと思います。

今回は特に、2.センサーからのデータ収集について考えていきます。
はじめにIoTの全体像を描いたうえで、センサーのデータ収集方法について書きます。

■IoTの全体像

IoTを技術の観点からみると、デバイス、ネットワーク、クラウドに分けられます。

picture_pc_875d12912da1882a6a67457f4753b7d4
出所:みずほ情報総研 みずほ産業調査 Vol.51

センサーから吸い上げた情報をネットワーク上にアップロードして、そこからクラウド等を通して様々な処理をします。今回は特にセンサーの部分に注目していきます。

picture_pc_857ee7d87482e00a2b1c4649a92b4473
出所:みずほ情報総研 みずほ産業調査 Vol.51


■センサーとは
センサーとは、wikipediaによると、"自然現象や人工物の機械的・電磁気的・熱的・音響的・化学的性質あるいはそれらで示される空間情報・時間情報を、何らかの科学的原理を応用して、人間や機械が扱い易い別媒体の信号に置き換える装置"のことです。

つまり、センサーは熱や圧力を電気信号に変換するなど、アナログ情報をデジタル情報に変換します。例えば、圧力センサーは、圧力によって、センサー内の抵抗値が変化します。その結果、センサー内を流れる電流や、電圧の値が変化します。この電流値を計測することで、間接的に圧力の値を測っています。


■センサーの未来 -トリリオンセンサー構想ー
2012年に起業家のJ. Brysek氏が、毎年1兆個を上回るセンサを活用し、社会に膨大なセンサネットワークを張り巡らせることにより、地球規模で社会問題の解決に活用しようとする“Trillion Sensors Universe”という構想を提唱しました。そこからトリリオン・センサーという言葉が生まれました。

毎年1兆個以上のセンサーを使うということは1人当たりおよそ150個のセンサーを使うことになります。
1兆個のセンサーは自動車、医療、工場など様々なところで使用されます。
自動車には、燃料噴射圧力制御やタイヤ空気監視、エアバッグや電動パワステなどに1台当たり、数10個以上のセンサーが搭載されます。今後、自動ブレーキや車線逸脱防止などにADAS(先進運転支援システム)向けのミリ波レーダーなどが加わると搭載数のさらなる増加が見込まれ、センサは車の燃費改善や安全・快適性の向上のために重要なデバイスになります。
センサー需要の高い成長率が見込まれるのは、農業・環境・防災、エネルギー・電力・ガス・水道、医療・ヘルスケア、セキュリティ、ファクトリーオートメーション等の産業用とも言われています。

*1兆個のセンサによる社会変革 ~トリリオン・センサ・サミット2015報告~ 日本政策投資銀行. 


■3Dプリンターの影響
センサーはこれまでダウンサイジングイノベーションで小型化、コストダウンを実現してきました。
コストダウンがさらに進み、今後は1つがセンサーの価格が1ドル、0.1ドル、0.01ドル、0.001ドル、さらに0.0001ドルになるとも言われています。

ただ、0.01ドルからは、従来技術の延長では実現が難しいため、nmレベルの3Dプリンターで製造します。センサーを安価に製造できると、今後はセンサーを「使い捨て」できるようになるので、医療現場など衛生面で1度しかセンサーを使わないような場面でも、センサーを使いやすくなるかもしれません。

■センサーの課題
センサーの小型化は実現されていますが、そのセンサーを起動させ続けるための「バッテリー」の問題が残っています。このバッテリーの問題を解決する方法については、次の投稿で記載します。

次回:電池革命 ー日本が賭ける全固体電池ー

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

今回は最近のニュースを題材として、今後データを扱うにあたり、必要になると思われる考え方について話を展開していきたいと思います。

 

■データで成功する企業、失敗する企業

「データには価値がない」ーそのような発言をする人に見てほしい事例があります。愛知県碧南市の旭鉄工の事例です。旭鉄工は秋葉原で仕入れた数百円の汎用センサーをベースにIoT 化を始め、最終的には設備投資で4億円、労務管理費で1億円の削減に成功しています。

このような企業とは逆に、数億円の設備投資をして、いわゆる人工知能やビッグデータのシステムを導入したにも関わらず、そのシステムを使用せずに費用だけがかかってしまったという事例が数多く存在します。

 

これらの成功事例と失敗事例を比較したときの差は何なのでしょうか。そこには、「価値設計」の考え方が重要になります。

「価値設計」とは求められる価値と、その価値を提供するための手段をつなぐ方法です。この方法としては、例えば工場内のコストカットを実現するという価値に対して、ロボットを導入したり、故障を未然に防ぐためのシステムを導入するなどといった、「価値→手段」の考え方と、技術を使って何かできないかという「手段→価値」の考え方があります。

 

ただ、後者の「手段→価値」の場合には、逆方向の「価値→手段」も考えなければ、価値設計が不十分になります。例えば、価値設計が不十分な場合によくあるのが、企業の中で「AIで何かできないか」「IoTで何か新しいことができないか」という意見が飛び交い、目的や価値を考えずに手段にこだわるといったケースです。確かに技術シーズを基に、実現できることを考えることも大事ではあるのですが、シーズ(特にAIのようなバズワードに関するもの)にこだわり過ぎて、目的を見失っているケースが存在します。AIの最先端システムを導入しなくても、実はエクセルでマクロを組めば、1時間で必要な機能を実装できたりすることもあるのです。

 

その一方で、成功事例の企業はAIやIoTなどの手段に手を出す前に、何が自社の課題なのか、AIやIoTなどの手段を用いて何を実現したいのかが明確になっていることが多いです。例えば、冒頭の旭鉄工の場合では、最初にすべきことして、「見える化」を掲げています。これによって、工場内のどこに無駄があるのかを可視化できるようにしています。この段階で、必要なものは高性能なIoT機器ではなく、1個50円の光センサーや1個250円の磁気センサーなのです。これらのセンサーによって工場内の見える化を実現し、さらに見える化した結果から、工場内の課題を洗い出し、その課題を解決する工夫がされています。その結果、最終的に5億円もの費用削減を実現しているのです。

 

このようにデータを使って成功する企業と失敗する企業には大きな差があります。そこで必要になるのは、価値設計を含む” Data Technology Management (DTM) ”の考え方だと思います。DTMとは、企業がデータを集め、データから価値を出していくために必要なマネジメントのことです。データをいかにビジネスに活かしていくか、その時に注意するべきことは何かを経営の観点から考えられる能力が求められています。データを扱うにしても、分析をするためのアルゴリズムや統計的手法の観点、データを蓄積するための基盤の観点、個人情報を扱う場合の法律的な観点、データやサービスをどのように売っていくかというビジネスの観点などなど、様々な視点が求められています。

 

■DTMの構造

DTMはManagementとData Technologyの2つから構成されると考えます。



DTM
図1:DTMの構成

それぞれの領域の要素はありますが、その中でも2つの合わさる領域において、スムーズな連携ができるか否かも重要になります。経営だけを知っている、またはデータやテクノロジーだけを知っている人では、対応できない領域が存在します。データをビジネスに活かしていくためには、ManagementとData Technologyの両方を知っている必要があります。

■DTMにおけるバリューチェーン
バリューチェーンは大きく全体管理とデータフローに分かれます。その中の構成要素を以下に記します。

●全体管理
・価値設計:(データによってどのような価値を提供するかを検討。どのプロセスを強みとするか、どのデータフローが欠けていて補完が必要か等を検討。)
・データマネジメント:(個人情報保護法、セキュリティ、データを扱う環境設定等など)

●データフロー
・収集:センサーやWebによるデータ収集、外部からのデータ購入
・蓄積:DMP(Data Management Platform)等へのデータ蓄積
・分析:前処理方法、分析手法の選定
・活用:外部へのデータの販売方法、社内でのデータ活用方法(費用削減に活用等)

図1
図2:DTMにおけるバリューチェーン

実際にプロジェクトを実行するときには、価値設計の部分は、リーン・ローンチパッドのように進める形になることが想定されます。つまり、常に顧客の声や社内の課題を聞きながら、本当に改善すべきところは何かを把握し、その部分を解決することを高速で繰り返すことが重要になります。この考え方は技術経営(MOT)の中では、一般的になっています。DTMもMOTやMBAとは切り離されたものではなく、それらの知識体系の上に、データを扱う場合の知識をアドオンしていくものと考えます。

■終わりに
今回はDTMの序章の形として、概要のみの記載にとどまっています。
今後は、この続きの内容を何かしらの形で展開します。

これから間違いなく重要になるDTMの考え方は、データに関わる多くの人が知っておく必要があると思います。
「データには価値がある」-このような言葉がより多く聞こえるように、データと最終的な価値を結び付けるDTMの考え方を、より深く広く活用していけたらと思います。


*本記事の内容は公開情報を基に考えを構築し、記載しています。
このエントリーをはてなブックマークに追加

最近、深層学習の精度を超えた手法が発表されています。
今回は、昨日(6月17日)ニュースになったDeepmindによるPredictron(自動計画+強化学習)も含めて、紹介します。
*少し長くなっておりますので、必要な部分だけ読んでいただけたらと思います。

目次
1.Predictron
2.Deepforest


1.Predictron

・Predictronとは何か
Predictronとは多段階の反応や行動を解く「自動計画」と、試行錯誤を通じて価値を最大化するような行動を学習する「強化学習」を融合した新しい人工知能技術です。

昨日のニュースで話題になりましたが、実は論文自体は、もう少し前から公開されていたようです(最初に提出されたのは、2016年12月28日のようです)。


ニュースの中では、Deepmindが構築した新しい手法について、ビリヤードを用いて検証を行ったとのことでした。
“簡易型ビリヤードで性能を検証。四つのボールをランダムに配置し、その中の白玉を転がして他のボールをコーナーに落とす。ボールを転がす角度や速度によって壁や別のボールにどう跳ね返り、ボールが転がるかAIに予測させる。その結果、50回中27回でコーナーに落とせた。従来技術では10回だった。
従来のAIでは連続的な問題を解く際に、1段階での学習を繰り返していたため、全体としての成功率が上がりづらかった。プレディクトロンでは、多段階で長めの計画を立てられるようになった。”

図5

動画:Predictron network on pool dmain


・自動計画とは何か
自動計画は英語でAutomated planning and schedulingです。
一言でいうと、
Planningでは、目的を達成するためのアクションを決めます。
Schedulingでは、決めたアクションに対して、何を、いつ、どのように実行するかを決めます。

このようにして戦略や行動順序の具体化していきます。典型的な例として、知的エージェント、自律型ロボット、無人航空機などでの利用があります。自動計画の解は複雑で未知であるため、多次元空間における発見と最適化が必要とされています。

x2


・Predictronの成果
この自動計画と強化学習を組み合わせ、PlanningとSchedulingを最適になるように学習します。
これによって、Deepmindは、深層学習(論文中では、Conventional deep neural network)を用いた方法よりも高い精度の計算結果を出すことができました。
*Convolutional Neural Networkについては、以下参照
*以下の図中、赤い線Predictronで黒い線が深層学習。縦軸が誤差の大きさ。Predictronの方が誤差が小さい。
*具体的な実験方法、前提条件につきましては、論文をご覧ください。

 
今後、Predictron(自動計画+強化学習)もさらに注目されるかもしれません。


2.Deepforest

2017年2月28日付けでarXivに投稿された ” Deep Forest: Towards An Alternative to Deep Neural Networks” (Zhi-Hua Zhou, Ji Feng) という文献があります。「Deep Neural Networkの代替へ向けて」というなかなか挑戦的なタイトルですが、本文の内容もタイトル負けしていません。

この文献の中では、”Deep forest”という方法を紹介していますが、これが何かを説明する前に、前提となる知識をインプットさせていただきます。

・決定木
決定木は上(親)から順に条件分岐(If…then…)を辿っていくことで、結果を得る手法です。

 z4

・アンサンブル学習
個々に学習した複数の識別器を融合させて汎化能力(未学習データに対する予測能力)を向上させ、一つの識別器を作成することです。
 z5

・バギング
学習データのブートストラップサンプルを用いて複数の識別器を学習させ、新しい入力データクラスは、それらの識別器の多数決で決めるという方法です。
(ブートストラップとは、サンプルを取得する方法の1つです。N個のデータからN回復元抽出を行います。サンプルしたデータを元にもどし、常にN個の同じ集合からN回サンプリングします。)

・ランダムフォレスト
ランダムフォレストは決定木を複数組み合わせて、各決定木の予測結果を多数決すること(バギング)によって結果を得ます。

以下にアルゴリズムを示します。

1. ランダムにデータを抽出する
2. 決定木を成長させる
3. 1,2ステップを指定回繰り返す
4. 予測結果を多数決することによって分類閾値(ラベル)を決定する。

図1


以上のような前提知識の準備が整ったうえで、Deep forestの説明を行います。

・Deepforestとは何か
(論文の説明上、Deepforestを用いた手法は”gcForest”として記載されているため、”gcForest”として以下説明させていただきます。)

gcForestはディープニューラルネットワークと高度に互角以上の性能を持つ決定木アンサンブル手法です。

・gcForestのメリット(論文から抜粋)
-ハイパーパラメータチューニングに多大な労力を必要とするディープニューラルネットワークとは対照的に、gcForestは訓練が非常に容易。
⇒gcForestは異なるドメインの異なるデータに適用された場合でも、ほとんど同じハイパーパラメータ設定で優れた性能を達成する。
-gcForestの訓練過程は効率的でスケーラブルである。実験においてPCでの実行時間は,GPU設備有りでのディープニューラルネットワークの実行時間と互角であり、gcForestが並列実装に適しているためその効率性の利点はより明らかとなるだろう。
-大規模な訓練データを必要とするディープニューラルネットワークとは対照的に、gcForestは小規模データしかない場合でも良く動作する。
-決定木ベースのアプローチであるため、gcForestはディープニューラルネットワークよりも論理的な解析が容易(解析の根拠がより明確)。

・gcForestアルゴリズムの構造
このgcForestでは、前述のランダムフォレストを以下の図のように何層にも重ねて計算に用いています。この段(Cascade)のようになっている層が”Deep”と呼ばれる所以です。なお、今回のDeep forestは、深層学習の一種ではなく、アンサンブル学習の一種です。深層学習については様々な定義がありますが、あくまで多層の「ニューラルネットワーク」を用いた機械学習が深層学習に該当するため、ニューラルネットワークを用いていないgcForestは深層学習に分類されません。

 図2
図:gcForestの全体像(カスケード構造の説明)
(カスケードの各階層(Level)は2つのランダムフォレスト(青色)と2つの完全ランダム決定木フォレスト(黒)を含む。予測すべき3つのクラスがあるものとする。それ故、各フォレストは3次元クラスベクトルを出力し、その後それらは元入力の再表現のために結合される。)

・gcForestの成果
gcForestはDeep neural networkと比べて互角、またはより優れた性能を達成しています。以下にその成果を示します。画像分類、顔認識、音楽分類、ジェスチャー認識等でgcForestは優れた性能を示していますが、以下は顔認識の精度を一例として示しています。精度のの詳細につきましては、原文をご覧いただけたらと思います。

顔認識: ORLデータセットでのテストaccuracyの比較
 図4


・実際のプログラムの中身
gcforestを実装した内容が以下のURLに記載されています。

このgcForestは良い結果を出していますが、色々と議論を呼んでいるようです。
https://www.reddit.com/r/MachineLearning/comments/5x4a52/r_deep_forest_towards_an_alternative_to_deep/


■おわりに
今回はPredictronとDeepforestを紹介しました。しかし、常にこれらの手法が最適という訳ではありません。深層学習を精度で超えた手法が出てきたといえども、最終的には分析するデータのタイプ、求められる精度、結果を出すまでの期間等によって、最適な分析手法を選ぶことが大事なのかなと思います。
今後も新たな手法が、AIの領域を発展させることを期待しています。




参考文献

・The Predictron: End-To-End Learning and Planning
 https://openreview.net/pdf?id=BkJsCIcgl

・グーグル子会社、深層学習より高い予測性能を実現
 http://newswitch.jp/p/9402 ニュースイッチ

・Lecture slides for Automated Planning:Theory and Practice
 http://slideplayer.com/slide/4218821/

・Convolutional Neural Networkとは何なのか
 http://qiita.com/icoxfog417/items/5fd55fad152231d706c2

・Deep Forest: Towards An Alternative to Deep Neural Networks
 https://arxiv.org/abs/1702.08835

・深層学習 機械学習プロフェッショナルシリーズ

・はじめてのパターン認識

・Qiita:Deep Forest :Deep Neural Networkの代替へ向けて
 http://qiita.com/de0ta/items/8681b41d858a7f89acb9
・Slide share “Deep forest”
 https://www.slideshare.net/naotomoriyama/deep-forest-74148319

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

↑このページのトップヘ