scikit-learnとTensorFlowを比較

    「scikit-learn」と「TensorFlow」の概要

    「scikit-learn」と「TensorFlow」は、主要な機械学習(ディープラーニング)ライブラリです。

    ■「scikit-learn」とは

    scikit-learn(サイキットラーン)は、オープンソースのPython機械学習ライブラリです。

    「分類回帰クラスタ分析」「ニューラルネットワーク」「サポートベクターマシン」「ランダムフォレスト」「k近傍法」などの機械学習アルゴリズムを幅広くサポートしており、手軽に実装できる特徴があります。

    プロトタイピングとして開発しやすく、大量データを扱わない場合にはそのまま実用できる機能を提供します。

    ■「TensorFlow」とは

    TensorFlow(テンソルフロー)は、Googleのディープラーニングライブラリです。

    データフローグラフを使用したライブラリで、複雑なネットワークを分かりやすく記述できます。

    TensorFlowの特徴として「データフローグラフによる柔軟性」「ローレベルオペレータも手書きできる汎用性」「高いパフォーマンス」「スケーラビリティ」「研究レベルから実プロダクトまで扱える効率性」などがあります。

    ユースケース比較

    ■機械学習向き「scikit-learn」

    scikit-learnは複数の機械学習アルゴリズムを含むライブラリです。数行のコードでモデルオブジェクトを定義し、それを使用して一連の点を近似したり、値を予測できます。

    scikit-learnは主に、中小規模の実用的な機械学習プロジェクトでの利用に向いています。

    特に「データ量が少ないケース」や「ユーザーがデータを手動で処理して適切なモデルを選択する必要があるケース」に適しています。

    ■ディープラーニング向き「TensorFlow」

    TensorFlowは、低レベルのライブラリであり、「add」「matmul」「concat」などの単純な演算子のセットを使用して機械学習モデルを構築できます。

    TensorFlowは有効な特徴をデータから自動的に抽出する機能を有しているため、scikit-learnが有している「次元圧縮」「特徴選択」などの特徴エンジニアリング機能は提供していません。

    TensorFlowは特に「ディープラーニングアルゴリズム実装」に非常に適しています。GPUの処理能力を利用して効率的なトレーニングを実施できます。

    また、「大量データを含むケース」や「最終的に高い精度を必要とするケース」での利用にも適しています。

     

    参考元サイト
    medium.com →Differences Between Tensorflow and Scikit-Learn
    mc.ai →Difference between scikit-learn and tensorflow

    ※定期的にメンテナンスを実施しておりますが、一部情報が古い場合がございます。ご了承ください。

    「scikit-learn」基本情報

    ■概要

    scikit-learn(サイキットラーン)とは、Pythonのオープンソース機械学習ライブラリです。

    ■基本説明

    scikit-learnは、Python実装の機械学習ライブラリです。

    機械学習アルゴリズムを幅広くサポートしています。分類回帰クラスタ分析(ニューラルネットワーク、サポートベクターマシン、ランダムフォレスト、k近傍法など)を手軽に実装できます。

    プロトタイピングとして開発しやすく、大量データを扱わない場合には、そのまま実用できる機能を提供します。

    ■オフィシャルサイト情報

    オフィシャルサイト

    →scikit-learn

    ライセンス情報

    scikit-learnのライセンスは「New BSD License」です。

    詳細について、こちらを参照ください。
    →GitHub →scikit-learn/scikit-learn →COPYING

    ダウンロード

    →scikit-learn →Installing scikit-learn

    導入事例

    「Evernote」などへの導入実績があります。

    →scikit-learn →Who is using scikit-learn?

    ■同様製品

    同様な機能を提供する製品として、次のようなものがあります。

    オープンソース製品:「Caffe」「Theano」「Chainer​」など。

    「scikit-learn」の主な特徴

    ■数値計算ライブラリ連携

    他のPython数値計算ライブラリ(NumPy、SciPy、Pandas、Matplotlibなど)と連携しやすいように設計されています。

    「NumPyで作成した行列を機械学習の入力データとして利用する」などの連携を行えます。

    ■依存するライブラリ

    scikit-learnは、次のライブラリに依存します。線形代数演算の事実上の標準技術です。
    ・BLAS(線形代数ライブラリの標準仕様)
    ・LAPACK(BLASを基礎として高度な線形代数計算)

    「scikit-learn」の主な機能

    ■分類機能

    ラベルとデータを学習し、対象データのラベル予測を行なう機能です。対象オブジェクトがどのカテゴリに属しているかを識別します。

    「スパム検出」「画像認識」などの用途に向いています。

    サポートアルゴリズム

    ・SVM(サポートベクトルマシン、線形サポートベクトルマシン)
    ・K近傍法
    ・ランダムフォレスト

    ■回帰機能

    回帰データを学習して、実数値を予測する機能です。オブジェクトに関連付けられた連続値の属性を予測します。

    「薬物応答予測」「株価予測」などの領域に向いています。

    サポートアルゴリズム

    ・回帰
    ・ラッソ回帰
    ・リッジ回帰
    ・SVR

    ■クラスタリング機能

    似ているデータをまとめてデータ構造を発見する機能です。類似オブジェクトセットに対する自動的グループ化を行います。

    「顧客セグメンテーション」「実験結果のグループ化」などの領域に向いています。

    サポートアルゴリズム

    ・クラスタ分析(Clustering)
    ・K平均法(KMeans)
    ・混合ガウス分布(GMM)
    ・平均変位法(MeanShift)

    ■次元削減機能

    データの次元を削減して、「主成分分析」「要因発見」「考慮するランダム変数の数を減らす」などを行う機能です。次段階の分析手法の事前データ処理としても使われます。

    サポートアルゴリズム

    ・主成分分析(PCA)
    ・非負値行列因子分解(NMF)

    ■モデル選択機能

    パラメータとモデルの比較/検証/選択を行なう機能です。

    「パラメータ調整による精度向上」などに利用します。


    「TensorFlow」基本情報

    ■概要

    TensorFlow(テンソルフロー)とは、Googleのディープラーニングライブラリです。データフローグラフを使用したライブラリで、複雑なネットワークを分かりやすく記述できます。

    ■「ディープラーニング」とは

    機械学習とは、人間が学習するのと同じように機械が学習することを目指した人工知能研究の1分野です。ディープラーニングは機械学習の中の1つです。

    ディープラーニングとは、ニューロン(神経細胞)が信号の受け渡しをすることにより情報処理をしているという脳の仕組みを、ニューラルネットワークとしてコンピュータ内に実現し、それを多層化したものです。

    ニューラルネットワークは、入力層と出力層の間にある中間層(情報識別層)が多いほど、より正確な認識ができるようになります。

    ディープラーニングは、音声認識、自然言語処理(翻訳)、Google検索エンジン(画像検索/ウェブ検索最適化)、Googleフォト(顔認識/被写体認識)、Gmail(メール分別)、Inbox(メール自動返信文作成)、YouTube、広告事業など、Googleのほとんどのサービスを支えるコア技術となっています。

    →OSS×CloudNews →ざっくりわかる「機械学習」---第2回 「機械学習」「ディープラーニング」の違い

    ■基本説明

    「TensorFlow」の読み方は、日本では「テンソルフロー」が多く、英語圏では「テンソーフロー」が多いようです。

    「Tensor(テンソル)」とは、線形の量を表す概念で、多次元データ構造を表すものです。「TensorFlow」は、多次元データ構造を流れるように処理し、ディープラーニングを行います。

    TensorFlowの特徴として、データフローグラフによる柔軟性、ローレベルオペレータも手書きできる汎用性、高いパフォーマンス、スケーラビリティ、研究レベルから実プロダクトまで扱える効率性などがあります。

    利用方法例として、画像に写っているものを認識して文章化するアルゴリズム、各種数値計算、自然言語処理(翻訳)、など多岐におよび、新しい応用分野が広がり続けています。

    コア部分はC++で実装されていて、ユーザ向けにPythonのインターフェースが用意されています。

    ■経緯

    2011年、Googleは「DistBelief」というディープラーニング基盤を開発し、音声認識/イメージ検索などのサービスの性能向上に大きく貢献しました。しかし、各プロダクトとの結合が強く汎用性が低かったため、公開できませんでした。

    そのような問題を解決し、依存性を排除し、汎用性を高め、性能を高めて開発されたのが「TensorFlow」です。「TensorFlow」の性能は、「DistBelief」の2倍とされています。

    2015年11月、「TensorFlow」がオープンソース公開されました。

    ■ユースケース

    利用方法例として、次のようなものが想定されています。
    ・顔認識
    ・音声認識
    ・被写体認識
    ・画像検索
    ・画像を認識して文章化するアルゴリズム
    ・各種数値計算
    ・自然言語処理(翻訳)
    ・リアルタイム翻訳
    ・Web検索最適化
    ・メール分別
    ・メール自動返信文作成
    ・自動運転車 など

    主な特徴

    ■データフローグラフ

    TensorFlowの処理は、データフローグラフの「構築」+「実行」の2フェーズで行われます。

    データの流れ(フロー)を定義する「グラフ」を基本としてデータの処理を行います。

    ■「Deep Flexibility」(深い柔軟性)

    柔軟にニューラルネットワークを構築できます。C++で低レベル処理を書くこともできます。

    ■「True Portability」(真の携帯性)

    TensorFlowではCPU用/GPU用でコードを分ける必要はありません。移植性にも優れています。

    ■「Connect Research and Production」(研究と製品の接続)

    Googleでは、研究者もエンジニアも同じくTensorFlowを用いているようです。このような使い方をすることで、プロダクト転用が容易になります。

    ■スケーラビリティ

    モバイル端末、PC、ハイエンドサーバなど各マシンのリソースに応じてスケールします。

    ■チュートリアル

    各種チュートリアル用データセットが用意されていて、すぐに試せます。
    ・MNIST:手書きの数字を判別
    ・CNN:画像認識
    ・Word2Vec:各単語の関係を学習
    ・RNN:文章から次の単語予測
    ・Seq2Seq Model:フランス語を英語に翻訳 など

    ■簡易/柔軟な記述方式

    シンプルかつ分かりやすいコーディングで記述できます。自動微分の機能が内蔵されており、計算処理と目的関数を定義するだけで学習できます。

    ■Webインターフェイス「TensorBoard」

    Webインターフェイスで、学習状況確認、ニューラルネットワーク可視化ができます。コードだけでは分かりづらいモデルをグラフ化できます。

    補足情報

    ■同様製品

    同様な機能を提供する製品として、次のようなものがあります。

    商用製品:IBM「Watson」など。

    オープンソース製品:「​Chainer」「Caffe」「Microsoft Cognitive Toolkit」など。

    ■オフィシャルサイト

    オフィシャルサイト

    →TensorFlow

    ライセンス情報

    TensorFlowのライセンスは「Apache License 2.0」です。

    詳細について、こちらを参照ください。
    →GitHub →tensorflow →LICENSE

    ダウンロード

    →TensorFlow →Install TensorFlow

    ※定期的にメンテナンスを実施しておりますが、一部情報が古い場合がございます。ご了承ください。