レビュー:Scikit-learnはよりシンプルな機械学習に輝いています

Scikitsは、科学計算用のPythonライブラリであるSciPyを中心に構築されたPythonベースの科学ツールボックスです。Scikit-learnは、機械学習(分類、回帰、クラスタリング、次元削減、モデル選択、前処理)に焦点を当てたオープンソースプロジェクトです。これはかなり保守的なプロジェクトであり、保守性と限られた開発者リソースの理由から、スコープクリープの回避と実証されていないアルゴリズムへのジャンプにかなり注意を払っています。一方、堅実なアルゴリズムの優れた選択肢があり、内部ループなどの高速である必要がある関数にはCython(Python-to-Cコンパイラ)を使用します。

Scikit-learnがカバーしていない領域には、深層学習、強化学習、グラフィカルモデル、シーケンス予測があります。Python内およびPython用として定義されているため、他の言語用のAPIはありません。Scikit-learnは、依存関係のNumPyとSciPyがPyPyを完全にサポートしていないため、Pythonの実装をジャストインタイムで高速にコンパイルするPyPyをサポートしていません。

Scikit-learnは、複雑さとそれがもたらすマシンの依存関係に関係する複数の理由から、GPUアクセラレーションをサポートしていません。繰り返しになりますが、ニューラルネットワークを除いて、Scikit-learnはGPUアクセラレーションをほとんど必要としません。

Scikit-learn機能

すでに述べたように、Scikit-learnには、分類、回帰、クラスタリング、次元削減、モデル選択、および前処理のためのアルゴリズムが豊富に用意されています。オブジェクトが属するカテゴリを識別することであり、教師あり学習と呼ばれる分類領域では、サポートベクターマシン(SVM)、最近傍法、ロジスティック回帰、ランダムフォレスト、決定木などを実装します。多層パーセプトロン(MLP)ニューラルネットワーク。

ただし、Scikit-learnによるMLPの実装は、大規模なアプリケーションを明確に対象としていません。大規模なGPUベースの実装とディープラーニングについては、KerasやTheanoなどのPython対応のディープニューラルネットワークフレームワークを含む、Scikit-learnの多くの関連プロジェクトをご覧ください。

オブジェクトに関連付けられた連続値属性(株式の価格など)を予測する回帰の場合、Scikit-learnにはサポートベクター回帰(SVR)、リッジ回帰、ラッソ、エラスティックネット、最小角度回帰(LARS)があります。 )、ベイジアン回帰、さまざまな種類のロバスト回帰など。これは実際には、ほとんどのアナリストが望むよりも多くの回帰アルゴリズムの選択肢ですが、含まれているそれぞれに適切なユースケースがあります。

同様のオブジェクトが自動的にセットにグループ化される教師なし学習手法であるクラスタリングの場合、Scikit-learnには、k-means、スペクトルクラスタリング、平均シフト、階層的クラスタリング、DBSCAN、およびその他のアルゴリズムがあります。繰り返しになりますが、保守的なアルゴリズムの全範囲が含まれています。

次元削減とは、主成分分析(PCA)や非負行列因子分解(NMF)などの分解手法、または特徴選択手法を使用して、考慮する確率変数の数を減らすことです。モデルの選択とは、パラメーターとモデルの比較、検証、および選択に関するものであり、グリッド検索、相互検証、メトリック関数などのアルゴリズムを使用します。どちらの分野でも、Scikit-learnには、簡単にアクセスできるAPIに、実績のあるすべてのアルゴリズムとメソッドが含まれています。

特徴抽出と正規化を含む前処理は、機械学習プロセスの最初で最も重要な部分の1つです。正規化は、特徴を新しい変数に変換します。多くの場合、平均と単位の分散はゼロですが、特定の最小値と最大値の間にある場合もあります。多くの場合、0と1です。特徴の抽出により、テキストまたは画像が機械学習に使用できる数値に変わります。ここでも、Scikit-learnは、このスモーガスボードで期待されるすべてのおいしいクラシックな料理を提供します。あなたはあなたにアピールするものを自由に集めることができます。

特徴抽出は、前述の次元削減で説明した特徴選択とはまったく異なることに注意してください。特徴選択は、不変、共変、または統計的に重要でない特徴を削除することによって学習を改善する方法です。

要するに、Scikit-learnには、次元削減、モデル選択、特徴抽出、および正規化のためのアルゴリズムとメソッドの完全なセットが含まれていますが、例の優れたコレクションと優れたドキュメント以外に、これらを達成するためのガイド付きワークフローはありません。

Scikit-learnのインストールと実行

私のScikit-learnのインストールは、これまでで最も簡単な機械学習フレームワークのインストールだったかもしれません。すでにすべての前提条件(Python、Numpy、Scipy)がインストールされており、十分に最新であるため、次の1つのコマンドが必要でした。

 $ sudo pip install -U scikit-learn

OK、初めて忘れたので、2つのコマンドが必要sudoでした。

それでScikit-learn0.18.1ができました。また、GitHubリポジトリをチェックアウトし、ノーズテストフレームワークをインストールして、リポジトリのルートに変更して入力するだけの簡単なソースからScikit-learnの開発バージョンを構築しましたmake。Pythonのコンパイル、すべてのCファイルの生成とコンパイル、アセンブリのリンク、およびすべてのテストの実行にはしばらく時間がかかりましたが、介入は必要ありませんでした。

私の最初のScikit-learnの例を実行することも非常に簡単でした。一般的な例のページから、相互検証された予測をプロットするための例をクリックし、ノートブックを読み、PythonソースコードとJupyterノートブックをダウンロードして実行しました。 Pythonソースは数秒間動き回り、警告メッセージを生成し、グラフをポップアップしました。下の図に示すように、Jupyterノートブックをインタラクティブに実行したときも基本的に同じことをしました。

Scikit-learnは、私がテストしたすべての機械学習フレームワークの中で開発のしやすさで最高の評価を得ています。これは主に、アルゴリズムが宣伝および文書化されたとおりに機能し、APIが一貫して適切に設計されており、「インピーダンスの不一致」がほとんどないためです。データ構造。機能が完全に肉付けされ、バグが完全に洗い流されたライブラリで作業することは喜ばしいことです。

Scikit-learnの学習

Scikit-learnのドキュメントは優れており、例は多く、合計で約200です。ほとんどの例には、Matplotlibを使用して分析されたデータから作成された少なくとも1つのグラフが含まれています。これらはすべて、ライブラリの開発のしやすさと学習のしやすさに貢献しています。

1つの長いチュートリアル「科学データ処理のための統計学習に関するチュートリアル」があり、5つのセクションとヘルプの検索に関する付録があります。このチュートリアルは、基本的な概念をカバーし、実際のデータ、コード、およびグラフを使用して例を示すのに非常に優れています。また、テキストに関連する例も示しています。たとえば、次の図に示す4つの異なるSVM分類器の比較です。

私が取り組んだ例はすべて、彼らのWebページでかなり明確でした。多くの場合、サンプルをダウンロードして実行すると、Webページに表示されていない警告がスローされますが、常に同じ結果が生成されます。クロスバリデーションされた予測をプロットするためのJupyterノートブックの出力を示す上記の最初の図は良い例です。

警告のほとんどは、ApplevecLibフレームワークの欠陥とPythonライブラリの進化に起因すると考えています。一部は、Webページに使用されたどのバージョンにも存在しなかったPython2.7.10の警告のようです。次の図にはそのような警告があります。対応するWebページはそうではありません。

意図的にスコープを制限した機械学習用のPythonライブラリとして、Scikit-learnは非常に優れています。統合されたグラフィックスを備えた、確立されたアルゴリズムの幅広い品揃えがあります。インストール、学習、使用は比較的簡単で、優れた例とチュートリアルがあります。

一方、Scikit-learnはディープラーニングや強化学習をカバーしていないため、正確な画像分類や信頼性の高いリアルタイムの言語解析や翻訳など、現在の難しいが重要な問題は除外されます。さらに、グラフィカルモデルやシーケンス予測が含まれておらず、Python以外の言語から実際に使用することはできず、PyPyやGPUをサポートしていません。

グリップの爪では、Scikit-learnがニューラルネットワーク以外の機械学習で達成するパフォーマンスは、PyPyやGPUの高速化がなくても、かなり良好です。Pythonは、多くの場合、インタープリターに期待されるよりも圧縮されており、Cythonを使用して内部ループのCコードを生成すると、Scikit-learnのボトルネックのほとんどが解消されます。

明らかに、ディープラーニングに興味がある場合は、他の場所を探す必要があります。それにもかかわらず、さまざまな観測値をリンクする予測関数の構築から、観測値の分類、ラベルのないデータセットでの構造の学習まで、多くの問題があります。これらの問題は、数十層のニューロンを必要とせずに、単純な古い機械学習に役立ちます。これらの領域では、Scikit -学ぶことはとても良いです。

Pythonのファンなら、Scikit-learnが普通の機械学習ライブラリの中で最良の選択肢かもしれません。Scalaを好む場合は、SparkMLの方が適している可能性があります。また、図を描いたり、PythonまたはRのスニペットをときどき作成して学習パイプラインを設計したい場合は、Microsoft Cortana Analytics Suite、特にAzure Machine LearningStudioが好みにぴったり合う可能性があります。

---

費用:無料のオープンソース。 プラットフォーム: Python、NumPy、SciPy、およびMatplotlibが必要です。リリースは、MacOS、Linux、およびWindowsで利用できます。

スコアカード モデルとアルゴリズム(25%) 開発のしやすさ(25%) ドキュメント(20%) パフォーマンス(20%) 導入のしやすさ(10%) 総合スコア(100%)
Scikit-learn 0.18.1 9 9 9 8 9 8.8