scikit-learn チュートリアル
scikit-learnを使い始める
サーチ…
備考
scikit-learn
は、Pythonで書かれたデータ解析のための汎用のオープンソースライブラリです。これは他のPythonライブラリに基づいています:NumPy、SciPy、matplotlib
scikit-learn
は、さまざまな一般的な機械学習アルゴリズムの実装が含まれています。
scikit-learnのインストール
scikit-learnの現在の安定版には次のものが必要です:
- Python(> = 2.6または> = 3.3)、
- NumPy(> = 1.6.1)、
- SciPy(> = 0.9)。
ほとんどのインストールの場合はpip
のpythonパッケージマネージャのpythonとその依存関係のすべてをインストールすることができます。
pip install scikit-learn
しかし、Linuxシステムの場合、可能なビルドプロセスを回避するためにconda
パッケージマネージャを使用することが推奨されています
conda install scikit-learn
scikit-learn
あることを確認するには、シェルで実行します:
python -c 'import sklearn; print(sklearn.__version__)'
WindowsとMac OSXのインストール:
CanopyとAnacondaは、Windows用の大規模な科学的Pythonライブラリ、Mac OSX(Linuxにも適している)のほかに、最近のscikit-learnのバージョンを出荷しています。
クロスバリデーションを使用してクラシファイアをトレーニングする
アイリスデータセットの使用:
import sklearn.datasets
iris_dataset = sklearn.datasets.load_iris()
X, y = iris_dataset['data'], iris_dataset['target']
データは列車とテストセットに分割されます。これを行うには、 train_test_split
ユーティリティ関数を使用して、 train_test_split
train_size=0.75
オプション(トレーニングセットにはデータの75%が含まれています)を使用してX
とy
(データとターゲットベクトル)をランダムに分割します。
トレーニングデータセットは、 k最近傍の分類子に供給される 。クラシファイアのメソッドfit
は、モデルをデータに適合させます。
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.75)
from sklearn.neighbors import KNeighborsClassifier
clf = KNeighborsClassifier(n_neighbors=3)
clf.fit(X_train, y_train)
最後に、テストサンプルの品質を予測する:
clf.score(X_test, y_test) # Output: 0.94736842105263153
1組のトレインとテストセットを使用することによって、データスプリットの任意の選択による分類器の品質の偏り推定を得ることができる。 クロスバリデーションを使用することにより、データの異なる列車/試験サブセットに分類器を適合させることができ、すべての精度結果に対して平均をとることができます。関数cross_val_score
、相互検証を使用して入力データに分類cross_val_score
適合させます。使用する分割数(フォールド数)を入力することができます(下の例では5)。
from sklearn.cross_validation import cross_val_score
scores = cross_val_score(clf, X, y, cv=5)
print(scores)
# Output: array([ 0.96666667, 0.96666667, 0.93333333, 0.96666667, 1. ])
print "Accuracy: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() / 2)
# Output: Accuracy: 0.97 (+/- 0.03)
パイプラインの作成
データのパターンを見つけることは、多くの場合、機能選択、正規化、分類などの一連のデータ処理ステップで進行します。 sklearn
では、これのためにステージのパイプラインが使用されています。
たとえば、次のコードは2つのステージからなるパイプラインを示しています。最初のものはフィーチャをスケールし、2番目のフィーチャは結果の拡張データセットに分類子を訓練します。
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
pipeline = make_pipeline(StandardScaler(), KNeighborsClassifier(n_neighbors=4))
パイプラインが作成されると、その特定の手順に応じて、通常のステージのように使用できます。ここでは、例えば、パイプラインはクラシファイアのように振る舞います。したがって、次のように使用できます。
# fitting a classifier
pipeline.fit(X_train, y_train)
# getting predictions for the new data sample
pipeline.predict_proba(X_test)
インタフェースと規約:
特別なクラスを使用して、データの操作が異なります。
クラスのほとんどは、次のグループのいずれかに属します。
- 分類の問題を解決するための分類アルゴリズム(
sklearn.base.ClassifierMixin
からsklearn.base.ClassifierMixin
) - 連続変数を再構築する問題を解決するための回帰アルゴリズム(
sklearn.base.RegressorMixin
から派生したsklearn.base.RegressorMixin
)(回帰問題) - データを前処理するデータ変換(
sklearn.base.TransformerMixin
からsklearn.base.TransformerMixin
)
データはに格納されnumpy.array
S(しかしのような他のアレイ状オブジェクトpandas.DataFrame
ものに変換可能である場合にsが受け入れられるnumpy.array
複数)
データ内の各オブジェクトは、一連の機能によって記述されます。一般的な取り決めでは、データサンプルは配列で表され、最初の次元はデータサンプルID、2番目の次元はフィーチャIDです。
import numpy
data = numpy.arange(10).reshape(5, 2)
print(data)
Output:
[[0 1]
[2 3]
[4 5]
[6 7]
[8 9]]
上記のsklearn
表記規則では、2つのフィーチャでそれぞれ記述される5つのオブジェクトが含まれています。
サンプルデータセット
テストを容易にするために、 sklearn
はsklearn.datasets
モジュールにいくつかのビルトインデータセットをsklearn.datasets
ます。たとえば、Fisherの虹彩データセットを読み込みます。
import sklearn.datasets
iris_dataset = sklearn.datasets.load_iris()
iris_dataset.keys()
['target_names', 'data', 'target', 'DESCR', 'feature_names']
完全な説明、機能の名前、およびクラスの名前( target_names
)を読むことができます。それらは文字列として格納されます。
私たちは、 data
とtarget
フィールドに格納されているデータとクラスに興味があります。慣例により、それらはX
およびy
X, y = iris_dataset['data'], iris_dataset['target']
X.shape, y.shape
((150, 4), (150,))
numpy.unique(y)
array([0, 1, 2])
X
とy
形は、4つの特徴を持つ150のサンプルがあると言う。各サンプルは、0,1または2のいずれかのクラスに属します。
X
とy
は、分類子のfit()
メソッドを呼び出すことで、分類子の学習に使用できるようになりました。
sklearn.datasets
モジュールで提供されるデータセットのサイズと使用目的の完全なリストは次のsklearn.datasets
です。
負荷 | 説明 | サイズ | 使用法 |
---|---|---|---|
load_boston() | ボストンの住宅価格データセット | 506 | 回帰 |
load_breast_cancer() | 乳がんウィスコンシンのデータセット | 569 | 分類(バイナリ) |
load_diabetes() | 糖尿病のデータセット | 442 | 回帰 |
load_digits(n_class) | 数字データセット | 1797年 | 分類 |
load_iris() | アイリスデータセット | 150 | 分類(マルチクラス) |
load_linnerud() | Linnerudデータセット | 20 | 多変量回帰 |
注意してください (ソース: http : //scikit-learn.org/stable/datasets/) :
これらのデータセットは、scikitで実装されたさまざまなアルゴリズムの動作をすばやく説明するのに便利です。しかし、実世界の機械学習タスクを代表するには小さすぎることがあります。
これらの組み込みの玩具サンプルデータセットにsklearn.datasets
、 sklearn.datasets
は外部データセットをロードするユーティリティ関数も提供します:
-
load_mlcomp
リポジトリからサンプルデータセットを読み込むためのload_mlcomp (データセットを以前にダウンロードする必要があることに注意してください)。 ここでは使用例です。 - フェイス検証(顔認識)に使用されるhttp://vis-www.cs.umass.edu/lfw/のワイルド(LFW)ペアデータセットのLabeled Facesを読み込むための
fetch_lfw_pairs
およびfetch_lfw_people
。このデータセットは200 MBを超えています。 ここでは使用例です。