AI(人工知能)は自作でできるなんていきなりそんなこと言われたらびっくりしますよね。
様々なメディアで見るAI(人工知能)はどれも高度な技術が必要そう、こういった分野について勉強していない人にはハードルが高いと感じやすいのも事実。
しかしプログラミングの知識とデータ、そして最適な手法を選べばAI(人工知能)を自作するのは十分可能です。
そこで今回はAI(人工知能)を自作していくのに必要な過程を実際に作っていきながら説明します。
そしてこの記事ではPythonという言語を用いていきます。それでは、データを集め整えるという段階からお伝えしましょう。
データを集め学習できるように整える
AI(人工知能)を自作する上でデータを集めるのは必要不可欠。というのも結果を出すために判断基となるデータがないと学習することができないからです。そして質と量ともにしっかりとしたものを集めないと精度の高い結果を出すことができません。
規模の大きな会社で長年蓄積したデータを活用としたもののそもそもの集め方が悪く手がつけられないという例も少なくありません。
ここまでの流れをコードにしていきます。初めの段階から今後も必要となるライブラリ(目的に応じて必要なものが入っている道具箱のようなもの)を一通りインポートしていきます。
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)
それでは学習用データを使い学習させていきます。
knn = KNeighborsClassifier(n_neighbors=1) knn.fit(x_train, y_train)
学習の方は採用する手法にfitを与えデータを渡すことで完了します。
処理したデータを基に出力する
AI(人工知能)の自作、最後のステップは結果を出力し精度を評価することです。
早速入力をしてみましょう。ここでは釣鐘型で茶色、そして表面がつるつるしているものを想定しています。
mush_yoso = np.array([[0,3,0]]) prediction = knn.predict(mush_yoso)
それでは毒があるか見てみましょう。
print(prediction) ['e']
傘の特徴についてのテストデータ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")#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(人工知能)を自作していくまでに必要な過程を実際に作る過程を見ながら説明していきました。
それは「必要なデータを集め学習できるように加工する」、「集めて加工したデータを処理する」、「処理したデータを基に出力する」です。
そして今回作成したものの正確度が6割ほどに留まっていた原因はきのこの特徴を傘のみに絞ったためにプログラムが検証する要素の数、そもそものデータ数が足りなかったからだと考察しました。
AI(人工知能)はプログラミングの基礎知識と必要なデータがあれば後は適切な手法を選ぶことで自作することは十分可能。簡単なものからでも挑戦し生活が少しでも便利になるといいですよね。
コメントをどうぞ
× 敷居が高い
○ ハードルが高い
> 精度が6割
機械学習におけるaccuracyの訳語としては「正確度」と訳すべきです。「精度」はprecisionの訳語です。