Pythonで人工知能を使ったWebサービスを作ってみます。具体的には、その人がニートかどうかを予測するプログラムです。
今は洗練された機械学習のオープンソースやWebフレームワークが用意されていて、とても簡単に実装できます。初心者の方でも1ヶ月ほど勉強すれば十分出来るようになるのではないでしょうか。
なお今回のWebサイトは、cssなどのデザインが超適当です。。。
順番はこんな感じです。
1.Pythonをインストールする
2.FlaskとWTFormsをインストールする
3.データを用意する
4.予測モデルを実装する
5.予測結果をHTMLに渡すプログラムを実装する
6.結果を表示するHTMLを作成する
参考書籍
機械学習で必要なライブラリはほぼすべて揃います!
Flaskとは、Python用のWebアプリケーションフレームワークです。最低限の機能に絞り込まれているため、利用するまでのハードルがとても低いです。少し開発して試してみる際には最適です。
コマンドラインで以下を叩きます。Flaskが入ります。
conda install flask
また、WTFormsとは、HTMLとデータ送受信するために必要なライブラリです。Flaskには標準でformが入っていませんのでインストールが必要です。WTFormsは、HTMLとサーバ側のPythonプログラムの間でデータを送信してくれます。
コマンドラインで以下を叩きます。WTFormsが入ります。
conda install wtforms
データの中身は、以下の通りです。
カラム:年齢、性別、学歴、趣味、兄弟の有無、ニート可否
※ファイル名 neet.csv
csvデータの読み込みはPandasを使っていますが、モデルの作成と評価は全てscikit-learnで実装しています。作成したモデルは、joblib関数で保存します。
◆モデル作成のプログラム
サーバアプリケーションのPythonからHTMLに予測結果を引き渡す部分で、Flaskを利用します。
◆予測結果をHTMLに渡すプログラム
28-38行目では、HTML画面から入力された人の名前を受け取り、その人の基本情報があるかどうかneet2.csvを探します。
もし基本情報があるならばモデルで予測を行います。ニートと予測された場合「You are NEET!」と表示し、社畜と予測された場合、「You are Company farmer!」というメッセージを表示します。もし基本情報が登録されていない人の場合、「Your name is none (ToT)」というメッセージを表示します。
一応エラーになる可能性を想定し、try~exceptでエラーをキャッチしています。
42行目では、render_template関数で、'neetHello.htmlというHTMLファイルに、 formという変数を渡しています。
入力画面
出力画面モデルが予測した結果を、nameでPOSTしたものを表示させます。HTMLファイルの中に、 <div>Hello {{ name }}</div> を入力すれば動きます。
全てのプログラムが完成すれば、ローカルのWebサーバとして動作できます。コマンドラインから Pythonプログラムを起動した後、ブラウザで、http://127.0.0.1:5000/と入力してください。
今回もPython機械学習プログラミングを参考に実装しました。大変勉強になりました。
なおこのWebサービスが社会的に価値があるかはかなり疑問です。。。
AIの勉強法:大学不要?人工知能(AI)を独学で勉強する方法
転職の体験談:転職エージェントにボコボコにされて未経験からAIエンジニアに転職した話
今は洗練された機械学習のオープンソースやWebフレームワークが用意されていて、とても簡単に実装できます。初心者の方でも1ヶ月ほど勉強すれば十分出来るようになるのではないでしょうか。
なお今回のWebサイトは、cssなどのデザインが超適当です。。。
順番はこんな感じです。
1.Pythonをインストールする
2.FlaskとWTFormsをインストールする
3.データを用意する
4.予測モデルを実装する
5.予測結果をHTMLに渡すプログラムを実装する
6.結果を表示するHTMLを作成する
参考書籍
1.Pythonをインストールする
Anacondaを入れます。機械学習で必要なライブラリはほぼすべて揃います!
2.FlaskとWTFormsをインストールする
Webアプリ開発に必要なライブラリをインストールします。Flaskとは、Python用のWebアプリケーションフレームワークです。最低限の機能に絞り込まれているため、利用するまでのハードルがとても低いです。少し開発して試してみる際には最適です。
コマンドラインで以下を叩きます。Flaskが入ります。
conda install flask
また、WTFormsとは、HTMLとデータ送受信するために必要なライブラリです。Flaskには標準でformが入っていませんのでインストールが必要です。WTFormsは、HTMLとサーバ側のPythonプログラムの間でデータを送信してくれます。
コマンドラインで以下を叩きます。WTFormsが入ります。
conda install wtforms
3.データを用意する
残念ながらニートに関するデータを持っていないため、今回は疑似データを利用します。データの中身は、以下の通りです。
カラム:年齢、性別、学歴、趣味、兄弟の有無、ニート可否
※ファイル名 neet.csv
4.予測モデルを実装する
PythonのScikit-Learnで実装します。csvデータの読み込みはPandasを使っていますが、モデルの作成と評価は全てscikit-learnで実装しています。作成したモデルは、joblib関数で保存します。
◆モデル作成のプログラム
import pandas as pd from sklearn.metrics import confusion_matrix from sklearn.metrics import accuracy_score from sklearn import svm from sklearn.externals import joblib #データの読み込み df = pd.read_csv('neet.csv') neet_data = df.iloc[:,0:5].values neet_reslt = df.iloc[:,5].values #モデル作成 SVM = svm.SVC(C=3.0, gamma=0.1, probability=True) SVM.fit(neet_data, neet_reslt) #モデルを使って予測データを作成 neet_predict = SVM.predict(neet_data) #cross_validation print "cross_validation" print confusion_matrix(neet_reslt, neet_predict) #正解率 print "Accuacy" print accuracy_score(neet_reslt, neet_predict) # 予測モデルをシリアライズ joblib.dump(SVM, 'neet.pkl')※上記のプログラムの内容を理解できない方は、こちらでPythonでAI開発の基礎を確認してもらえると良いかなと思います。
5.予測結果をHTMLに渡すプログラム実装する
4で作ったモデルを呼び出して、HTMLに引き渡すプログラムを作ります。サーバアプリケーションのPythonからHTMLに予測結果を引き渡す部分で、Flaskを利用します。
◆予測結果をHTMLに渡すプログラム
from flask import Flask, render_template, request from wtforms import Form, TextAreaField, validators import pandas as pd from sklearn.externals import joblib #モデルの復元 SVM = joblib.load('neet.pkl') # Flaskインスタンスを app という名前で生成する app = Flask(__name__) class HelloForm(Form): sayhello = TextAreaField('',[validators.DataRequired()]) # Webアプリケーション用のルーティングを記述 # index にアクセスした際の処理 @app.route('/') def index(): form = HelloForm(request.form) return render_template('neet_app.html', form=form) @app.route('/hello', methods=['POST']) def hello(): form = HelloForm(request.form) if request.method == 'POST' and form.validate(): name = request.form['neet'] #nameから顧客情報を引っ張ってきて、モデルに入れて、NEETかどうか予測 df = pd.read_csv('neet2.csv') df_only = df[df['key'] == name] try: data_test = df_only.iloc[0:1,0:5].values label_prediction = SVM.predict(data_test) if label_prediction == 1: return render_template('neetHello.html', name=", You are NEET!") else: return render_template('neetHello', name=", Company farmer!") except: return render_template('neetHello', name=", Your name is none") return render_template('neet_app.html', form=form) # 開発用サーバーを実行 if __name__ == '__main__': app.run(debug=True)18行目では、@app.route('/')でルートレコーダ(URL)を指定しています。次の行のindex関数を実行するURLを指定しています。
28-38行目では、HTML画面から入力された人の名前を受け取り、その人の基本情報があるかどうかneet2.csvを探します。
もし基本情報があるならばモデルで予測を行います。ニートと予測された場合「You are NEET!」と表示し、社畜と予測された場合、「You are Company farmer!」というメッセージを表示します。もし基本情報が登録されていない人の場合、「Your name is none (ToT)」というメッセージを表示します。
一応エラーになる可能性を想定し、try~exceptでエラーをキャッチしています。
42行目では、render_template関数で、'neetHello.htmlというHTMLファイルに、 formという変数を渡しています。
6.結果を表示するHTMLを作成する
入力画面であるneet_app.htmlと、出力画面のneetHello.htmlファイルを作成します。入力画面
予測したい人の名前を入力するテキストフォームを用意します。
<form method=post action="/hello">
<form method=post action="/hello">
<dl>{{ render_field(form.sayhello) }}</dl>
<input type=submit value='click' name='submit_btn'>
出力画面
全てのプログラムが完成すれば、ローカルのWebサーバとして動作できます。コマンドラインから Pythonプログラムを起動した後、ブラウザで、http://127.0.0.1:5000/と入力してください。
今回もPython機械学習プログラミングを参考に実装しました。大変勉強になりました。
なおこのWebサービスが社会的に価値があるかはかなり疑問です。。。
AIの勉強法:大学不要?人工知能(AI)を独学で勉強する方法
【参考】機械学習エンジニアへの転職なら『マイナビIT AGENT』
「マイナビ IT AGENT
」は、IT・ウェブ業界に特化した転職エージェントです。
1000名を超える営業体制を構築しており、最大手から優良ベンチャーまで15,000社を超える求人を保有しています。企業の採用責任者から定期的にヒアリングしており、離職率の高い企業や労働時間が長い企業など、職場環境や会社の雰囲気について情報収集している数少ない転職エージェントです。
ただし、関東と関西に案件が偏っているため、地方の方にはオススメできません。
また、職務経歴書や履歴書について丁寧なアドバイスをしてくれます。マイナビは、10年先のキャリアプランを考える方針で運営しており、他社の転職エージェントと比べ、利用者の満足度が極めて高いです。
20~30代のIT業界からAIエンジニアに転職されたい方におすすめです。
転職の体験談:転職エージェントにボコボコにされて未経験からAIエンジニアに転職した話