初心者向けのオープンソース機械学習フレームワーク、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つのステップ

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

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

復旦大学のチームが中国の医療・健康パーソナルアシスタントをリリースし、47万件の高品質データセットをオープンソース化

遠隔医療の普及に伴い、便利で効率的な医療サポートを求める患者にとって、オンライン医療相談が第一の選択...

AIと行動科学がワクチン接種への躊躇にどう対処できるか

Fractal Analytics の共同創設者 Ram Prasad 氏は、AI が問題領域の特定...

Go 言語アルゴリズムの美しさ - 基本的なソート

[[404642]]この記事はWeChatの公開アカウント「roseduanの執筆場所」から転載した...

これらの10の機械学習手法をマスターすれば、あなたはサークルで最も人気のある人になるでしょう

科学研究でも産業界でも、機械学習はホットな話題であり、新しい機械学習手法が次々と登場しています。機械...

GPT-4+Midjourney がコードなしで「Angry Pumpkin」を作成!実際の経験:閾値は低くなく、再現が難しい

市販の AI ツールを使えば、自分でコードを 1 行も書かずに完全な「Angry Birds」を作れ...

Microsoft は、全二重音声インタラクションにおいて画期的な進歩を達成しました。ロボットは本当に「人間」になる

マイクロソフト(アジア)インターネットエンジニアリングアカデミーは、新世代の音声インタラクション技術...

2年後には「ロボット」が人間の活動の80%以上をこなすようになるのでしょうか? AIに関する専門家の見解を聞く

写真:人工知能カンファレンスフォーラム 撮影:新民晩報主任記者 劉欣 「私は生産性を変革し、新しい...

ソフトウェアがハードウェアを飲み込むAI時代において、チップがアルゴリズムの進化に追いつけない場合、私たちはどうすればよいのでしょうか?

AI時代の陰の立役者として、チップ業界は徐々にかつ継続的な変化を遂げています。 2008 年以降、...

...

IEEE: AI の時代において、基本的なサイバー衛生で十分でしょうか?

長年にわたり、強力なパスワード、定期的なデータ バックアップ、多要素認証は、個人情報を安全に保つため...

2020 年の AI と機械学習の重要なトレンドは何ですか?

競争が激化するテクノロジー市場において、ハイテク新興企業から世界的な多国籍企業まで、誰もが人工知能を...

JD.comのインテリジェントな顧客サービス、JD.comの11.11は再び「高い感情的知性」を実証

チャットボックスを閉じた後、Li Li はカスタマーサービスとの先ほどの会話を思い出しました。製品紹...

Baidu PaddlePaddle EasyDL リテール版シェルフステッチングサービスのアーキテクチャとアルゴリズムの詳細な説明

日用消費財業界の商品識別需要シナリオでは、日用消費財ブランドの営業担当者は、販売のために端末店舗を訪...

ChatGPT/GPT-4/ラマトロッコ問題コンテスト!小型モデルの方が道徳心が高い?

「モデルには道徳的に推論する能力がありますか?」この質問は、モデルによって生成されるコンテンツ ポ...

LeCunは再び自己回帰LLMを批判:2つの論文で証明されているように、GPT-4の推論能力は非常に限られている

「自己回帰型 LLM が人間レベルの AI に近い、あるいは人間レベルのパフォーマンスに達するにはス...