機械学習ライブラリ「scikit-learn」の概要や使い方を解説!

scikit-learn(サイキット・ラーン)は機械学習を行うためのプログラムを簡単に実装できるライブラリです。この記事では、scikit-learnの特徴や使い方、注意点などを紹介します。機械学習についての概要も解説しているので、興味がある方はぜひ参考にしてください。

scikit-learnはPython用の機械学習ライブラリ

scikit-learn(サイキット・ラーン)とは、Pythonで使える機械学習用のライブラリです。オープンソースで提供されていて、個人利用・商用利用を問わず、誰でも無料で使えるため、気軽に使い始められます。

様々なデータを解析する「統計的機械学習」をPythonでプログラミングする方法として、scikit-learnは人気を得ています。2007年の「Google Summer of Code project(Googleが学生向けに行っているプロジェクト課題イベント)」でDavid Cournapeau(デイビット・クールナポー)氏によって開発されて以来、世界中のユーザーが注目する機械学習ライブラリです。

\文字より動画で学びたいあなたへ/

Udemyで講座を探す >

そもそも機械学習とは?

機械学習とは、コンピュータにデータを学習させ、分析や予測を行うモデルを作るための技術です。学習するデータの有無などによって、次の3つに分類されます。

教師あり学習

入力データと、正解となる教師データを用意し、機械学習モデルを作成する手法です。教師あり学習の例として「回帰」や「分類」などの機械学習が挙げられます。

教師なし学習

正解となるデータがない状態で機械学習モデルを作成する手法です。入力したデータ自体の中から法則性や類似性を見つけ出し、機械学習を行います。「クラスタリング」や「次元削減」、「主成分分析」、「ニューラルネットワークモデル」などが教師なし学習の例です。

強化学習

静的な学習データを用意せず、機械自体が行動した結果をもとに学習を行う手法です。予め報酬条件を設定し、報酬が最大になるような形で機械学習が行われます。ディープラーニングと呼ばれる手法との組み合わせが注目されていることも強化学習の特徴です。

いずれの場合も、機械学習の大まかな流れは同様です。
まず、データを学習する段階では、準備としてデータ収集や前処理を行います。
用意したデータセットを学習することで特徴を抽出し、機械学習モデルを作成することが可能です。作成したモデルが正しく機能するかは、テストデータによって評価できます。テストデータを入力し、期待される結果が出力されれば、機械学習モデルの予測などに活用できます。

scikit-learnで多数のアルゴリズムの使用が可能!

一口に機械学習と言っても、モデルを作成するまでのアルゴリズムは様々です。アルゴリズムとは、計算方法や処理手順を指します。

scikit-learnには、機械学習ためのアルゴリズムが豊富に備わっています。主なアルゴリズムは次の通りです。

  • 線形モデル
  • サポートベクターマシン
  • 決定木
  • ニューラルネットワーク

これらのアルゴリズムにより、データセットの学習結果から新たな入力に対する数値を予測する「回帰」や、ラベルを予測する「分類」などの仕組みが実現できます。ただし、予測の精度を高めるには、十分な量の教師データやテストが必要です。

scikit-learnの特徴

scikit-learnには、初心者から上級者まで便利に機械学習を利用できるいくつかの特徴があります。主な特徴は次の通りです。

使用できるアルゴリズムの数が多い

scikit-learnには回帰や分類のほか、クラスタリングや次元削減、モデルの評価と選択など、幅広い分野のアルゴリズムが備わっています。また、前処理のためのデータ変形もscikit-learnの機能で行うことが可能です。同じ分野のアルゴリズムはコードの共通点が多く、実装しやすくなっています。

チートシートで適切な手法が案内される

どのアルゴリズムを使えば良いか、チートシート(早見表)で簡単に分かることも、scikit-learnの特徴です。対象となるデータの特徴について「サンプル数が50件未満か」、「テキスト形式のデータか」などの二択に答えていくと、データに適したアルゴリズムが分かります。

公式サイトの解説が分かりやすい

scikit-learnの公式サイトでは、scikit-learnの概要やアルゴリズムの仕組みなどが分かりやすく解説されています。引数の解説や実装例なども豊富なため、初心者でもスムーズに理解できます。

サンプルのデータセットが用意されている

機械学習のほとんどのアルゴリズムでは、学習するためのデータセットが必要です。その点、scikit-learnには、使いやすいように整形されたサンプルのデータセットが用意されているため、すぐに実装が可能です。

scikit-learnの使い方

ここでは、scikit-learnで機械学習を実装する方法を解説します。scikit-learnの使い方は次の通りです。

scikit-learnのインストール

scikit-learnのインストール方法は、Pythonの開発環境である「Anaconda」の有無によって異なります。Anacondaがすでにある場合は、scikit-learnが最初から含まれています。

一方、Anacondaを使わない場合は、パッケージマネージャーのpipコマンドによる操作が必要です。まず、Pythonの公式サイトにアクセスし、Pythonをインストールしましょう。その後、Mac OSでは「ターミナル」、Windowsでは「PowerShell」などから、以下のコマンドを実行することでscikit-learnをインストールできます。

自身の開発環境を確認して、scikit-learnのインストール方法を選びましょう。

ライブラリのインポート

scikit-learnの機能をプログラムで使う場合、ライブラリのインポートが必要です。例えば、以下のコードを実行すると、サポートベクターマシン(教師あり学習のパターンの1つ)のライブラリと、精度を出力するためのライブラリがインポートできます。

データの用意

ライブラリのインポート後、機械学習の実装に用いるデータセットを用意しましょう。訓練データとラベル、テストデータを分けて記述する場合のコード例は次の通りです。

このコードでは、2つのパラメータを持つデータを3つ含む訓練データと、それぞれに対するラベルを用意しています。テストデータは結果が分かりやすいように、訓練データと全く同じ内容です。
上記はあくまでも一例のため、データの内容は必要に応じて変更しても大丈夫です。また、先にデータをインポートして、後から訓練データとテストデータに分けるという方法もあります。

アルゴリズムの指定と学習実行

次に、データの種類に応じてチートシートから適切なアルゴリズムを選択しましょう。そして、以下のようなコードでアルゴリズムの指定を行ってください。

上記は、サポートベクターマシンのアルゴリズムを利用する場合のコード例です。「C」や「gamma」などの値は、アルゴリズムのコストや精度を表します。アルゴリズムで指定できるパラメータの意味や、他のアルゴリズムの指定方法などについては、公式サイトをご参照ください。


指定したアルゴリズムで、訓練データとラベルを学習するコード例は次の通りです。

このコードを実行すると、先ほど用意した訓練データとラベルが学習されます。

テストデータでテスト

学習が完了したら、テストデータで正しく予測が行われているかをチェックしましょう。

上記のコード例のように、テスト結果を出力するための変数を用意し、「.predict」関数を実行することでチェックが可能です。今回は、訓練データとテストデータが同じ内容のため、ラベルも同じものが出力されていれば、学習が正しく行われていると判断できます。

scikit-learnを使う上でのコツ・注意点

scikit-learnを使って機械学習を実装する際は、次のようなポイントに注意が必要です。

いくつかの手法を使ってみて最適なものを選択する

チートシートで選択した手法以外にも、いくつかの種類を試してモデルの精度を評価してみましょう。モデルの精度を評価する指標には、次のようなものがあります。

・正解率
・適合率
・再現率
・F値(適合率と再現率を調和平均した数値)

アルゴリズムの種類に応じて、適切な指標を用いて精度を評価することが大切です。

アルゴリズムによってはデータの前処理が必要

アルゴリズムによっては、データの前処理が必要です。例えば、データ内に欠損値(全てもしくは一部の特徴の値が無いこと)がある場合は、データセットを補完した上で学習を行います。

また、他のデータと比べて異常な値を示す「外れ値」の除去や、最適な特徴量の選択、正規化などの処理を行っておくことも重要です。機械学習の手法やデータの内容に応じて、適切な前処理を行いましょう。

関数を複数回呼び出した場合データが上書きされる

scikit-learnで機械学習を行うための「fit関数」を複数回呼び出すと、それまでに学習していたデータセットは上書きされます。そのため、同じプログラム内で複数回fit関数を呼び出す場合、訓練データがリセットされることを留意しましょう。

Pythonのライブラリであるscikit-learnを使うと、様々なアルゴリズムを用いた機械学習を簡単に実装することが可能です。分類や回帰、クラスタリングなどの仕組みをプログラミングに取り入れたい方は、ぜひscikit-learnを活用しましょう。