初心者向けのオープンソース機械学習フレームワーク、Scikit-learnについて

初心者向けのオープンソース機械学習フレームワーク、Scikit-learnについて

Python 言語に精通している研究者は、オープンソースの Python ベースの科学計算ツールキットである SciPy をご存知かもしれません。開発者は SciPy をベースに、さまざまなアプリケーション分野向けに多数のブランチ バージョンを開発しており、これらは総称して Scikits (SciPy ツールキット) と呼ばれています。これらのブランチバージョンの中で最も有名なのは、機械学習に特化した Scikit-learn です。

Scikit-learn プロジェクトは、2007 年にデータ サイエンティストの David Cournapeau によって最初に開始されました。NumPy や SciPy などの他のパッケージのサポートが必要です。これは、機械学習アプリケーション専用に Python 言語で開発されたオープン ソース フレームワークです。

他の多くのオープンソース プロジェクトと同様に、Scikit-learn は現在主にコミュニティ メンバーによってメンテナンスされています。おそらくメンテナンスコストの制約のため、Scikit-learn は他のプロジェクトよりも保守的です。これは主に 2 つの側面に反映されています。1 つ目は、Scikit-learn は機械学習の分野以外には拡張を行わないこと、2 つ目は、Scikit-learn は広く検証されていないアルゴリズムを決して使用しないことです。

この記事では、Scikit-learn フレームワークの 6 つの主要機能、Scikit-learn をインストールして実行するための一般的な手順を簡単に紹介し、その後の Scikit-learn のより詳細な学習のための参考資料を提供します。原文は、infoworld ウェブサイトの特別寄稿者である Martin Heller 氏によるものです。彼は、1986 年から 2010 年までの 20 年以上にわたり、データベース、一般ソフトウェア、および Web 開発に携わり、豊富な開発経験を持っています。

Scikit-learnの6つの主要機能

Scikit-learn の基本機能は、主に分類、回帰、クラスタリング、データ次元削減、モデル選択、データ前処理の 6 つの部分に分かれています。

分類とは、特定のオブジェクトが属するカテゴリを識別することを指します。これは、教師あり学習のカテゴリに属します。最も一般的なアプリケーション シナリオには、スパム検出や画像認識などがあります。現在、Scikit-learn に実装されているアルゴリズムには、サポート ベクター マシン (SVM)、最近傍法、ロジスティック回帰、ランダム フォレスト、決定木、多層パーセプトロン (MLP) ニューラル ネットワークなどがあります。

Scikit-learn 自体はディープラーニングや GPU アクセラレーションをサポートしていないため、ここでの MLP の実装は大規模な問題の処理には適していないことに注意してください。関連するニーズを持つ読者は、Python を適切にサポートする Keras や Theano などのフレームワークを調べることができます。

回帰とは、特定のオブジェクトに関連付けられた連続値属性を予測することを指します。最も一般的なアプリケーション シナリオには、薬物反応の予測や株価の予測などがあります。現在、Scikit-learn には、サポート ベクター回帰 (SVR)、リッジ回帰、Lasso 回帰、Elastic Net、最小角回帰 (LARS)、ベイズ回帰、およびさまざまな堅牢な回帰アルゴリズムなどのアルゴリズムが実装されています。ご覧のとおり、ここで実装されている回帰アルゴリズムは開発者のほぼすべてのニーズをカバーしており、さらに重要なことに、Scikit-learn は各アルゴリズムに対してシンプルで明確なユースケースのリファレンスも提供しています。

クラスタリングとは、類似した属性を持つ特定のオブジェクトを自動的に識別し、セットにグループ化することを指します。これは、教師なし学習のカテゴリに属します。最も一般的なアプリケーション シナリオには、顧客のセグメンテーションとテスト結果のグループ化が含まれます。現在、Scikit-learn に実装されているアルゴリズムには、K-means クラスタリング、スペクトル クラスタリング、平均シフト、階層的クラスタリング、DBSCAN クラスタリングなどがあります。

データの次元削減とは、主成分分析 (PCA)、非負値行列因子分解 (NMF)、特徴選択などの次元削減手法を使用して、考慮するランダム変数の数を減らすことを指します。主な適用シナリオには、視覚化処理と効率向上が含まれます。

モデル選択とは、与えられたパラメータとモデルを比較、検証、選択することを指します。その主な目的は、パラメータ調整を通じて精度を向上させることです。 Scikit-learn によって現在実装されているモジュールには、グリッド検索、クロス検証、予測誤差評価のためのさまざまなメトリック関数が含まれます。

データ前処理とは、データの特徴抽出と正規化を指し、機械学習プロセスにおける最初の、そして最も重要なステップです。ここでの正規化とは、入力データを平均ゼロ、重み分散が単位の新しい変数に変換することを意味します。ただし、ほとんどの場合、正確にゼロにすることは不可能であるため、許容範囲が設定され、通常は 0 から 1 の間に収まる必要があります。特徴抽出とは、テキストまたは画像データを機械学習に使用できる数値変数に変換することを指します。

ここでの特徴抽出は、前述のデータ次元削減における特徴選択とは大きく異なることに注意することが重要です。特徴選択は、不変、共変、または統計的に重要でない特徴を削除することで機械学習を改善する方法です。

要約すると、Scikit-learn は、データの次元削減、モデル選択、特徴抽出、および正規化のためのアルゴリズム/モジュールの完全なセットを実装します。ステップバイステップの参照チュートリアルはありませんが、Scikit-learn は各アルゴリズムとモジュールの豊富な参照例と詳細なドキュメントを提供します。

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

前述のとおり、Scikit-learn は NumPy や SciPy などの他のパッケージのサポートを必要とするため、Scikit-learn をインストールする前に、いくつかのサポート パッケージを事前にインストールする必要があります。具体的なリストとチュートリアルについては、Scikit-learn の公式ドキュメント (http://scikit-learn.org/stable/install.html) を参照してください。以下では、Python、NumPy、SciPy などの 3 つの必須パッケージのインストール手順のみを示します。

Python: https://www.python.org/about/gettingstarted/

numpy: http://www.numpy.org/

scipy: http://www.scipy.org/install.html

すべてのサポート パッケージが完全にインストールされていると仮定すると、Scikit-learn のインストールには単純な pip コマンドのみが必要です (conda コマンドを使用することもできます。詳細については公式ドキュメントを参照してください)。

  1. $ sudo pip インストール -U scikit-learn

インストール プロセス中に発生する権限の問題を回避するために、ここで sudo コマンドが追加されています。ユーザーがすでに管理者権限を確保している場合は省略できます。

もちろん、開発者は GitHub オープンソース プラットフォームから Scikit-learn ソース コードをダウンロードして解凍し、ルート ディレクトリで make と入力して実行ファイルを自分でコンパイルして接続することもできます。効果は同じです。さらに、テストの利便性を確保するために、上級ユーザーは Python テスト フレームワーク nose をインストールすることもできます。詳細なインストール方法については、公式の手順 (http://nose.readthedocs.io/en/latest/) を参照してください。

Jupyter Notebook ツールを使用して Scikit-learn の例を実行するプロセスも非常に簡単です。ユーザーは、公式の例ライブラリ (http://scikit-learn.org/stable/auto_examples/index.html#general-examples) で例を選択し、そのページから Python ソース コードと IPython ノートブック ファイルをダウンロードして、Jupyter Notebook ツールで実行するだけです。クロスバリデーション予測例を選択した場合、その動作のスクリーンショットが下に表示されます。

元の著者はここで、Scikit-learn は彼がテストした中で最もシンプルで使いやすい機械学習フレームワークであると述べています。 Scikit-learn の例の実行結果はドキュメントの説明とまったく同じであり、API インターフェースは合理的に設計され、一貫性が高く、「インピーダンス不一致」のデータ構造はほとんどないと彼は言いました。機械学習の研究に、この完全に機能し、ほぼバグのないオープンソース フレームワークを使用することは、間違いなく幸せなことです。

Scikit-learn でさらに深く学ぶ

前述のように、Scikit-learn は各アルゴリズムとモジュールについて豊富な参考例​​と詳細なドキュメントを提供しています。公式統計によると、例は 200 以上あります。また、わかりやすくするために、ほとんどの例では、Matplotlib によって描画されたデータ チャートが少なくとも 1 つ提供されています。これらは、Scikit-learn フレームワークを学習するために公式に提供されている最も直接的で効果的な学習教材です。

科学的データ処理の応用シナリオについては、公式ではさらに詳細かつ包括的な参考チュートリアルも提供しています。科学的データ処理のための統計学習に関するチュートリアルには、統計学習、教師あり学習、モデル選択、教師なし学習などのいくつかの部分が含まれています。内容は包括的で、説明は詳細で、実際のデータ、コード、グラフが使用されています。

さらに、チュートリアルでは、下の図に示す 4 つの異なる SVM 分類器の比較など、テキスト関連の例も示します。

ここで指摘しておくべきことは、公式の Scikit-learn の例を実行すると通常は一貫した結果が得られますが、ほとんどの場合、システムから警告メッセージが表示されるということです。警告メッセージが表示される理由は 2 つあると著者は考えています。1 つは Apple の vecLib フレームワーク自体が Scikit-learn を適切にサポートしていないこと (著者は MacOS を使用)、もう 1 つはサンプルで使用されている Python バージョンが初期バージョンである可能性があるのに対し、実際に実行されているバージョンは最新バージョンであることです。たとえば、次の図は、Scikit-learn の公式ページには表示されない、Python 2.7.10 を使用したときにスローされる警告メッセージを示しています。

一般的に、機械学習専用の Python オープンソース フレームワークとして、Scikit-learn は開発者に一定の範囲で非常に優れたサポートを提供できます。さまざまな成熟したアルゴリズムを内部に実装しており、インストールと使用が簡単で、サンプルが豊富で、非常に詳細なチュートリアルとドキュメントが用意されています。

一方、Scikit-learn にも欠点はあります。たとえば、正確な画像分類や信頼性の高いリアルタイムの音声認識や意味理解など、現在すでに広く使用されている技術であるディープラーニングや強化学習はサポートされていません。また、グラフィカルモデルやシーケンス予測には対応しておらず、Python以外の言語には対応しておらず、PyPyにも対応しておらず、GPUアクセラレーションにも対応していません。

Scikit-learn のパフォーマンスを心配する人もいるかもしれません。ここで指摘しておきたいのは、多層ニューラル ネットワークの関連アプリケーションを考慮しなければ、Scikit-learn のパフォーマンスは非常に優れているということです。その理由は、一方では内部アルゴリズムの実装が非常に効率的であり、他方では Cython コンパイラーに起因する可能性があるからです。Cython を使用して Scikit-learn フレームワーク内で C 言語コードを生成することにより、Scikit-learn はパフォーマンスのボトルネックのほとんどを排除します。

明確にしておきたいのは、Scikit-learn は一般的にディープラーニングの問題には適していないものの、一部の特殊なシナリオでは Scikit-learn を使用するのが賢明な選択であるということです。たとえば、さまざまなオブジェクトを接続する予測関数を作成する必要がある場合や、ラベルのないデータセット内のさまざまなオブジェクトを分類するモデルをトレーニングする必要がある場合、Scikit-learn では、複雑なニューラル ネットワークの何十層も構築する必要なく、単純な古い機械学習モデルだけでこれらのシナリオをうまく解決できます。

Scala 言語が好きな人が Spark ML を選択し、グラフを描いたり、時々 Python/R 言語のコードを少し書いたりするのが好きな人が Microsoft Cortana と Azure を選択するのと同じように、Python 言語の熱心なファンにとっては、さまざまな機械学習ライブラリの中で Scikit-learn が最良の選択肢となるかもしれません。

<<:  ディープラーニングを実践するための7つのステップ

>>:  将来の人々は現在のロボットをどのように見るでしょうか?

ブログ    
ブログ    

推薦する

テクノロジーはどのようにして人々を怠惰にするのでしょうか?

過去数十年にわたり、技術の進歩は私たちの生活、仕事、コミュニケーションの方法に革命をもたらしました。...

ニューヨーク大学のチームは、自然言語を使ってチャットボットChatGPTを使ってマイクロプロセッサをゼロから設計した。

6月19日、生成型人工知能がハードウェア設計などの分野に参入し始めました。最近、ニューヨーク大学の...

人工知能の進歩:ロボットの台頭

人工知能の革新により、よりスマートなロボットが開発されました。ロボットはコンピューターによってプログ...

歩行者の軌道予測に効果的な方法と共通基本方法は何ですか?トップカンファレンスの論文を共有しましょう!

この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...

...

脳も学習を強化しています! 「価値判断」は脳によって効率的にコード化され、ニューロンに公開される

[[437266]]私たち一人ひとりは、人生において、「今夜何を食べるか」「明日はどこに遊びに行くか...

世界を変えるために活動する5つのAIスタートアップ

ディープラーニングとニューラル ネットワークの進歩により、自然言語処理とコンピューター ビジョンに大...

機械学習の教科書に出てくる7つの典型的な問題

[[201516]]機械学習について学びたい、または機械学習に専念することを決心した場合、すぐにさま...

将来スマートフォンは消滅するのでしょうか? Huaweiがそれに代わるスマートフォンを発売します!

スマートフォンの登場と普及は人々の生活に大きな楽しさと便利さをもたらしました。携帯電話がもっとスマー...

...

LianjiaのFeng Yang氏:不動産業界でデータと機械学習が輝く

[51CTO.comより引用] 2017年12月1日~2日、51CTO主催のWOTDグローバルソフト...

ビッグデータアルゴリズムのジレンマ

2013年、米国で窃盗罪で有罪判決を受けた男性がウィスコンシン州の裁判所に訴訟を起こしたという物議を...

コンピュータビジョンにおける物体検出のためのデータ前処理

この記事では、コンピューター ビジョンにおけるオブジェクト検出問題を解決するときに画像データに対して...

人工知能を導入できるいくつかのアプリケーション

人工知能は長年にわたって世界を支配しており、さまざまな分野における主要な問題が AI を使用して解決...