【簡単】AIを作ろう!

プログラミング
この記事は約7分で読めます。

こんにちは!上森です!

みなさんは、「AIを作成してみたい!」や「機械学習をやってみたい!」などと思ったとはありませんか?今回の記事では、できるだけ簡単に機械学習を始められるよう基本的な流れと具体的な操作方法を説明していきます。

本記事でわかること

  • 簡単な機械学習のやりかた

作るAIの目的

「機械学習って何?」や「どんな種類があるの?」などの細かい話はさておき、どんなAIを作るのか、作成に必要なものを説明していきます。

何を予測するのか

もしタイタニック事故に出会っていたら生存していたのか予測する

使うもの

  • タイタニック乗客データ(公開データ)
  • google colaboratry(環境構築用)
  • python(コード記述用)

AIの作成手順

では早速作っていきましょう。

Colaboratoryを開く

リンクをクリックするか、グーグルドライブから「新規→その他→Google Colaboratory」を選択します。
特に環境構築は必要なく、そのままpythonコードを動作させることができます。

この辺りはColaboratoryの便利な部分ですね。

データ取得

まずはデータの取得です。以下のコードをColaoratoryに記述して実行します。

# 公開データを取得
from sklearn import datasets
X, y = datasets.fetch_openml(data_id=40945, return_X_y=True, as_frame=True)

このコードを実行することでデータを取得できます。データ取得としてはこれで終了です。

次のステップに進みたい方は「前処理」へ、
どんなデータが取得できたのか気になる方は以下の表を見ていただければと思います。

idpclassnamesexagesibspparchticketfarecabinembarkedboatbody
01.0Allen, Miss.female29.00000.00.024160211.3375B5S2NaN
11.0Allison, Master. male0.91671.02.0113781151.5500C22 C26S11NaN
21.0Allison, Mr. male30.00001.02.0113781151.5500C22 C26SNone135.0

細かいデータの説明としては以下の通りとなっています。

  • survival: 生き延びたかどうか 0 = 生きてない, 1 = 生きた
  • pclass: チケットのグレード 1 = 1番高い, 2 = 2番目, 3 = 3番目
  • sex: 性別
  • Age: 年齢
  • sibsp: タイタニックに乗っている兄弟と配偶者の数
  • parch: タイタニックに乗っている子どもと親の数
  • ticket: チケット番号
  • fare: 運賃
  • cabin: 客室番号
  • embarked: 乗船港 C = Cherbourg, Q = Queenstown, S = Southampton

前処理

さて、データが取得できたので、次は前処理をしていきます。やることは、

  1. 重要でないデータを捨てる
  2. データの穴抜けを埋める
  3. データを扱いやすい形に変換する

の3つです。

重要でないデータを捨てる

まずは、重要でないデータを切り捨てましょう。

# 食べられない部分は捨てる
feature_columns =["name", "sibsp", "parch", "ticket", "fare", "cabin", "boat", "body", "home.dest"]
X = X.drop(columns=feature_columns, axis=1)

このコードを実行することで4つの列以外のデータは削除されました。
残ったデータは、pclass, sex, age, embarkedです。

データの穴抜けを埋める

次に、2つ目の「穴抜けを埋める」を行っていきます。まずデータの穴抜けを確認しましょう。

# データの欠損値データの穴抜けを確認
X.isnull().sum()

以上のコードを実行すると、以下のような結果が得られます。

pclass0
sex0
age263
embarked2
データ欠損値の一覧

それぞれの値がいくつ欠損値があるのかを表した結果が出力されました。

今回は”age”と”embarked”のデータ欠損値を穴埋めしていきます。
“age”には中央値を、”embarked”には最頻値を入れます。

# 穴抜けを修正する

# 年齢の穴抜けには全体のちょうど真ん中の年齢を入れる
X["age"] = X["age"].fillna(X["age"].median())
# 乗船港の穴抜けには全体で一番人数の多いサウサンプトンを入れる
X["embarked"] = X["embarked"].fillna("S")

これで欠損値はなくなりました。

データを扱いやすい形に変換する

最後にデータの変換をします。
“sex”は文字列データになっているので、0か1の数値にします。”embarked”も文字列なので、数値に変換します。

“embarked”に関しては少し手の込んだことをしていますが、ここでの説明は省きます。

# 性別データは元のままでは扱いづらいので下ごしらえ
import pandas as pd
X["sex"] = pd.get_dummies(X["sex"], drop_first=True)

# "enbarked"乗船港は3種類ある機械にとってわかりやすくするため3つの列に分解
X = pd.concat([X, pd.get_dummies(X["embarked"], prefix="embarked")], axis=1).drop(columns=["embarked"])

“survive”も整数に変換しておきましょう。

# データを扱いやすい形に変換
# 目的変数今回は、「生き延びたかどうか変数をint型に
y = y.astype(int)

これですべてのデータが機械学習に使いやすいデータになりました。

モデル作成

ついに機械学習を行います。
まずは、機械学習を行うためのデータとテスト用のデータを分けておきましょう。

from sklearn.model_selection import train_test_split
# テストデータと学習データを分ける
# 味見用にデータを残しておく
seed=0
train_X, test_X, train_y, test_y  = train_test_split(X, y, test_size=0.3, random_state=seed)

それでは機械学習モデルを作ります。以下のコードを実行するだけです。

# 「モデルとは機械学習の種類を決めるものまた作成した機械学習の本体をモデルと呼ぶ

# 今回は決定木モデルを使用決定木って何って方は
# 「今回はフライパンを使って料理するみたいな感じで
# 思っていただければ
from sklearn.tree import DecisionTreeClassifier

# 機械学習を実行
# モデルを指定し学習データを突っ込みます

tree_model = DecisionTreeClassifier()
tree_model.fit(train_X, train_y)

なんとこれで機械学習ができました。簡単ですね。

テスト・実行

それでは最後にテストをしてみます。

# 作成した機械学習モデルに予測をさせてみる
from sklearn.metrics import accuracy_score

# 味見用に取っておいたテストデータで予測
# モデルにテストデータを突っ込むことで予測させます
pred_X = tree_model.predict(test_X)

# 精度を表示。1が100%正解で、0が0正解
# 0.816なら、81.6%の生存判定に正解したということになります
accuracy_score(test_y, pred_X)

以上のコードを実行すると、私の環境では以下のような出力になりました。

0.816793893129771

まとめ

AIを作る簡単な方法は、Google Colaboratoryを利用しpythonで15行ほどのコードを実行することでした。

また、AI作成は、以下の順序で行われます。

  1. データ取得
  2. 前処理
  3. モデル作成
  4. テスト・実行

簡単なデータであれば、複雑な作業が無くても機械学習を行えることがわかりました。
これを起点として、色々な機械学習を試していただければと思います。

コメント

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