はじめに
最近流行りの機械学習を勉強してみたくなり、第一歩としてscikit-learnについて勉強をしました。まず初めに機械学習のアルゴリズムの一つ、k近傍法を利用して分類を行いました。使用したデータセットはscikit-learnの中に付属しているiris(アヤメ)という花のデータセットです。この記事では機械学習に用いるデータの中身についての解説と機械学習で用いる「k近傍法」というアルゴリズムについて解説を行います。機械学習に用いるデータの読み込み
アヤメのデータセットはscikit-learn内にあるload_iris関数を用います。
1 2 | from skleran.datasets import load_iris iris_dataset = load_iris() |
syntax2html |
によるとアヤメのデータ数は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:データセットの特徴量による相関 |
私の力不足で凡例が見えにくくなっていますが、青が「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 件のコメント :
コメントを投稿