スマレジエンジニアyushiのブログ

スマレジエンジニアのブログ

【機械学習入門 #3】データ取得・データ整形・目標設定

前回より、機械学習に入門しています。

yushi-dev.hatenablog.com

今回は、データを用意し、そのデータをもとに目標設定していきます。

データを取得

機械学習とデータは不可分です。まずは今回利用するデータを用意します。

Machine Learning Repositoryというところで公開されているiris(アヤメ)のデータを取得します。

import pandas as pd

# iris dataをダウンロード
df = pd.read_csv(
    'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data',
    header=None
)

# 全件表示する
pd.set_option('display.max_rows', None)

print(df)

f:id:yushi0:20220417224555p:plain

データの中身は下記です。

  • 1列目: がくの長さ(cm)
  • 2列目: がくの幅(cm)
  • 3列目: 花弁の長さ(cm)
  • 4列目: 花弁の幅(cm)
  • 5列目: 名前

名前の列を見てみると、下記の3種類のアヤメのデータが混ざっていることがわかります。

  • 1〜50行目: Iris-setosa
  • 51〜100行目: Iris-versicolor
  • 101〜150行目: Iris-virginica

目標設定

今回は、Iris-setosaとIris-versicolorの行、がくの長さ・花弁の長さの列のみを利用します。 そして、がくの長さ・花弁の長さを元に、それぞれの行がIris-setosaとIris-versicolorの内どちらであるのかを判定します。

データ整形

データセットを作ります。

import numpy as np

# y: 目的変数 Iris-setosa=-1, Iris-versicolor=1
# [1, 1, 1, ..., -1, -1, -1...]
y = df.iloc[0:100, 4].values
y = np.where(y == 'Iris-setosa', -1, 1)

# X: トレーニング変数 [がくの長さ, 花弁の長さ]の一覧
# [[5.1, 1.4], [4.9, 1.4], [4.7, 1.3], ...]
X = df.iloc[0:100, [0, 2]].values

print('y\n', y)
print('X\n', X)

f:id:yushi0:20220418003356p:plain

ここで、y=目的変数とは、Iris-setosaとIris-versicolorの内どちらであるのかを示しています。今回は、-1がIris-setosa、1がIris-versicolorです。

一方、X=トレーニング変数は、がくの長さ・花弁の長さを示しています。例えば一行目のデータの[5.1 1.4]で言うと、5.1ががくの長さ、1.4が花弁の長さです。

グラフ表示

目的変数・トレーニング変数をプロットしてみます。

"""
グラフ表示(散布図)
"""

import matplotlib.pyplot as plt

data_count = 50

plt.scatter(X[:data_count, 0], X[:data_count, 1], color='red', marker='o', label='setosa')
plt.scatter(X[50:50 + data_count, 0], X[50:50 + data_count, 1], color='blue', marker='x', label='versicolor')
plt.xlabel('sepal length [cm]')
plt.ylabel('petal length [cm]')
plt.legend(loc='upper left')
plt.show()

f:id:yushi0:20220418004355p:plain

図の意味は下記の通りです。

  • x軸: がくの長さ
  • y軸: 花弁の長さ
  • 赤点: Iris-setosa
  • バツ: Iris-versicolor

赤点(Iris-setosa)と青バツ(Iris-versicolor)は座標上ではっきり位置が別れています。

つまり、 がくの長さと花弁の長さを見れば、それがIris-setosa・Iris-versicolorの内どちらであるかが分類できるということ、すなわち設定した目標が達成できそうということが、推測できます。

あとがき

今回の記事では、機械学習によってどんなことができるか(What)が表現できているんじゃないかと思います。

次回以降では、どうやって実現するか(How)を記載していこうと思います。