機械学習¶
Pythonには、データ分析、統計、機械学習のための膨大な数のライブラリがあり、多くのデータ科学者にとって選択肢の多い言語になっています。
マシンラーニングやその他のデータサイエンスアプリケーションで広く使われているパッケージのいくつかを以下に挙げます。
Scipyスタック¶
Scipyスタックは、統計解析とデータの可視化のために、データサイエンスで使用される一連のコアヘルパーパッケージで構成されています。膨大な数の機能と使い易さのために、このスタックは、ほとんどのデータサイエンスアプリケーションに欠かせないものと考えられています。
Stackは以下のパッケージで構成されています(ドキュメントへのリンク):
このスタックにはPythonも付属していますが、上記のリストから除外されています。
scikit-learn¶
ScikitはPythonのためのフリーでオープンソースの機械学習ライブラリです。線形回帰、分類器、SVM、k-means、ニューラルネットワークなどの多くのアルゴリズムを実装するための既製の関数を提供します。トレーニングやテストに直接使用できるサンプルデータセットもいくつかあります。
そのスピード、堅牢性、使いやすさのため、多くの機械学習アプリケーションで最も広く使用されているライブラリの1つです。
インストール¶
PyPIを通じて:
pip install -U scikit-learn
condaを通して:
conda install scikit-learn
scikit-learnにはAnaconda(上記参照)が同梱されています。 詳しいインストール方法については、 このリンク を参照してください。
例¶
この例では、簡単な分類子を Iris dataset でトレーニングします。これはscikit-learnでバンドルされています。
このデータセットは、葉の長さ、葉の幅、花弁の長さ、花弁の幅の4つの特徴を取り、それらを3つの花種(ラベル):セソサ、バーシカラー、またはバージニアに分類します。 ラベルはデータセット内の数字として表されています:0(setosa)、1(versicolor)、2(virginica)。
アイリスデータセットをシャッフルし、別々のトレーニングとテストセットに分けます:テストのための最後の10データポイントを保持し、トレーニングのために休みます。 次に、トレーニングセットの分類子を訓練し、テストセットを予測します。
from sklearn.datasets import load_iris
from sklearn import tree
from sklearn.metrics import accuracy_score
import numpy as np
#loading the iris dataset
iris = load_iris()
x = iris.data #array of the data
y = iris.target #array of labels (i.e answers) of each data entry
#getting label names i.e the three flower species
y_names = iris.target_names
#taking random indices to split the dataset into train and test
test_ids = np.random.permutation(len(x))
#splitting data and labels into train and test
#keeping last 10 entries for testing, rest for training
x_train = x[test_ids[:-10]]
x_test = x[test_ids[-10:]]
y_train = y[test_ids[:-10]]
y_test = y[test_ids[-10:]]
#classifying using decision tree
clf = tree.DecisionTreeClassifier()
#training (fitting) the classifier with the training set
clf.fit(x_train, y_train)
#predictions on the test dataset
pred = clf.predict(x_test)
print pred #predicted labels i.e flower species
print y_test #actual labels
print (accuracy_score(pred, y_test))*100 #prediction accuracy
私たちはランダムに分割しているので、分類器は繰り返しごとに列車を辿るため、精度は異なる場合があります。 上記のコードを実行すると、次のようになります。
[0 1 1 1 0 2 0 2 2 2]
[0 1 1 1 0 2 0 2 2 2]
100.0
最初の行には、分類器によって予測されたテストデータのラベル(すなわち、花種)が含まれ、2行目には、データセットに示された実際の花種が含まれています。 このため、今回は100%の精度が得られます。
scikit-learnの詳細は documentation をご覧ください。