AIPython

Pythonによる機械学習の基本①|機械学習とは〜データ可視化

abstract art blur bright AI
Photo by Pixabay on Pexels.com

はじめに

Pythonによる機械学習の基本として、以下二点を今回は解説します。
これから、機械学習を学びたいという方におすすめの記事となっています。

  • 機械学習とは
  • データの可視化

機械学習とは

経験からの学習により自動で改善するコンピュータのアルゴリズムを指します。機械学習には、大きく分けて二つの種類があります。

  • 分類・・・例:「犬」「ねこ」などの画像を分類するとき
  • 回帰・・・例:株価を予想するとき

分類

データから正解のラベルを予測する手法を指します。ラベルとは、例えば「犬」「猫」の分類の場合には、犬を0、猫を1と定義するという意味です。数学の処理においては、数値に変換することが必要なので、このようにラベリングします。

今回は、あやめデータを用いて、データから「あやめの種類」を予測する問題を解きながら、以下を学んでいきましょう。今回の記事では、1.データ準備と前処理まで解説します。

  1. データの準備と前処理
  2. 予測モデルの構築
  3. 評価

データ準備と前処理

機械学習は以下のような前準備が必要となります。

  • データの準備:データソースから扱えるように読み込むことや実験をしてデータを集めるなどです。

以下は前処理と言われるものです。

  • 正解データと入力データの紐付け : 入力データに対して正解ラベルが紐づけることです。例えば、犬の画像の0、猫の画像に1を紐付けるなどです。
  • 特徴量抽出 :予測モデルのインプットとなるデータを加工です。
  • トレーニングデータとテストデータの準備:トレーニングデータとは、モデル生成のためのデータです。テストデータとは、モデルの精度を把握するためのデータです。

コード

まず、numpyとpandaとを読み込みます。
その次に可視化に必要なmatplotlibを読み込みます。

# 必要なライブラリの読み込み
import pandas as pd
import numpy as np

# 可視化
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline#ジュピターノートブックで表示するために必要です。

次に、データの準備です。sklearnからあやめデータをダウンロードします。

# データの準備(あやめデータ)
from sklearn.datasets import load_iris
iris = load_iris()
print(iris)

print関数で中身を確認するとディクショナリー型で、dataとtargetに分かれていることがわかります。
次に、特徴量を抽出してみましょう。以下でdataとtargetをそれぞれ分離x,yします。

#入力データの準備
x = iris.data

# 正解データの準備
y = iris.target

xは4列のパラメータをもっています。これは、Sepal Length(がく片の長さ)、 Sepal Width(がく片の幅)、 Petal Length(花びらの長さ)、 Petal Width(花びらの幅)の4つの特徴量をあやめデータは持っているデータセットだからです。

 では、仮に、Petal Length(花びらの長さ)、 Petal Width(花びらの幅)のみで、ラベルが分類できそうかどうかを可視化してみましょう。

# 特徴量作成
X = x[:, [2,3]] # 3, 4列目を抽出(特徴量抽出)

# 図示して確認
for  y_class in np.unique(y):
    plt.scatter(X[y==y_class,0], X[y==y_class,1])
plt.show()

np.uniqueとは、ユニークな値を要素とする新たなndarrayが生成されるものです。例えば、あやめデータの場合は、3つの品種二分かれており、0,1,2の三つの値でラベリングしています。そのためnp.unique(y)は、[0,1,2]となります。それをyに代入しています。X[a,b]でYの値がaのときのXを抽出し、そのb列めのデータを返すという意味です。

それで、可視化した結果が以下です。[0,1,2]ごとに色は自動で変更されます。手動のやり方は後述します。

あやめ可視化

次にトレーニングデータとテストデータの準備です。scikit-learnの関数を使うことで、トレーニングデータとテストデータを簡単に分けることができます。

# トレーニングデータとテストデータの準備 
# scikit-learnのテストデータ作成用の関数を用います
from sklearn.model_selection import train_test_split

# 既存のデータをトレーニングデータとテストデータに分割
#   元のデータの20%をテストデータとして利用し、分割する際のランダマイズの初期値を0に設定
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

データが分かれているかをチェックすると、ちゃんと8:2になっている。

# デーたチェック
print("X: ", X.shape)
print("X_train: %s | X_test: %s | y_train: %s /|y_test: %s" % (X_train.shape, X_test.shape, y_train.shape, y_test.shape))

#以下は出力結果
#X:  (150, 2)
#X_train: (120, 2) | X_test: (30, 2) | y_train: (120,) | y_test: (30,)

可視化します。今度は、赤、青、緑でプロットしましょう。またトレーニングデータは◯、テストデータは×でプロットします。

# 可視化
color_map = ["red", "blue", "green"]
for y_class in np.unique(y):
    plt.scatter(X_train[y_train==y_class,0], X_train[y_train==y_class,1], c=color_map[y_class])
    plt.scatter(X_test[y_test==y_class,0], X_test[y_test==y_class,1], marker='x', c=color_map[y_class])
plt.show()

可視化結果が以下です。

あやめデータをトレーニングデータとテストデータに分けて可視化

まとめ

今回の記事は、以上です。今回は、機械学習におけるデータの可視化と前処理を解説しました。もし、もっと詳しく学びたい方は、以下の記事を参考にしてみてください。初心者におすすめの参考書をまとめました。

コメント

タイトルとURLをコピーしました