scikit-learnの概要

scikit-learn(サイキット・ラーン)は、Pythonで実装されたオープンソースの機械学習ライブラリーです。分類、回帰、クラスタリングなどの非常に多くのアルゴリズムを実装しており、機械学習モデルを作成する上で必要不可欠なライブラリーと言えます。scikit-learnのコミュニティは非常に活発であり、常に開発と改良が続けられています。使い方もシンプルで初学者でも簡単に扱うことができます。scikit-learnは、Pythonの数値計算ライブラリーであるNumPyやSciPyとやり取りするよう設計されており、データを表形式で扱うことができるPandasや可視化を行うためのMatplotlibなどのライブラリーとともに使用します。
scikit-learnには実験的な用途に使用できるいくつかのサンプルのデータも含まれています。例えば、0から9の10種類の手書きの数字の画素データや、糖尿病患者442人の検査数値とその1年後の疾患進行状況をまとめたデータセットなどが含まれています。これを使って、回帰問題や分類問題のための機械学習モデルを構築することができます。
このサンプルの中にあるアヤメの特徴を表すデータを使用して、アヤメの花を分類する例を紹介します。以下の4つのアヤメの特徴をもとに、K-meansというアルゴリズムを用いてアヤメの品種を分類します。
- がくの長さ
- がくの幅
- 花弁の長さ
- 花弁の幅

図: 3種類のアヤメ(左からversicolor、virginica、setosa)
3種類(versicolor、virginica、setosa)に分類するモデルを作成し、実際の結果と比較したい場合、以下のようなコードで実現できます。
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn.cluster import KMeans
from sklearn import datasets
iris = datasets.load_iris()
X = iris.data
y = iris.target
estimator = KMeans(n_clusters=3)
estimator.fit(X)
fig = plt.figure(figsize=(18, 8))
ax = fig.add_subplot(121, projection='3d', elev=45, azim=135)
ax.scatter(X[:, 3], X[:, 0], X[:, 2],
c=estimator.labels_.astype(np.float), edgecolor='k')
ax.set_xlabel('Petal width')
ax.set_ylabel('Sepal length')
ax.set_zlabel('Petal length')
ax.set_title('KMeans 3 clusters')
ax.dist = 12
ax = fig.add_subplot(122, projection='3d', elev=45, azim=135)
for name, label in [('Setosa', 0),
('Versicolour', 1),
('Virginica', 2)]:
ax.text3D(X[y == label, 3].mean(),
X[y == label, 0].mean(),
X[y == label, 2].mean() + 2, name,
horizontalalignment='center',
bbox=dict(alpha=.2, edgecolor='w', facecolor='w'))
y = np.choose(y, [2, 1, 0]).astype(np.float)
ax.scatter(X[:, 3], X[:, 0], X[:, 2], c=y, edgecolor='k')
ax.set_xlabel('Petal width')
ax.set_ylabel('Sepal length')
ax.set_zlabel('Petal length')
ax.set_title('Ground Truth')
ax.dist = 12
fig.show()
出力は次のようなグラフになります。

図: アヤメの品種を分類したグラフ
K-Meansにより、ほぼ正しく品種の分離ができていることが分かります。
scikit-learnの機能および特徴
主な特徴は以下のとおりです。
機能 | 詳細 |
---|---|
教師あり学習 | 以下のアルゴリズムをサポート
|
教師なし学習 | 以下のアルゴリズムをサポート
|
モデルの選択と評価 | 以下の機能をサポート
|
検査 | 以下の機能をサポート
|
可視化 | 様々なプロット・ユーティリティーをサポート |
データセット変換 | 以下の機能をサポート
|
データセットロードのためのユーティリティー | 以下の機能をサポート
|
計算性能 | 計算量をスケールさせるための並列化、リソース管理、設定が可能 |
モデルの永続化 | 相互運用可能なフォーマットでモデルを永続化可能 |
主な特徴は以下のとおりです。
- 高機能
- 高品質
- 簡単かつ柔軟
- 利用実績
前述したとおり、scikit-learnは非常に高機能です。機械学習をする上で必要な機能が揃っています。ただし、GPUのサポートとディープラーニングや強化学習はscikit-learnだけでは実行できません。その場合は、Keras/TensorFlowやPytorchなどを利用します。
実験的なコードをリリースすることはめったになく、機能を追加する場合は厳格なレビューが行われるため非常に高品質で、バグが少ないといえます。
一貫性のあるシンプルなAPIを提供しており、学習が容易なだけでなく、モデルや正規化のアルゴリズムなどを柔軟に変更できます。インストールもコマンド1つで実行できます。
オンラインのドキュメントがとても充実しており、世界中の多くの人に利用されています。
scikit-learnのライセンス
scikit-learnのライセンスは、BSDライセンスです。無保証であることの明記と著作権およびライセンス条文の表示を条件に、オブジェクトコードの自由な改変・頒布が認められています。
scikit-learnのライセンスについてご不明な点がありましたら、お気軽にお問い合わせください。
scikit-learnと同類のソフトウェア
OSSの機械学習のライブラリーは他にも多数ありますが、scikit-learnほどの高機能なライブラリーは他にはありません。この分野ではデファクトスタンダードなOSSと言えます。
関連OSS
- Jupyter Notebook
- TensorFlow
- Pytorch
- Keras
参考情報
scikit-learnのサポート
NRIではお客様のご要望に応じて様々な支援ができるサービスをご用意しました。
詳細は下記ページをご確認ください。