機械学習を始めようとしても、ゼロからコードを書いて開発するのは大変ですよね。そんな時に非常に強力なライブラリがscikit-learn(sklearn・サイキットラーン)です。
scikit-learn(sklearn)は、回帰、分類に用いる様々なアルゴリズムを容易に実行できます。また、公式のWebサイトには非常に丁寧に解説が掲載されているため、初心者でもスムーズに習得できるでしょう。
この記事では、scikit-learn(sklearn)とは何か、scikit-learn(sklearn)を使うための準備、scikit-learn(sklearn)を用いて機械学習を行う方法やポイントを紹介します。scikit-learn(sklearn)をマスターすれば、機械学習を搭載したシステムを開発できるようになるに違いありません。
そこで今回は、scikit-learn(sklearn)のオーソドックスな使い方についてお伝えします。
scikit-learn(sklearn・サイキットラーン)とは
scikit-learn(sklearn)は、Pythonのオープンソース機械学習ライブラリのことです。David CournapeauによるGoogle Summer of Codeプロジェクトから開発が始まり、現在もscikit-learn(sklearn)は開発が継続しています。
また、従来の機械学習ライブラリでは0からコードを書かないといけなかったのですが、scikit-learn(sklearn)は、機械学習のアルゴリズムが豊富に搭載されているだけでなく、機械学習を行うためのサンプルのデータセットも搭載されているため、インストールするとすぐに機械学習ができる点が特徴です。
さらに、機械学習においてどのアルゴリズムを選択するべきかを決定することは初心者にとっては難解ですよね。scikit-learn(sklearn)はデータ数や行いたいことに基づいて適切なアルゴリズムを選択できるチートシートが用意されています。そのため、初心者でもすぐに機械学習を始められるでしょう。
scikit-learn(sklearn)でできること
scikit-learn(sklearn)は、分類、回帰、クラスタリング、次元削減、モデルの選択と評価、データの前処理の6つのことができます。
分類と回帰は教師ありの学習の手法です。教師あり学習では、一部の正解データを基に学習をして未知のデータに対して予測を行います。分類は離散値を予想し、回帰は、連続値を予測します。scikit-learn(sklearn)は、回帰、分類においてよく利用される、SVM、最近傍探索、決定木、ランダムフォレスト、サポートベクターマシンなどのアルゴリズムやニューラルネットワークを用いた深層学習も搭載されています。
クラスタリングと次元削減は教師なし学習の手法です。クラスタリングとはデータを似た者同士でグループ分けする手法のことで、scikit-learn(sklearn)では、非階層的クラスタリングの代表的な手法であるk-meansなどを容易に実装できます。
次元削減は、読んで字のごとく次元を下げる処理のことで、変数の数を減らすこと。次元削減によって、質の悪いデータの排除により精度が上がったり、計算コストが下がるというメリットがあります。scikit-learn(sklearn)では、主成分分析や因子分析などを実装できます。
モデルの選択と評価は、機械学習の様々なモデルに対して正しく評価を行って選択をするための機能です。例えばscikit-learn(sklearn)では分類モデルの評価を行うための正解率(Accuracy)、精度(Precision)やF値などの値を容易に計算するメソッドが用意されています。機械学習における学習が正しく行えていたのかを評価する際に利用します。
また、モデルの選択ではモデルのパラメータを探索するgrid searchなどのメソッドが準備されているため、モデルの評価やハイパーパラメータの調整を簡単に実装できます。
scikit-learn(sklearn)を使うための準備
次に、scikit-learn(sklearn)ための準備をご紹介しましょう。scikit-learn(sklearn)を使うためには、Pythonをインストールする必要があります。
まずは、Pythonの公式サイトのDownloadsを押すと、上段にDownload Python 3.x.x(x.xは最新のバージョンが表示されます。)という表示があります。ご自身のOSに応じたインストーラーをダウンロードしてください。
scikit-learn(sklearn)の環境構築をする方法
それでは、scikit-learn(sklearn)を実際にインストールする方法を紹介します。Windowsの場合、コマンドプロンプトを開き(Macの場合は、ターミナルを開き)、pip insatall scikit-learnと入力することでscikit-learn(sklearn)をインストールできます。
インストールがされているかを確認するためには、Pythonを利用できる状態で、
print(sklearn.__version__)
を実行してバージョンが表示されると、インストールができていることが確認できます。
scikit-learn(sklearn)で機械学習を行う方法
scikit-learn(sklearn)の環境構築が完了したので、scikit-learn(sklearn)で機械学習を行う方法をご紹介します。
機械学習を行うためのステップとしては、データの準備と前処理、アルゴリズムの選択、アルゴリズムの実装、モデルの評価、ハイパーパラメータの調整の5ステップがあります。
データの準備と前処理
データをご自身で準備する必要がありますが、最初に機械学習を学ぶ場合、scikit-learn(sklearn)に搭載されているデータを利用するとよいでしょう。
iris = load_iris()
などで、代表的なデータセットをダウンロードできます。scikit-learn(sklearn)の公式ページでどのようなデータがあるか確認してみましょう。(今回はアヤメの分類問題のデータセットで、以下このデータセットを使って説明します)
また、変数が複数あり、変数によって単位が違っていたりする場合に、各変数の関係をわかりやすくするために有効なデータの標準化や正規化があります。標準化や正規化は、scikit-learn(sklearn)で容易に実装でき、
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()(正規化)
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler([-1,1])
などで行います。
アルゴリズムの選択
データが準備できたらアルゴリズムの選択です。scikit-learn(sklearn)のチートシートに基づいて、アルゴリズムを決定しましょう。今回のアヤメのデータセットの例ですと、サンプル数は50以上で、カテゴリを予測します。ラベル付きのデータがあり、データ数は100000例以下で、データはテキストではないので、KNeighborsClassifierをまずは実装しましょう。
アルゴリズムの実装
今回は、がくの長さ、がくの幅、花弁の長さ、花弁の幅のデータから、セトナかバーシクルかバージニカかを予測するモデルを作ります。
iris= load_iris()
X = iris.data #がくの長さ、がくの幅、花弁の長さ、花弁の幅を説明変数とする
Y = iris.target #アヤメの種類を目的変数とする
今回は、がくの長さ、がくの幅、花弁の長さ、花弁の幅は単位などが大きく違わないため、正規化や標準化は行わず、実装します。scikit-learn(sklearn)からKNeighborsClassifierのアルゴリズムをimpotします。そのうえで、学習用データと検証用データにデータを分けます。そして、学習および予測を行いましょう。
from sklearn.cross_validation import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.4, random_state=3)
knn = KNeighborsClassifier(n_neighbors=6)
knn.fit(X_train, Y_train)
Y_pred = knn.predict(X_test)
モデルの評価
予測が終わると、実際に、モデルの予測はどれくらいの精度だったのかを検証します。
print(metrics.accuracy_score(Y_test, Y_pred))
を行うとどれくらいの精度だったのか、が検証できます。
ハイパーパラメータの調整
今回、n_neighborsの数がハイパーパラメータとなりますので、n_neighborsを様々変更して、どの値がよいかを検討する必要があります。今回の例ですと1~89の間でn_neighborsを調整して、精度について検証を行います。
knn = KNeighborsClassifier(n_neighbors=k)
knn.fit(X_train, Y_train)
Y_pred = knn.predict(X_test)
accuracy.append(metrics.accuracy_score(Y_test, Y_pred))
出力を見て、精度を確認が最もよい精度のハイパーラメータ(今回はkの値)を採用して、予測を再度行ってみましょう。
scikit-learn(sklearn)で機械学習をうまく行うためのポイント
最後に、scikit-learn(sklearn)で機械学習をうまく行うためのポイントを紹介します。ポイントは、「適切なアルゴリズムを選択すること」と「データの前処理を行うこと」です。
scikit-learn(sklearn)は、機械学習のアルゴリズムを容易に実装できますが、適切なアルゴリズムを選択できていないと予測される結果は想定より悪いものとなってしまいます。scikit-learn(sklearn)のチートシートに基づいて、適切なアルゴリズムを選択することを心がけましょう。
また、「データの前処理を行うこと」は非常に重要です。前処理とは、データをきれいにした状態で機械学習を行うことです。データに欠損値や外れ値があると、適切に学習が行われません。欠損値や外れ値がある場合は、データから除外して機械学習を行うとよいでしょう。
さて、今回はscikit-learn(sklearn)のオーソドックスな使い方についてお伝えしました。この記事では、
- scikit-learn(sklearn)は、Pythonのオープンソース機械学習ライブラリである
- scikit-learn(sklearn)は、分類、回帰、クラスタリング、次元削減、モデルの選択と評価、データの前処理の6つのことができる
- scikit-learn(sklearn)を使うためには、Pythonをインストールする必要がある
- scikit-learn(sklearn)の環境構築は、pip insatall scikit-learnでできる
- scikit-learn(sklearn)で機械学習を行うためのステップとしては、データの準備と前処理、アルゴリズムの選択、アルゴリズムの実装、モデルの評価、ハイパーパラメータの調整の5ステップがある
- scikit-learn(sklearn)で機械学習をうまく行うためのポイントは、「適切なアルゴリズムを選択する」と「データの前処理を行う」
など、scikit-learn(sklearn)で何ができてどのように実装するのかをお伝えしました。この記事を読んで、scikit-learn(sklearn)を使った機械学習を始めましょう。
【お知らせ】
当メディア(AIZINE)を運営しているAI(人工知能)/DX(デジタルトランスフォーメーション)開発会社お多福ラボでは「福をふりまく」をミッションに、スピード、提案内容、価格、全てにおいて期待を上回り、徹底的な顧客志向で小規模から大規模ソリューションまで幅広く対応しています。
御社の悩みを強みに変える仕組みづくりのお手伝いを致しますので、ぜひご相談ください。