scikit-learnを用いた機械学習の初歩①~データ及び解析手法~


はじめに

最近流行りの機械学習を勉強してみたくなり、第一歩としてscikit-learnについて勉強をしました。まず初めに機械学習のアルゴリズムの一つ、k近傍法を利用して分類を行いました。使用したデータセットはscikit-learnの中に付属しているiris(アヤメ)という花のデータセットです。この記事では機械学習に用いるデータの中身についての解説と機械学習で用いる「k近傍法」というアルゴリズムについて解説を行います。

機械学習に用いるデータの読み込み

アヤメのデータセットはscikit-learn内にあるload_iris関数を用います。
1
2
from skleran.datasets import load_iris
iris_dataset  = load_iris()
syntax2html
http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_iris.html
によるとアヤメのデータ数は150個、3種類のアヤメ、4種類のデータがあることがわかります。
具体的な中身については

1
print(iris_dataset)
syntax2html
で確認することが出来、表示されたデータの下の方にデータセットの説明が出てきます。
説明によるとIris-Setosa、Iris-Versicolour、Iris-Virginicaの3種類のアヤメのsepal length(がく片の長さ・幅[cm])、petal(花弁の長さ・幅[cm])のデータとなっています。
1
print(iris_dataset.keys())
syntax2html
でキーについて調べてみると
dict_keys(['data', 'target', 'target_names', 'DESCR', 'feature_names'])
と5つあることがわかります。
 ここで、「data」キーを表示すると、がく片の長さ、がく片の幅、花弁の長さ、花弁の幅の順で格納されたデータセットが表示されます。「target」キーを表示すると0,1,2の3種類の数字が50個ずつ表示されます。これはデータの分類を表し、0がIris-Setosa、1がIris-Versicolour、2がIris-Virginicaを表します。「taeget_names」キーを表示するとIris-Setosa、Iris-Versicolour、Iris-Virginicaと分類の名前が表示されます。
「DESCR」キーを表示するとデータセットについての説明が出てきます。
最後の「feature_names」はデータに付けられた名前が表示します。

ではこのデータの雰囲気を理解するために可視化を行っていたので、この記事でも同様にデータの可視化を行います。
引用元ではseabornというモジュールに含まれているデータセットを用いて可視化をしているみたいでしたが、せっかくなので今回はscikit-learnに含まれているデータを用いて可視化を行います。(2つのデータを比較したところ同じデータのようでした。)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
from sklearn.datasets import load_iris
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
iris_dataset = load_iris()
#引用のデータと同じになるようにPandasのデータフレームにデータを格納
data = pd.DataFrame(iris_dataset.data,columns=iris_dataset.feature_names)
spesies_data = pd.DataFrame(iris_dataset.target)
#分類の数字を文字に変換し格納
for i in range(3):
    spesies_data = spesies_data.replace(i,iris_dataset.target_names[i])
data["spesies"] = spesies_data
sns.pairplot(data,hue="spesies")
plt.show()
syntax2html
出来た図を図1に示します。
図1:データセットの特徴量による相関
私の力不足で凡例が見えにくくなっていますが、青が「setosa」,
緑が「versicolour」、赤が「virginica」を表しています。図1よりなんとなくですが緑と赤の特徴が似ていることがわかります。

k近傍法について

 k近傍法(k-Near Neighbor algorithm)は教師あり学習で分類問題を解くためのアルゴリズムで、分類アルゴリズムの中でも単純なアルゴリズムの一つです。
ここで分類問題とは名前の通りで、学習データをクラスと呼ばれるグループに分類しておき、テストデータがどのクラスに分類されるかを予測する問題です。
 続いてk近傍法でどのように予測を行うか説明をします。まず最初に学習データをベクトル空間上に正解ラベルと共に配置します。次に与えられたデータをそれぞれ近い場所にある正解ラベルのデータを使ってクラスに分類します。下記の図2にイメージを示します。
図2:k近傍法のデータ配置のイメージ
次に予測したいデータを図2に与えます。与えられたデータとクラスとの距離を元にそのデータの予想を行います。k近傍法では予想したいデータに最も近いk個の点がどのクラスに1番多く存在するかによって所属するクラスの決定を行います。図2にk=5の場合のk近傍法による予測のイメージを示します。
図3:k=5の場合のk近傍法による予測
図3の場合は予測したいデータ近傍の5個の点の中で、クラス2のデータが一番多く含まれているため、予測したいデータばクラス2に所属していることがわかります。
 ただし、k近傍法ではkの値によって予測結果が変わってしまう場合があるので、予測した結果の正解率から妥当なkを設定する必要があります。

まとめ

今回は機械学習の1つであるscikit-learnに用いるために必要なデータと機械学習のアルゴリズムの1つであるk近傍法について説明をしました。次回はこれらを元に実際に予想をしてみたいと思います。

追記:次回の記事です

0 件のコメント :

コメントを投稿