ディープラーニングを、世界一簡単に実装する方法を見つけましたのでご報告します。
参考書籍
scikit-learnが最強すぎて泣けてきます。GPUには対応していませんが、ちょっと事前検証するにはもってこいのライブラリです。
ちなみに上記のコードでは、あまり精度が出ませんでした。理由はパラメーターをデフォルトのままだからです。ニューラルネットのモデルは、デフォルトの隠れ層の数1、ノード数100を設定しています。本当はいろいろ試して、最も良さそうなモデルを探す必要があります。
なのでグリッドサーチで探してみました。グリッドサーチは、総当たりでパラメータを探し、最も精度の高かったパラメータを教えてくれます。
手元のデータでは、隠れ層が3層の時に、最も精度が高いと出力されました。必ずしも層の数を増やすと精度が上がるわけではありません。ディープラーニングは表現力が高いため、教師データの数が少なすぎると、過学習が発生して精度が下がることがよく起きます。
関連記事:これだけは知っておけ!PythonでAI開発の基礎まとめ
・教師データが少ないと精度が全くでない。鞍点に落ちていると思われる。
・中のモデルがブラックボックスになるので、結果に対して説明できないのは辛い。
・ディープラーニングはパラメータの数が多すぎ。計算時間がかかる。
画像処理のCNNや、自然言語処理のLSTMやりたい場合、scikit-learnには必要な関数が用意されていません。CNNやLSTMの便利な関数が用意されているPyTorchやTensorFlowを利用しましょう。

転職の体験談:転職エージェントにボコボコにされて未経験からAIエンジニアに転職した話
参考書籍
ディープラーニングとは
ニューラルネットワークというアルゴリズムがあり、『入力層』・『中間層』・『出力層』の3つに分かれるのですが、このうち『中間層』を多層化したものをディープラーニングと呼びます。機械学習のアルゴリズムの一つです。
ディープラーニングの得意分野
画像認識分野で非常に高い性能を発揮します。理由は、畳み込みニューラルネットワークとReLU関数です。畳み込みニューラルネットワークにより、画像の特徴を適切に捉えることが出来るようになりました。ReLU関数では、誤差逆伝播法で微分が1になることから、勾配が消えなくなるという問題を解決しました。またそもそも計算量が低いため、活性化関数として非常に利用されています。
音声認識分野でも、音声の「あ」とか「い」とかの波形があるのですが、その波形を画像と見立て分類することで、素晴らしい性能を発揮しています。
音声認識分野でも、音声の「あ」とか「い」とかの波形があるのですが、その波形を画像と見立て分類することで、素晴らしい性能を発揮しています。
ディープラーニングは特徴量設計がいらない
ディープラーニングが流行った理由は、特徴量を自動抽出できるからです。従来の機械学習のアルゴリズムでは、人間がデータから特徴量の設計を行わなければいけませんでした。特徴量設計には、業務スキルと機械学習のスキルが求められ、1カ月くらい時間がかかります。この作業がゼロになったため、ディープラーニングはすごいという事になりました。
ただ、ディープラーニングの精度が他のアルゴリズムに優れているかどうかはまた別問題です。以前オープンデータ3000件を使った分類問題で、アルゴリズム別の比較実験をしましたが、決定木に精度で負けてました。データ量がせめて5000件はないとディープラーニングはまともな精度が出てきません。
まあそのうちディープラーニングのアルゴリズムも改良されて、少数データで画像分類以外でも性能が出てくるようになります。データサイエンティストがいらなくなる未来が、すぐそこまで来ています(やばいです)。
scikit-learnでディープラーニングを実装する
たった12行で、その人がニートかどうかを判別するディープラーニングを実装できました。scikit-learnのMLPClassifierを利用しています。実際のコードは以下の通りです。
#scikit-learnから必要な関数をインポート
import numpy as np
from sklearn.neural_network import MLPClassifier
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
from sklearn.metrics import confusion_matrix
#データの読み込み
data = np.loadtxt("neet.csv",delimiter=",", skiprows=1)
#特徴量データをXに、教師データをyに格納
X = data[:, 0:-1]
y = data[:, -1]
#学習データとテストデータに分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
#ニューラルネットワークで学習と評価
clf = MLPClassifier()
print cross_val_score(clf, X_train, y_train, cx=10)
#混合行列で評価
y_predict = clf.predirct(X_train)
print confusion_matrix(y_train, y_predict)
import numpy as np
from sklearn.neural_network import MLPClassifier
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
from sklearn.metrics import confusion_matrix
#データの読み込み
data = np.loadtxt("neet.csv",delimiter=",", skiprows=1)
#特徴量データをXに、教師データをyに格納
X = data[:, 0:-1]
y = data[:, -1]
#学習データとテストデータに分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
#ニューラルネットワークで学習と評価
clf = MLPClassifier()
print cross_val_score(clf, X_train, y_train, cx=10)
#混合行列で評価
y_predict = clf.predirct(X_train)
print confusion_matrix(y_train, y_predict)
ちなみに上記のコードでは、あまり精度が出ませんでした。理由はパラメーターをデフォルトのままだからです。ニューラルネットのモデルは、デフォルトの隠れ層の数1、ノード数100を設定しています。本当はいろいろ試して、最も良さそうなモデルを探す必要があります。
なのでグリッドサーチで探してみました。グリッドサーチは、総当たりでパラメータを探し、最も精度の高かったパラメータを教えてくれます。
from sklearn import grid_search
#ニューラルネットワークの隠れ層の候補をいろいろ定義
parameters = {'hidden_layer_sizes' : [(100,), (100, 10), (100, 100, 10), (100, 100, 100, 10)]}
#ニューラルネットワークのベストな隠れ層を探索
clf = grid_seatch.GridSearchCV(MLPClassifier(), parameters)
clf.fit(X_train, y_train)
clf.best_params_
#ニューラルネットワークの隠れ層の候補をいろいろ定義
parameters = {'hidden_layer_sizes' : [(100,), (100, 10), (100, 100, 10), (100, 100, 100, 10)]}
#ニューラルネットワークのベストな隠れ層を探索
clf = grid_seatch.GridSearchCV(MLPClassifier(), parameters)
clf.fit(X_train, y_train)
clf.best_params_
手元のデータでは、隠れ層が3層の時に、最も精度が高いと出力されました。必ずしも層の数を増やすと精度が上がるわけではありません。ディープラーニングは表現力が高いため、教師データの数が少なすぎると、過学習が発生して精度が下がることがよく起きます。
関連記事:これだけは知っておけ!PythonでAI開発の基礎まとめ
これからディープラーニングを実装する人へ
最後にディープラーニングを動かして思う事を、つらつら書いていきます。・教師データが少ないと精度が全くでない。鞍点に落ちていると思われる。
・中のモデルがブラックボックスになるので、結果に対して説明できないのは辛い。
・ディープラーニングはパラメータの数が多すぎ。計算時間がかかる。
画像処理のCNNや、自然言語処理のLSTMやりたい場合、scikit-learnには必要な関数が用意されていません。CNNやLSTMの便利な関数が用意されているPyTorchやTensorFlowを利用しましょう。
【参考】機械学習エンジニアへの転職なら『マイナビIT AGENT』
「マイナビ IT AGENT
」は、IT・ウェブ業界に特化した転職エージェントです。
1000名を超える営業体制を構築しており、最大手から優良ベンチャーまで15,000社を超える求人を保有しています。企業の採用責任者から定期的にヒアリングしており、離職率の高い企業や労働時間が長い企業など、職場環境や会社の雰囲気について情報収集している数少ない転職エージェントです。
ただし、関東と関西に案件が偏っているため、地方の方にはオススメできません。
また、職務経歴書や履歴書について丁寧なアドバイスをしてくれます。マイナビは、10年先のキャリアプランを考える方針で運営しており、他社の転職エージェントと比べ、利用者の満足度が極めて高いです。
20~30代のIT業界からAIエンジニアに転職されたい方におすすめです。

転職の体験談:転職エージェントにボコボコにされて未経験からAIエンジニアに転職した話