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"]]
次にデータに欠陥がないか変数名.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"]]
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
ここまでで書いたコードをまとめると以下のとおり。
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")
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})
mush_data["cap-surface"] = mush_data["cap-surface"].map({"f":0, "g":1, "y":2, "s":3})
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})
y = mush_data.loc[:,"class"]
x = mush_data.loc[:,["cap-shape", "cap-surface", "cap-color"]]
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.2, train_size = 0.8, shuffle = True)
knn = KNeighborsClassifier(n_neighbors=1)
knn.fit(x_train, y_train)
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(人工知能)はプログラミングの基礎知識と必要なデータがあれば後は適切な手法を選ぶことで自作することは十分可能。簡単なものからでも挑戦し生活が少しでも便利になるといいですよね。