テクノロジー

今や自作がトレンド!やさしいAI(人工知能)の作り方、おしえます

aiを作るイメージ

AI(人工知能)は自作でできるなんていきなりそんなこと言われたらびっくりしますよね。

様々なメディアで見るAI(人工知能)はどれも高度な技術が必要そう、こういった分野について勉強していない人にはハードルが高いと感じやすいのも事実。

しかしプログラミングの知識とデータ、そして最適な手法を選べばAI(人工知能)を自作するのは十分可能です。

そこで今回はAI(人工知能)を自作していくのに必要な過程を実際に作っていきながら説明します。

今回作成するのはきのこの特徴と毒があるかをまとめたデータセットを用いて新たに入力した特徴のきのこに毒があるか判定するプログラムです。作ったものの課題は何かも考えていきます。

そしてこの記事ではPythonという言語を用いていきます。それでは、データを集め整えるという段階からお伝えしましょう。

データを集め学習できるように整える

データのイメージ

AI(人工知能)を自作する上でデータを集めるのは必要不可欠。というのも結果を出すために判断基となるデータがないと学習することができないからです。そして質と量ともにしっかりとしたものを集めないと精度の高い結果を出すことができません。

規模の大きな会社で長年蓄積したデータを活用としたもののそもそもの集め方が悪く手がつけられないという例も少なくありません。

データを集める方法は多岐にわたります。しかしAI(人工知能)を自作するのが初めてでしたらプログラム言語にあるライブラリを使用したり、kaggleというデータ分析のサイトから無料のデータセットを使うのがやりやすいでしょう。

ここまでの流れをコードにしていきます。初めの段階から今後も必要となるライブラリ(目的に応じて必要なものが入っている道具箱のようなもの)を一通りインポートしていきます。

import pandas as pd#データの読み込みで使用
import numpy as np#数値計算で使用

from sklearn.model_selection import train_test_split#学習に使うデータと正確さを検証するデータに分ける際に使用
from sklearn.neighbors import KNeighborsClassifier#データから分類をする際に使用

各ライブラリの名前の次にasをつけているのはあとでコードで書く時に短く書くことができるためです。

使用するデータはkaggleにある該当するページ( https://www.kaggle.com/uciml/mushroom-classification )から mushrooms.csvというファイルをダウンロードします。

そしてプログラム上でインポートします。

mush_data = pd.read_csv("mushrooms.csv", encoding="utf-8")

mush_dataという変数を明記しました。

以後これがインポートしたデータについてのこと。このデータではきのこの特徴について非常に多くの項目があるので今回は毒があるかと傘の特徴だけで見ていくことにします。必要な処理は以下の通りです。

mush_data = mush_data[["class", "cap-shape", "cap-surface", "cap-color"]]
変数名.head()で今回使用するデータの初めの部分を見ることができます。classesという項目にあるeがedibleで食べられる、pはpoisonousで毒があるという意味です。

次にデータに欠陥がないか変数名.isnull().sum()を使用します。

class 0
cap-shape 0
cap-surface 0
cap-color 0
これは各項目で欠けているデータがないということになります。もしここで欠けているものがあった場合それを削除するなどの対応が必要です。

傘の形、表面、色についてアルファベットで表記されているのでそれらを数字に直します。

mush_data["cap-shape"] = mush_data["cap-shape"].map({"b":0, "c":1, "x":2, "f":3, "k":4, "s":5})
# bell=b,conical=c,convex=x,flat=f, knobbed=k,sunken=s

mush_data["cap-surface"] = mush_data["cap-surface"].map({"f":0, "g":1, "y":2, "s":3})
#cap-surface: fibrous=f,grooves=g,scaly=y,smooth=s

mush_data["cap-color"] = mush_data["cap-color"].map({"n":0, "b":1, "c":2, "g":3, "r":4, "p":5, "u":6, "e":7, "w":8, "y":9})
#cap-color: brown=n,buff=b,cinnamon=c,gray=g,green=r,pink=p,purple=u,red=e,white=w,yellow=y

再び変数名.head()を用いると毒があるか以外の特徴は数字で示されていることがわかります。

集めて加工したデータを処理する

データのイメージ

AI(人工知能)の自作で次に必要なステップはデータを学習させることです。

データの種類によって必要な工程は変わっていきますので、例えば画像認識の場合は写真の中から物体がどれか認識してもらう必要があります。

今回紹介しているAI(人工知能)の自作の流れでは傘の特徴から毒があるかどうかを学習させます。

初めにインポートしたデータを毒の有無と傘の特徴に分けます。

y = mush_data.loc[:,"class"]
x = mush_data.loc[:,["cap-shape", "cap-surface", "cap-color"]]
そして毒の有無について言及しているyと傘の特徴について言及しているxを学習用データとテスト用のデータの2つに分けます。今回は学習:テスト=80:20で無作為に選ばせています。
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.2, train_size = 0.8, shuffle = True)

それでは学習用データを使い学習させていきます。

今回採用するのはk-近傍法というものからk-最近傍法というアルゴリズム。新しいデータ、言い換えれば次の章で入力する特徴に対し一番近い最近傍点が毒の有無についてどちらのラベルに属するかが予測結果です。
knn = KNeighborsClassifier(n_neighbors=1)
knn.fit(x_train, y_train)

学習の方は採用する手法にfitを与えデータを渡すことで完了します。

処理したデータを基に出力する

aiのイメージ

AI(人工知能)の自作、最後のステップは結果を出力し精度を評価することです。

早速入力をしてみましょう。ここでは釣鐘型で茶色、そして表面がつるつるしているものを想定しています。

mush_yoso = np.array([[0,3,0]])
prediction = knn.predict(mush_yoso)

それでは毒があるか見てみましょう。

print(prediction)
['e']
edible、つまり食べられることがわかりました。これがどれくらい信頼できるものなのか確認していきましょう。

傘の特徴についてのテストデータ1つ1つに対し毒があるか予測させ、実際のデータと答え合わせをすることで精度を見ていきます。

y_pred = knn.predict(x_test)
np.mean(y_pred==y_test)
0.6406153846153846
精度は6割程度に留まっています。原因として考えられるのははきのこの特徴を傘のみに絞ったためにプログラムが検証する要素の数、そもそものデータ数が足りなかったからというのが挙げられます。

ここまでで書いたコードをまとめると以下のとおり。

import pandas as pd#データの読み込みで使用
import numpy as np#数値計算で使用

from sklearn.model_selection import train_test_split#学習に使うデータと正確さを検証するデータに分ける際に使用
from sklearn.neighbors import KNeighborsClassifier#データから分類をする際に使用

mush_data = pd.read_csv("mushrooms.csv", encoding="utf-8")#kaggleでダウンロードしたファイルをインポート
mush_data = mush_data[["class", "cap-shape", "cap-surface", "cap-color"]]#ここではきのこの特徴を傘についてに絞り込む

mush_data["cap-shape"] = mush_data["cap-shape"].map({"b":0, "c":1, "x":2, "f":3, "k":4, "s":5})# bell=b,conical=c,convex=x,flat=f, knobbed=k,sunken=s
mush_data["cap-surface"] = mush_data["cap-surface"].map({"f":0, "g":1, "y":2, "s":3})#cap-surface: fibrous=f,grooves=g,scaly=y,smooth=s
mush_data["cap-color"] = mush_data["cap-color"].map({"n":0, "b":1, "c":2, "g":3, "r":4, "p":5, "u":6, "e":7, "w":8, "y":9})#cap-color:brown=n,buff=b,cinnamon=c,gray=g,green=r,pink=p,purple=u,red=e,white=w,yellow=y

y = mush_data.loc[:,"class"]
x = mush_data.loc[:,["cap-shape", "cap-surface", "cap-color"]]#毒の有無ときのこの特徴をxとyで分ける

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.2, train_size = 0.8, shuffle = True)#学習用とテスト用でデータを80:20で分ける

knn = KNeighborsClassifier(n_neighbors=1)
knn.fit(x_train, y_train)# k-最近傍法というアルゴリズムを用いて学習させる

mush_yoso = np.array([[0,3,0]]) #きのこの特徴を作成
prediction = knn.predict(mush_yoso)#作成したものを検証。
print(prediction)#検証結果の表示

y_pred = knn.predict(x_test)#テスト用データ分の有毒性を分類させる
np.mean(y_pred==y_test)#分類させたものと答え合わせをし正確さを検証

 

aiのイメージ

今回は「今や自作がトレンド!やさしいAI(人工知能)の作り方、おしえます」と題しAI(人工知能)を自作していくまでに必要な過程を実際に作る過程を見ながら説明していきました。

それは「必要なデータを集め学習できるように加工する」、「集めて加工したデータを処理する」、「処理したデータを基に出力する」です。

そして今回作成したものの正確度が6割ほどに留まっていた原因はきのこの特徴を傘のみに絞ったためにプログラムが検証する要素の数、そもそものデータ数が足りなかったからだと考察しました。

AI(人工知能)はプログラミングの基礎知識と必要なデータがあれば後は適切な手法を選ぶことで自作することは十分可能。簡単なものからでも挑戦し生活が少しでも便利になるといいですよね。

=== お知らせ ===

当サイト(AIZINE)を運営している大阪の人工知能の開発会社お多福ラボでは、AI(人工知能)の勉強会を開催していますので興味のある方はぜひお越しください。

お多福ラボセミナーのバナー

テクノロジー教育

コメントをどうぞ

  1. 通りがかり より:

    × 敷居が高い
    ○ ハードルが高い

    > 精度が6割

    機械学習におけるaccuracyの訳語としては「正確度」と訳すべきです。「精度」はprecisionの訳語です。

AIZINE(エーアイジン)

コメントをどうぞ

  1. 通りがかり より:

    × 敷居が高い
    ○ ハードルが高い

    > 精度が6割

    機械学習におけるaccuracyの訳語としては「正確度」と訳すべきです。「精度」はprecisionの訳語です。

トップへ戻る
タイトルとURLをコピーしました