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

2018/04/26

python scikit-learn プログラミング


はじめに

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

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

アヤメのデータセットはscikit-learn内にあるload_iris関数を用います。

from skleran.datasets import load_iris
iris_dataset  = load_iris()


によるとアヤメのデータ数は150個、3種類のアヤメ、4種類のデータがあることが分かります。具体的な中身については


print(iris_dataset)

で確認することが出来、表示されたデータの下の方にデータセットの説明が出てきます。
説明によるとIris-Setosa、Iris-Versicolour、Iris-Virginicaの3種類のアヤメのsepal length(がく片の長さ・幅[cm])、petal(花弁の長さ・幅[cm])のデータとなっています。

print(iris_dataset)
でキーについて調べてみると

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つのデータを比較したところ同じデータのようでした。)


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()

出来た図を図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近傍法について説明をしました。次回はこれらを元に実際に予想をしてみたいと思います。

↓次回

自己紹介

はじめまして 社会人になってからバイクやプログラミングなどを始めました。 プログラミングや整備の記事を書いていますが、独学なので間違った情報が多いかもしれません。 間違っている情報や改善点がありましたらコメントしていただけると幸いです。

X(旧Twitter)

フォローお願いします!

QooQ