トップ OSS紹介 scikit-learn

scikit-learn

NRIのOpenStandiaが提供するscikit-learn最新情報

バージョンアップ情報

scikit-learn情報

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)

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により、ほぼ正しく品種の分離ができていることが分かります。

主な特徴

主な特徴は以下のとおりです。

機能

詳細

教師あり学習

以下のアルゴリズムをサポート

  • 線形モデル
  • 線形判別分析、二次判別分析
  • カーネルリッジ回帰
  • サポートベクターマシン
  • 確率的勾配降下
  • 近傍法
  • ガウス過程
  • クロス分解
  • ナイーブベイズ
  • 決定木
  • アンサンブル法
  • マルチクラスおよびマルチ出力アルゴリズム
  • 特徴量選択
  • 半教師あり学習
  • 等張回帰
  • 確率校正
  • ニューラルネットワークモデル(教師あり)

教師なし学習

以下のアルゴリズムをサポート

  • 混合ガウスモデル
  • マニホールド学習
  • クラスタリング
  • バイクラスタリング
  • 主成分分析
  • 共分散推定
  • 異常検知
  • 密度推定
  • ニューラルネットワークモデル(教師なし)

モデルの選択と評価

以下の機能をサポート

  • クロスバリデーション
  • ハイパーパラメーターの調整
  • メトリクスとスコアリング
  • 妥当性確認曲線

検査

以下の機能をサポート

  • PDP/ICEプロット
  • 特徴量の重要性の順列

可視化

様々なプロット・ユーティリティーをサポート

データセット変換

以下の機能をサポート

  • パイプラインとコンポジット推定器
  • 特徴量抽出
  • データの前処理
  • 欠損値の補完
  • 教師なし次元削減
  • ランダム投影
  • カーネル近似
  • ペアワイズ・メトリクス、類似性とカーネル
  • 予測対象(y)の変換

データセットロードのためのユーティリティー

以下の機能をサポート

  • データセットローダー
  • データーセットフレッチャー
  • データセット生成機能
  • その他のツール

計算性能

計算量をスケールさせるための並列化、リソース管理、設定が可能

モデルの永続化

相互運用可能なフォーマットでモデルを永続化可能

主な特徴は以下のとおりです。

  • 高機能

前述したとおり、scikit-learnは非常に高機能です。機械学習をする上で必要な機能が揃っています。ただし、GPUのサポートとディープラーニングや強化学習はscikit-learnだけでは実行できません。その場合は、Keras/TensorFlowやPytorchなどを利用します。

  • 高品質

実験的なコードをリリースすることはめったになく、機能を追加する場合は厳格なレビューが行われるため非常に高品質で、バグが少ないといえます。

  • 簡単かつ柔軟

一貫性のあるシンプルなAPIを提供しており、学習が容易なだけでなく、モデルや正規化のアルゴリズムなどを柔軟に変更できます。インストールもコマンド1つで実行できます。

  • 利用実績

オンラインのドキュメントがとても充実しており、世界中の多くの人に利用されています。

類似プロダクト

OSSの機械学習のライブラリーは他にも多数ありますが、scikit-learnほどの高機能なライブラリーは他にはありません。この分野ではデファクトスタンダードなOSSと言えます。

動作環境

scikit-learn をインストールするには、さまざまな方法がありますが、オペレーションシステム、または Python ディストリビューションによって提供される最新リリースをインストールすることが推奨されています。

最新の機能を試したいユーザや、プロジェクトに貢献したいユーザはソースからビルドすることも可能です。

scikit-learnの公式インストールガイドは下記です。

scikit-learnのライセンス

scikit-learnのライセンスは、BSDライセンスです。無保証であることの明記と著作権およびライセンス条文の表示を条件に、オブジェクトコードの自由な改変・頒布が認められています。

オープンソース年間サポートサービス

OpenStandiaではOSSを安心してご利用いただけるように、オープンソース年間サポートサービスをご提供しております。
サポートしているOSSは下記ページをご参照ください。

お気軽にお問い合わせください

関連OSS

  • TensorFlow

    TensorFlow

    テンソルフロー。Googleが開発を行っている機械学習/ディープラーニング/多層ニューラルネットワークライブラリです。

オープンソースに関する様々な課題、OpenStandiaがまるごと解決します。
下記コンテンツも
あわせてご確認ください。