
Outline
レコメンド機能として用いられる協調フィルタリングをニューラルネットワークで実装してみました。ポケモンの種族値を「潜在的な特徴量」として、ユーザー(トレーナー)の評価の人工データを生成し、人工データから逆に推定することで「このポケモンが好きな人はこんなポケモンも好きです」というレコメンド機能を実装しました。ディープラーニングというほど深いモデルではありませんが、かなり良い結果を得ることができました。
リポジトリ:https://github.com/koshian2/Pokemon_NCF
元ネタ
元ネタの論文はこちら。シンガポール国立大学の先生が書いた論文。比較的読みやすいです。協調フィルタリングをニューラルネットワーク(NCF:Neural Collaborative Filtering)のアプローチから研究しています。
Xiangnan He, Lizi Liao, Hanwang Zhang, Liqiang Nie, Xia Hu, Tat-Seng Chua, Neural Collaborative Filtering, 2017
https://arxiv.org/pdf/1708.05031.pdf
協調フィルタリングは従来の機械学習では(講義の演習問題のノートですが以前書きました)、ニューラルネットワークを使わないで実装するのが普通です。協調フィルタリングのアルゴリズム自体、アイテム(商品や映画など)とユーザーのレビュー(アイテムに対する★1~★5といった点数)を、直接観測できない潜在的な特徴量を媒介して計算するという、かなりニューラルネットワークに近い発想です。「多分ニューラルネットワークでできるよなー」とググったら論文が出てきたという次第です。
今回実装するのはこの論文に出てくる最も簡単なモデルです。Matrix Factorizationはやりませんが、Matrix Factorizationもこのニューラルネットワークのアプローチからいけるとのことです。
協調フィルタリング
従来の協調フィルタリングでどうレコメンドを求めるのかを見ていきます。協調フィルタリングがわかっている方はここ飛ばして結構です。例えばですが、Aさん、Bさん、Cさんが寿司ネタを評価してみました。それぞれ0~5点までで評価しています。
寿司 | A | B | C |
---|---|---|---|
トロ | 4.75 | 0.25 | ? |
大トロ | 4 | ? | 3.4 |
カツオ | ? | 0 | 4 |
ヒラメ | 0 | ? | ? |
タイ | ? | 4.75 | 1.15 |
「?」のところはそれぞれがまだ食べたことのない寿司ネタです。ここで3人にまだ食べたことのない寿司ネタをどの程度おすすめするのかを考えます。
Aさんの場合赤身が好きで白身は嫌いなようです。おそらくAさんにとってカツオは好まれて、タイは好まれないでしょう。Bさんの場合は逆に白身が好きで赤身は嫌いなようです。なので、Bさんにとっては大トロよりもヒラメをおすすめすべきです。Cさんの場合、Aさんほど極端ではないもののどちらかというと赤身のほうが好きそうです。Cさんにとってはヒラメよりもトロのほうが好まれそうです。
今やったことが協調フィルタリングのアルゴリズムです。協調フィルタリングとは与えられた好きか嫌いかの(レーティング)の情報から、未知のアイテム(この場合は寿司)のレーティングを推定するアルゴリズムです。教師あり学習の(訂正:CFは教師あり学習の要素もあるし、クラスタリングや主成分分析に似たところも多く教師なし学習の要素もあるので、一概に教師あり学習と断定はできないそうです。半教師あり学習だという意見もあります。)回帰問題です。?の推定結果をソートすれば、レコメンド機能つまり「○○が好きな人は○○もおすすめです」という、よくアマゾンで見られる機能に応用できます。
先程の寿司-ユーザーの表をYとします。表の要素を$y^{(i,j)}$、これはi番目の寿司ネタのj人目のユーザーの評価を表しましす。ただし$i\leq n_i, j\leq n_u$とします。今寿司ネタは5個、ユーザーは3人なので、$n_i=5, n_u=3$です。例えば、$y^{(2,1)}$はAさんの大トロの評価を表すため4となります。ただし$y^{(i,j)}$は評価がある場合のみ定義するので、Bさんの大トロに対する評価$y^{(2,2)}={\rm ?}={\rm undifined}$となります。問題設定はYの推定値つまり、$\hat{y}^{(i,j)}$を推定することです。
ではどう推定するのでしょうか?先程の例の場合、寿司ネタが赤身か白身か、A,B,Cが赤身・白身をどの程度好きかで評価しました。実は裏で以下のような計算をしました。
寿司 | 赤身 | 白身 |
---|---|---|
トロ | 0.95 | 0.05 |
大トロ | 0.8 | 0.2 |
カツオ | 1 | 0 |
ヒラメ | 0 | 1 |
タイ | 0.05 | 0.95 |
数値は適当に与えたものですが、寿司ネタと赤身白身の対応を表す表です。この表の値をXとします。ここで赤身か白身かというのは潜在的な特徴量になります。$x_k^{(i)}$、これはi番目の寿司ネタのk番目の特徴量に対する係数となります。ただし、$k\leq K$。今特徴量は赤身か白身かという2つなので、$K=2$となります。例えば、$x_1^{(3)}$はカツオの赤身の係数なので1となります。
またユーザのクロスで見た潜在的な特徴量の表は次のとおりです。これはA,B,Cがどれだけ赤身、白身を好きかというものです。
ユーザー | 赤身 | 白身 |
---|---|---|
A | 1 | 0 |
B | 0 | 1 |
C | 0.8 | 0.2 |
この表の値をΘとします。$\theta_k^{(j)}$は、j人目のユーザーのk番目の特徴量に対する値となります。例えば$\theta_1^{(3)}$は、Cさんの赤身に対する値なので0.8となります。
YはXとΘを使って次のように求められます。
$$Y = X\Theta^T * 5$$
例えば、Aさんのカツオに対する推定値$\hat{y}^{(3,1)}は、$
$$\hat{y}^{(3,1)}=x_1^{(3)}\theta_1^{(1)}+x_2^{(3)}\theta_2^{(1)} =(1*1+0*0)*5=5$$
となります。Aさんにカツオはとてもおすすめということですね。
実は、このXとΘというのは直接観測できない未知の値です。今説明のために特徴量を既知のものとして与えてしまいましたが、本来はユーザーの評価(Y)のみ観測できる値で、ユーザーの赤身、白身に対する好みというのは直接は観測できません。寿司ネタの赤身、白身の係数は外部から与えられるかもしれませんが、協調フィルタリングの場合特に与える必要はありません。XもΘも学習の過程でYから内生的に計算をすることができます。学習の過程でΘとXを交互に(協調的に)アップデートしていくため協調フィルタリングと呼ばれています。このような流れです。
目的関数は次の通りです。このJを最小化します。
\begin{align}
J&=\frac{1}{2}\sum_{i,j:r(i,j)=1}(\hat{y}^{(i,j)}-y^{(i,j)})^2 \\
r(i,j)&=\left\{\begin{array}{r}1 \qquad{\rm if}\quad y^{(i,j)}\neq{\rm undefined} \\ 0 \qquad{\rm if}\quad y^{(i,j)}={\rm undefined} \end{array}\right.
\end{align}
Yが定義されているもののみの誤差を取るというのが特殊ですが、誤差関数の中身は回帰分析と何ら変わりません。
従来の協調フィルタリングでは、ΘとXを媒介させることにだいぶ面倒な式や実装が入ります。しかし、ニューラルネットワークのアプローチでは、ニューラルネットワークの設計と目的関数を定義するだけであとは勝手に最適化してくれるので、割と簡単です。これを見ていきます。
ニューラルネットワークのアプローチ
2つの入力を途中でマージするのがポイント。左側のNNは、ユーザーの特徴量の係数を検出しており、Θの係数を求めているのと同義です。右側のNNは、アイテムの特徴量を検出しており、Xの係数を求めているのと同義です。これらをマージし、全結合のレイヤーを組み合わせていくことで、評価の推定値$\hat{y}^{(i,j)}$を計算します。
この論文では全結合層のレイヤーを多層につなげていますが、従来の協調フィルタリングのアルゴリズムになぞらえるならここは内積(Kerasの場合Dotレイヤー)で一気に推定値までもっていっていいと思います。モデルが軽くなります。
左側のNNの入力層の次元はアイテムの数$n_i$に、右側のNNの入力層の次元はユーザーの数$n_u$となります。データの$Y$の次元は$(n_i, n_u)$なので、左側のNNの訓練データの数は$n_u$、右側のNNの訓練データの数は$n_i$と、2つのNNの間で訓練データの数が異なるというちょっと困ったことがおこります。しかし、総当たりで計算すれば特に問題はなさそうです。細かい実装は後ほど。
ポケモンのレコメンド
ここからが本題。誰がどのポケモンがおすすめというデータは聞いたことがありません。しかし、ポケモンにおける種族値を潜在的な特徴量とすれば人工的にレート(評価)のデータを作ることは可能です。
種族値
ポケモンには種類ごとにステータスを決定づける「種族値」という固有のパラメーターがあります。初代「ポケモン赤」の種族値を見ると以下の通りです(特攻、特防と別れていないのが時代を感じる)。
名前 | HP | 攻撃 | 防御 | 素早 | 特殊 |
---|---|---|---|---|---|
フシギダネ | 45 | 49 | 49 | 45 | 65 |
フシギソウ | 60 | 62 | 63 | 60 | 80 |
フシギバナ | 80 | 82 | 83 | 80 | 100 |
https://pokemon.g-takumi.com/exertion_list.php
この種族値をアイテム(ポケモン)の潜在的な特徴量とします。本来協調フィルタリングでは、潜在的な特徴量にこのような直接観察できる値を用いませんが、評価データを人工的に作るためにあえて用います。人工的にデータを作ったあとは、学習の際にこれらの特徴量は知らないふりをします。つまり、この人工的にデータを作るプロセスを逆にたどっていくと協調フィルタリングのプロセスになり、協調フィルタリングは今からやっていることの逆問題を解いているともいえるでしょう。
ただし、種族値は標準化して用います。今、種族値の値を$S_k^{(i)}, k\leq 5, i\leq n_i=151$、とします。種族値ごとの最大値で割って、それらのポケモンごとの係数の合計が1となるように標準化します。つまり、
$$X_k^{(i)}=\frac{1}{5}\frac{S_k^{(i)}}{\max_{l=1}^{n_i}S_k^{(l)}}$$
とします。上記の3ポケモンについて計算すると次の通りです。
名前 | HP | 攻撃 | 防御 | 素早 | 特殊 |
---|---|---|---|---|---|
フシギダネ | 0.18 | 0.365671642 | 0.272222222 | 0.321428571 | 0.422077922 |
フシギソウ | 0.24 | 0.462686567 | 0.35 | 0.428571429 | 0.519480519 |
フシギバナ | 0.32 | 0.611940299 | 0.461111111 | 0.571428571 | 0.649350649 |
これはspecies_normalized.csvにあります。
人工データ
次にトレーナー(ユーザー)単位の特徴量の行列を作ります。今作りたいのは、トレーナーがポケモンの各ステータスに対してどの程度価値をおいて判断しているかを表すデータです。今トレーナーを25人用意します($n_u=25$)。係数はランダムに入れてもいいのですが、極端な例があったほうが面白いので次のようにしました。
- 最初の5人は1つのステータス極振り。トレーナー1はHPだけ見る(HPだけ1で残りは0)、トレーナー2は攻撃だけ見る(攻撃だけ1で残り0)……
- 次の10人は2つのステータスを均等に見る。トレーナー6はHP0.5攻撃0.5で残りは0、トレーナー7はHP0.5防御0.5で残り0……、トレーナー15は素早さ0.5特殊0.5で残り0
- 次の5人は実践的にありそうな値を適当に入れてみた
- 最後の5人はトレーナー単位での係数の合計が1となるように正の乱数を入れてみる
今係数をかなり適当に与えてしまいましたが、種族値に対するトレーナーの係数の分布を知っていればブートストラップ法で係数行列を与えてもいいと思います。係数の行列を抜粋すると次のようになります。全てのデータはtrainer_features.csvにあります。
ユーザー | 係数HP | 係数攻撃 | 係数防御 | 係数素早さ | 係数特殊 |
---|---|---|---|---|---|
トレーナー1 | 1 | 0 | 0 | 0 | 0 |
トレーナー2 | 0 | 1 | 0 | 0 | 0 |
トレーナー6 | 0.5 | 0.5 | 0 | 0 | 0 |
トレーナー16 | 0 | 0.8 | 0 | 0.2 | 0 |
トレーナー17 | 0.3 | 0.4 | 0 | 0.3 | 0 |
トレーナー18 | 0.3 | 0 | 0 | 0.3 | 0.4 |
トレーナー21 | 0.142306818 | 0.201214425 | 0.046424047 | 0.254790416 | 0.355264294 |
この行列をΘとします。Θの次元は$(n_u=25, 5)$となります。各トレーナーのポケモンに対する評価の人工データYは次のように計算します。
\begin{align}
A&=X\Theta^T \\
y^{(i, j)} &= {\rm round}(\frac{a^{(i,j)}}{\max{a^{(j)}}}, 0)*4+1
\end{align}
Aのi,j番目の要素は$a^{(i,j)}、$${\rm round}(z, 0)$はzの小数点以下を四捨五入を表します。特徴量どうしの内積を0~4の整数にマッピングして1を加える、つまり人工データで擬似的に与えられた評価は1~5の整数となります。トレーナーごとに最大評価が5になる保証がないのでスケール調整をしていますが、これはあってもなくてもどっちでもいいです。Yの行列の次元は$(n_i=151, n_u=25)$となりますが、最初の5×5の要素を抜き出すと次の通りです。
名前 | トレーナー1 | トレーナー2 | トレーナー3 | トレーナー4 | トレーナー5 |
---|---|---|---|---|---|
フシギダネ | 2 | 2 | 2 | 2 | 3 |
フシギソウ | 2 | 3 | 2 | 3 | 3 |
フシギバナ | 2 | 3 | 3 | 3 | 4 |
ヒトカゲ | 2 | 3 | 2 | 3 | 2 |
リザード | 2 | 3 | 2 | 3 | 3 |
全てのデータはdata.csvにあります。これで人工データが完成したので、いよいよニューラルネットワークの実装に入ります。
回帰問題として
レコメンド問題はレーティングをしていないデータ($y^{(i,j)}={\rm undefined}$)に対して、yの推定値を計算するものですが、先程作った人工データは全ての項目がレーティング済みです。今、レーティングしたかどうかはさておいて、ただの回帰問題として実装してみます。
前処理
データのcsvが3つあるので1つのNumpy配列になるように前処理します。
import numpy as np
import pandas as pd
# レーティングデータの読み込み
pd_data = pd.read_csv("data.csv",encoding="SHIFT-JIS")
# ポケモン名
pokemon_names = pd_data.values[:,0]
# レーティングデータ
data = pd_data.values[:,1:].astype(float)
# トレーナー別の特徴量係数の読み込み
pd_data = pd.read_csv("trainer_features.csv",encoding="SHIFT-JIS")
# トレーナー名
trainer_names = pd_data.values[:,0]
# 係数行列
trainer_coefs = pd_data.values[:, 1:]
# ポケモン別の特徴量(種族値)の読み込み
pd_data = pd.read_csv("species_normalized.csv",encoding="SHIFT-JIS")
# 種族値
pokemon_spicies = pd_data.values[:,1:]
# あとから読みやすいようにNumpy配列として保存
np.savez("data", data=data, pokemon_names=pokemon_names, pokemon_spicies=pokemon_spicies,
trainer_names=trainer_names, trainer_coefs=trainer_coefs)
種族値のデータも読んでいますが、学習の過程で使うことはありません。
ニューラルネットワークの実装
以下のようなネットワークを作ります。
__________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
==================================================================================================
input_1 (InputLayer) (None, 151) 0
__________________________________________________________________________________________________
input_2 (InputLayer) (None, 25) 0
__________________________________________________________________________________________________
dense_1 (Dense) (None, 5) 760 input_1[0][0]
__________________________________________________________________________________________________
dense_2 (Dense) (None, 5) 130 input_2[0][0]
__________________________________________________________________________________________________
dot_1 (Dot) (None, 1) 0 dense_1[0][0]
dense_2[0][0]
==================================================================================================
Total params: 890
Trainable params: 890
Non-trainable params: 0
__________________________________________________________________________________________________
人工データの作成過程では、種族値という潜在的な特徴量からレーティングを線形関数で作ったので、逆問題であるInput1、Input2から特徴量へのマッピングも明らかに線形となります。したがって、Input1,Input2への全結合層は1つでよいことがわかります。より人工データではなく、実際のデータで特徴量が線形関数で抽出できない場合はここを深くしてもいいと思います。
Denseで5ずつ変形したのち、2つのネットワークをDot(内積)で結合します。論文の図ではここは複数の全結合層で表現していましたが、どっちみち似たような計算になるはずなので、最初から内積を与えたほうが計算が速いと思います。ただし、レーティングが特徴量同士の線形結合で表現できない場合は、論文通りに深くする意味があるのではないかと思います。コードで書くと次のようになります。
import numpy as np
from keras.layers import Input, Dense, Dot
from keras.models import Model
from keras.optimizers import Adam
# 先にpreprocess.pyを実行してNumpy配列を作っておく
pokemon = np.load("data.npz")
# 定数
n_pokemon, n_trainer = pokemon["data"].shape #(151, 25)
# トレーナー別のポケモンに対するレーティングを入力するモデル input_shape=(151,)
input_a = Input(shape=(n_pokemon, ))
# 特徴量にマッピング
x_a = Dense(5, activation="relu")(input_a)
# ポケモン別のユーザーごとのレーティングを入力するモデル input_shape=(25,)
input_b = Input(shape=(n_trainer, ))
# 特徴量にマッピング
x_b = Dense(5, activation="relu")(input_b)
# モデルを結合(ここでは内積を取る)
y = Dot(axes=-1)([x_a, x_b])
# コンパイル
model = Model(inputs=[input_a, input_b], outputs=y)
model.compile(optimizer=Adam(lr=0.0001), loss="mse", metrics=["mse"])
追記:x_a, x_bの活性化関数、reluではなくtanh関数ほうがいいかもしれません。特に中間層の出力を取りたい場合、reluだと結構潰れます。試してみた限りでは、シグモイド関数→収束遅い、線形→誤差は少ないけどスケールの保証がないのと隠れ層を入れる場合は意味がない、tanh→線形に近い誤差までは落ちて案外いい感じ。
ただし、いつものようにX,yとfitさせるのではなく、Yを行と列の双方向でfitさせる必要があるので、通常のfit関数が使えません(行列を複製すればfitが使えるがそれではメモリ効率が悪い)。そこでfit_generatorを自作します。
fit_generator
# fit_generator
def fit_gen(data):
global n_pokemon, n_trainer
while True:
for i in np.random.permutation(n_pokemon):
for j in np.random.permutation(n_trainer):
# 1ランクのベクトルになるのでreshapeで2ランクにすること
yield [data[:,j].reshape(1,-1), data[i,:].reshape(1,-1)], data[i,j].reshape(1,-1)
# generatorを使ってフィット
model.fit_generator(generator=fit_gen(pokemon["data"]),
steps_per_epoch=n_pokemon*n_trainer, epochs=10)
ここがハマリどころで、reshape(1, -1)をしないと「次元が違うよ」と怒られます。これはYのスライスがベクトル(1ランク)であることによるものです。Pythonの言語仕様上、1ランクのベクトルをそのまま使うと奇妙な計算が起こる(例:ベクトルの転置がそのままになる)ので、バグ予防のために2ランク以上を要求しているのだと思います。reshapeすれば何の問題もないので直しましょう。
ジェネレーターは無限ループの形で定義して、あとは組み合わせ的に行と列のスライスをジェネレーターとして返しているだけです。forループのインデックスを順列(permutation)として返しているので、インデックスのシャッフル機能もあります。うまく収束しないときは学習率を調整しましょう(たいてい大きすぎる)。
CPUで1epoch7秒程度で計算できます。10epochしても1分ちょいです。ではデータと推定値を比較してみましょう。嗜好がHP、攻撃、防御……の各ステータス極振りのトレーナー1~5のピカチュウに対するレーティングの推定値を計算してみます。
# HPしか興味ない人(トレーナー1)のピカチュウのレーティングは?
pred_24_0 = model.predict([pokemon["data"][:,0].reshape(1,-1), pokemon["data"][24,:].reshape(1,-1)])
# 攻撃しか興味ない人(トレーナー1)のピカチュウのレーティングは?
pred_24_1 = model.predict([pokemon["data"][:,1].reshape(1,-1), pokemon["data"][24,:].reshape(1,-1)])
# 以下略
print("予測結果")
print("トレーナー1(HP)のピカチュウのレートのデータは、", pokemon["data"][24,0])
print("トレーナー1(HP)のピカチュウのレートの予測値は、", pred_24_0)
# 以下略
結果は以下の通り。なかなか良さそうです。トレーナー4だけかなり乖離がありますが、epoch数を増やせばなんとかなるでしょう。
3775/3775 [==============================] - 5s 1ms/step - loss: 0.5702 - mean_s
quared_error: 0.5702
予測結果
トレーナー1(HP)のピカチュウのレートのデータは、 2.0
トレーナー1(HP)のピカチュウのレートの予測値は、 [[1.788103]]
トレーナー2(攻撃)のピカチュウのレートのデータは、 3.0
トレーナー2(攻撃)のピカチュウのレートの予測値は、 [[3.095326]]
トレーナー3(防御)のピカチュウのレートのデータは、 2.0
トレーナー3(防御)のピカチュウのレートの予測値は、 [[2.2915573]]
トレーナー4(素早さ)のピカチュウのレートのデータは、 4.0
トレーナー4(素早さ)のピカチュウのレートの予測値は、 [[2.5494237]]
トレーナー5(特殊)のピカチュウのレートのデータは、 2.0
トレーナー5(特殊)のピカチュウのレートの予測値は、 [[2.6407263]]
NCFによるポケモンのレコメンド
さて、実際のレコメンドでは評価がundefinedな項目に対して予測がほしいわけです。これをどう実装するかを見ていきます。
損失関数のカスタマイズ
結論から言うと、fit_generatorのほかに損失関数も自作する必要があります。損失関数の引数がy_true, y_predの形式で与えられるので、y_trueでundefinedを検出できればいいわけです。トリッキーなやり方ですが次のように計算しました。
# より実践的な例にするために未評価の項目を入れる
np.random.seed(151)
rand = np.random.uniform(size=(n_pokemon, n_trainer))
# 乱数が0.6以下なら未評価とする
mask = (rand > 0.6).astype(int)
data = pokemon["data"]
data[mask==0] = 0
まずはモンテカルロ法で6割の確率で評価されていないようにします。maskの変数が1なら評価済み、0なら未評価とします。未評価のyを0とします。協調フィルタリングではポケモン単位で標準化しておくと、どのポケモンを評価していないトレーナーが現れた場合に、レーティングの平均値を返すという便利なトリックがあるので、平均標準化と「未評価=y=0」を両立したいのです。なぜ未評価=y=0が便利かというと、損失関数を次のように定義すればいいからです。
$$L(\hat{y}, y)=[{\rm sgn}(y)]^2(\hat{y}-y)^2 $$
ここで${\rm sgn}(z)$は符号関数です。符号関数の2乗は0以外なら1、0のみ0となるので、0に対するちょうどいいマスクになるからです。符号関数は幸いKeras.backend.signで使えます。
ここで注意しなければいけないのは、評価済みだが0になっている値と、未評価なため0になっている値を区別しなければいけないことです。そこで前者に対しては、結果に対してほとんど影響が出ないような微小な値ε(例:$\epsilon=10^{-8}$)を代入します。いくら微小な値といえど0ではないので、${\rm sgn}(\epsilon)=1$となります。これでできそうです。
# ポケモンごとの平均値を計算
avg = np.zeros(n_pokemon)
for i in range(n_pokemon):
slice = data[i, mask[i, :]==1]
if(len(slice) > 0):
avg[i] = np.mean(slice)
# 観測値から平均値を引く
data = (data - np.tile(avg, (n_trainer, 1)).T) * mask
# データありで0になってしまったところに微小量を加える
data[(mask==1) & (data==0)] = 1e-8
損失関数は次のようになります。
import keras.backend as K
# カスタム損失関数
def loss_function(y_true, y_pred):
squared = K.square(y_true - y_pred)
# sign(0)=0, sign(正の数)=1、sign(負の数)=-1なので、sign関数の2乗で未評価の項目をフィルタリングできる
return squared * K.square(K.sign(y_true))
ニューラルネットワークの実装は共通なので省略します。詳しくはコード全文を見てください。
訓練
25epochさせて訓練してみました。CPUで1周6~7秒で終わるので、3分もあれば訓練終わります。
# コンパイル
model.compile(optimizer=Adam(lr=0.0001), loss=loss_function)
# generatorを使ってフィット
n_epochs = 25
history = model.fit_generator(generator=fit_gen(data),
steps_per_epoch=n_pokemon*n_trainer, epochs=n_epochs).history
plt.plot(np.arange(n_epochs), history["loss"])
plt.show()
おすすめのポケモン
では実際におすすめのポケモンを表示してみます。
攻撃極振りのトレーナー2の場合
# おすすめのポケモンを上位10件表示
def recommendation_view(pred, mask, avg):
global pokemon
# 評価済みポケモン
print("評価済みポケモン")
print(pokemon["pokemon_names"][mask==1])
# 予測レート
score = (pred + avg) * (1-mask)
# ポケモンのインデックス
index = np.argsort(score)[::-1][:10]
cnt = 1
print("おすすめのポケモン一覧")
for i in index:
if mask[i] == 1: break
print(cnt, "位 : id =", i+1, "(", pokemon["pokemon_names"][i], ")", "予測レート :", score[i])
cnt += 1
print()
# 予測
def recommendation(column_id):
pred = model.predict([np.tile(data[:,column_id], (n_pokemon, 1)), data])
# おすすめ表示
recommendation_view(np.ravel(pred), mask[:,column_id], avg)
# 攻撃極振りが好きなトレーナー2の場合
print("-攻撃極振りのトレーナー2の場合")
recommendation(1)
print()
-攻撃極振りのトレーナー2の場合
評価済みポケモン
['フシギソウ' 'ヒトカゲ' 'リザード' 'リザードン' 'ゼニガメ' 'カメックス' 'キャタ
ピー' 'トランセル' 'ビードル'
'コクーン' 'オニドリル' 'アーボ' 'アーボック' 'ライチュウ' 'サンド' 'サンドパン
' 'ニドクイン' 'ニドラン♂'
'ニドリーノ' 'プリン' 'プクリン' 'ズバット' 'ゴルバット' 'パラセクト' 'ダグトリ
オ' 'コダック' 'ゴルダック'
'ウインディ' 'ユンゲラー' 'ゴーリキー' 'カイリキー' 'ウツドン' 'ドククラゲ' 'ゴ
ローン' 'ポニータ' 'ヤドラン' 'コイル'
'レアコイル' 'カモネギ' 'ジュゴン' 'ベトベトン' 'ゴースト' 'クラブ' 'ガラガラ'
'ベロリンガ' 'マタドガス' 'サイホーン'
'モンジャラ' 'タッツー' 'シードラ' 'ヒトデマン' 'ストライク' 'エレブー' 'カイロ
ス' 'ケンタロス' 'メタモン'
'シャワーズ' 'ポリゴン' 'オムナイト' 'カブト' 'サンダー' 'ハクリュー' 'ミュウ'
おすすめのポケモン一覧
1 位 : id = 150 ( ミュウツー ) 予測レート : 4.906726540281222
2 位 : id = 130 ( ギャラドス ) 予測レート : 4.66666896475686
3 位 : id = 136 ( ブースター ) 予測レート : 4.502372097969055
4 位 : id = 142 ( プテラ ) 予測レート : 4.382128940688239
5 位 : id = 106 ( サワムラー ) 予測レート : 4.356381470506841
6 位 : id = 85 ( ドードリオ ) 予測レート : 4.347608978931721
7 位 : id = 141 ( カブトプス ) 予測レート : 4.334814718791417
8 位 : id = 112 ( サイドン ) 予測レート : 4.185151010751724
9 位 : id = 91 ( パルシェン ) 予測レート : 4.101234656572342
10 位 : id = 135 ( サンダース ) 予測レート : 4.080316826701164
ミュウツーは全部強いからまだしも、ブースター、プテラ、サワムラーといった攻撃特化のポケモンがおすすめされていますね。
防御極振りのトレーナー3の場合
# 防御極振りが好きなトレーナー3の場合
print("-防御極振りのトレーナー3の場合")
recommendation(2)
print()
同様に防御重視のトレーナーに対するレコメンドを見てみます。
-防御極振りのトレーナー3の場合
評価済みポケモン
['フシギソウ' 'キャタピー' 'バタフリー' 'スピアー' 'ポッポ' 'ピジョット' 'コラッ
タ' 'ラッタ' 'アーボ' 'ライチュウ'
'サンド' 'ニドラン♀' 'ニドクイン' 'キュウコン' 'プリン' 'プクリン' 'ナゾノクサ
' 'クサイハナ' 'パラス' 'コンパン'
'モルフォン' 'ディグダ' 'ニャース' 'ペルシアン' 'オコリザル' 'ニョロモ' 'ニョロ
ゾ' 'ニョロボン' 'ゴローン' 'ポニータ'
'ヤドン' 'コイル' 'ドードー' 'パウワウ' 'ジュゴン' 'パルシェン' 'ゴース' 'ゴー
スト' 'キングラー' 'マルマイン'
'タマタマ' 'カラカラ' 'ベロリンガ' 'サイドン' 'ラッキー' 'ガルーラ' 'タッツー'
'ヒトデマン' 'バリヤード' 'ストライク'
'ブーバー' 'ラプラス' 'オムスター' 'カブトプス' 'プテラ' 'フリーザー' 'ファイヤ
ー' 'ミュウツー' 'ミュウ']
おすすめのポケモン一覧
1 位 : id = 130 ( ギャラドス ) 予測レート : 4.222222222222222
2 位 : id = 103 ( ナッシー ) 予測レート : 4.0
3 位 : id = 149 ( カイリュー ) 予測レート : 4.0
4 位 : id = 135 ( サンダース ) 予測レート : 4.0
5 位 : id = 145 ( サンダー ) 予測レート : 4.0
6 位 : id = 85 ( ドードリオ ) 予測レート : 3.923076923076923
7 位 : id = 59 ( ウインディ ) 予測レート : 3.909090909090909
8 位 : id = 94 ( ゲンガー ) 予測レート : 3.888888888888889
9 位 : id = 3 ( フシギバナ ) 予測レート : 3.857142857142857
10 位 : id = 121 ( スターミー ) 予測レート : 3.8
防御極振りはあまりうまく行かなくて、イワーク、ゴローニャといった固いポケモンがトップに出てきませんでした。
ロケット団におすすめのポケモンを探す
人工データに対するリコメンドを計算しても面白くないので新規のユーザーを対象にしてみましょう。アニメのロケット団に登場していただきます。
Wikipediaのムサシ、コジロウによると、無印編では次のポケモンを使用したそうです。以下の条件でレーティングを入力します。
- 進化のあるポケモンは進化前を4点、進化後を5点とする。進化のないポケモンは5点とする。進化前を捕まえてなければ点数は入力しない。
- ムサシ:アーボ4点、アーボック5点、ベロリンガ5点、シェルダー5点として入力
- コジロウ:ドガース4点、マタドガス5点、ガーディー4点、ウツドン4点、ウツボット5点として入力。コイキングとギャラドスは除外。
- ニャースはおすすめする側なのかおすすめされる側なのかわからないので除外
# ロケット団のポケモンを入れてみる
rocket_score, rocket_mask = np.zeros(n_pokemon), np.zeros(n_pokemon)
# アーボ(22)は4点、アーボック(23)は5点
rocket_score[22], rocket_score[23] = 4, 5
rocket_mask[22], rocket_mask[23] = 1, 1
# ベロリンガ(107)も5点
rocket_score[107], rocket_mask[107] = 5, 1
# シェルダー(89)は4点
rocket_score[89], rocket_mask[89] = 4, 1
# ドガース(108)は4点、マタドガス(109)は5点
rocket_score[108], rocket_score[109] = 4, 5
rocket_mask[108], rocket_mask[109] = 1, 1
# ガーディ(57)は4点
rocket_score[57], rocket_mask[57] = 4, 1
# ウツドン(69)は4点、ウツボット(70)は5点
rocket_score[69], rocket_score[70] = 4, 5
rocket_mask[69], rocket_mask[70] = 1, 1
# 標準化
rocket_score = rocket_score - avg
rocket_score[(rocket_score==0) & (rocket_mask==1)] = 1e-8
# おすすめ表示
print("-ロケット団の場合")
rocket_pred = model.predict([np.tile(rocket_score, (n_pokemon, 1)), data])
recommendation_view(np.ravel(rocket_pred), rocket_mask, avg)
結果は以下のとおりです。
-ロケット団の場合
評価済みポケモン
['アーボ' 'アーボック' 'ガーディ' 'ウツドン' 'ウツボット' 'シェルダー' 'ベロリン
ガ' 'ドガース' 'マタドガス']
おすすめのポケモン一覧
1 位 : id = 68 ( カイリキー ) 予測レート : 4.972293901443481
2 位 : id = 150 ( ミュウツー ) 予測レート : 4.928147346927569
3 位 : id = 127 ( カイロス ) 予測レート : 4.924015998840332
4 位 : id = 130 ( ギャラドス ) 予測レート : 4.735909057988061
5 位 : id = 136 ( ブースター ) 予測レート : 4.627373230457306
6 位 : id = 123 ( ストライク ) 予測レート : 4.561054853292612
7 位 : id = 106 ( サワムラー ) 予測レート : 4.539365941827947
8 位 : id = 142 ( プテラ ) 予測レート : 4.476280437575446
9 位 : id = 85 ( ドードリオ ) 予測レート : 4.413746590797718
10 位 : id = 141 ( カブトプス ) 予測レート : 4.409230938979558
なかなか渋い面子が出てきました。ロケット団への一押しは「カイリキー」ということになりました。ストライクよりもカイロスが上にきているのが面白いです。
注意点
ニューラルネットワークの結果はepoch数や初期の乱数で変わるので、実行のたびに結果が上下することがあります。従来の協調フィルタリングでも最急降下法を用いるため、同様の結果の不安定さは変わりません。
ただ、このようにニューラルネットワークのアプローチでも、数値でおすすめのポケモンを計算できたことは意義があると思います。今回扱った人工データは論文に載っていたものではなく自分が勝手に作ったものですが、かなり応用例はありそうな気はします。
- TensorFlowのチュートリアルのチュートリアル
- 【機械学習】scikit learnでの画像減色プログラム
- TensorFlow製アート・音楽生成プロジェクト「magenta」で曲を作ってみる。
- サカナクションさんをTensorFlow製アート・音楽生成プロジェクト「Magenta」に学習させてみる。
- pixivの機械学習モデルからアイドルのキャラクター性を計算してみたよ ζ*’ヮ’)ζ
- 非プログラマのための機械学習ツールKNIMEのご紹介
- 機械学習でお客様が他にも買いそうな商品を予測しようじゃないか
- Tensorflowの精度低下はlog(0)のせいだった
- 手書きひらがなの認識で99.78%の精度をディープラーニングで
- TensorFlow製音楽生成プロジェクト「Magenta」を開発環境の設定から曲生成までやってみる。
- AdaGradが学習率のスケジューリングを上手く調整してくれる理由 – 理論編 –
- TensorFlow製音楽生成プロジェクト「Magenta」でMIDIファイルを学習させ、曲を生成する。
- 論文要約: Learning both Weights and Connections for Efficient Neural Networks
- 自然言語入力処理のMicrosoft LUIS(日本語版)を使ってChatBotサンプルを作ってみる
- ILSVRCとは何か?
- Ubuntu16.04 + GTX1080 + CUDA8.0で 機械学習環境を構築する
- エロゲ製作でAIを使おうとした話
- 人はRubyだけで手書き数字認識できるか?
- PandasのCategorical関係を調べてみた~慣れれば便利(と思う)
- ニューラルネットワークのライブラリのインストール方法
- 確率的勾配降下法をadで実装してみた
- クラウド統合開発環境Cloud9でTensorFlowを使う~GetStarted~
- 深層学習フレームワークヒッチハイクガイドVer3.0
- Kerasでアニメキャラの顔認識
- paragraph2vecの論文 要訳 (Distributed Representations of Sentences and Documents)
- 問題が明確化できているときは、半分解けている
- Coursera Machine Learning スライドまとめ
- Coursera Machine Learning 総復習用メモ
- 機械学習用の画像切り出しツールを作る
- <初心者向け>pythonライブラリ<機械学習用>
- 代表的な機械学習手法一覧
- Deep Learning bookを読んで学んだこと
- データシティ鯖江のオープンデータを使って水位計の値を機械学習で予測してみる
- Recurrent Neural Networkの基礎(Peterさんのチュートリアルの翻訳)
- {tensorflow}をirisデータで試してみる
- Python 機械学習プログラミング 第1章 「データから学習する能力」をコンピュータに与える まとめ
- 【機械学習】手書き文字データで分類器のパフォーマンスチェックをしてみる
- Pythonで体験する深層学習 2章(輪講用資料)
- 直感のきく技術者になろう
- numpyだけでCNN実装
- JubatusでQiita記事を推薦してくれる日報アプリ作ってみた
- 機械学習(深層学習)で画像関連をやってみたい場合はじめに抑えておいた方がよいものは何か
- TensorFlowをWindowsでビルドする
- 統計学とデータ分析で儲ける作戦! 選挙のタイミングで儲けられる銘柄を、相関係数を用いて探す
- ディープラーニングでメイドインアビスの欠落文字を推定する
- PRML第1章 ベイズ曲線フィッティング Python実装
- pythonでRNN実装
- scikit-learnでDBSCAN(クラスタリング)
- ディープラーニングが分からなくてもいい感じに物体認識させるサービスを試す(iOS Swift + Bluemix Visual Recognition)
- 機械学習関連情報をトピックモデルで分類する
- Watson ConversationのTutorialを日本語でやってみた (前編)
- 活性化関数ReLUについてとReLU一族【追記あり】
- seq2seqで利用可能な日本語対話データセットをダウンロードするツール
- PRML第2章 スチューデントのt分布 Python実装
- メモリを操作するRNNでソートアルゴリズム(可変長&順序フラグあり)を機械学習できたよっ!
- Coursera Machine Learning (1): 機械学習とは?単回帰分析、最急降下法、目的関数
- 機械学習をざっくりと理解する
- 機械学習を始めて2週間、機械学習を始めるのに必要だったこと
- Vision APIとNatural Language APIを組み合わせて名刺から情報抽出する
- 名刺から情報を抽出するSlackBotを作る
- Jubatusを使った感情分析を行うLINE Botの作成
- ChainerでYOLO
- うまくいきそうにない技術
- アンサンブル学習(Stacked generalization)のサンプルプログラムと実行例
- f-divergence一族の可視化
- Coursera Machine Learningの教材に沿って協調フィルタリングを学ぶ
- Watson ConversationのTutorialを日本語でやってみた (後編)
- FXシステムトレードのプログラムをいくつか作ってみて分かった課題とその解決法について
- 機械学習の開発内容について(Example)
- KerasでDCGAN書く
- Kaggleまとめ:BOSCH(kernels)
- Watson Visual Recognitionがすごすぎて俺の中で話題になっている件
- 高次元データの次元削減および2次元プロット手法
- Coursera Machine Learning (2): 重回帰分析、スケーリング、正規方程式
- PRML第3章 エビデンス近似 Python実装
- Windows10にChainer+CUDA 8.0をインストール
- Kaggleまとめ:BOSCH(winner)
- Watson Visual Recognitionを使った簡単顔認識アプリを作ってみよう
- Numpyのみを用いた、畳み込みニューラルネットワークの実装
- Tensorflowを使ってROS上でMNISTをやるノードを立てる
- 未踏の応募資料を公開します 【統計的かな漢字変換】
- MeCabとNEologdのインストール方法(CentOS6/CentOS7)
- PRMLのアルゴリズムをPython(ほぼNumpyだけ)で実装
- pythonでHMMのパラメータ推定実装
- 非機械的データ分析入門
- Tensorflow_in_ROSのコードを解説する
- Coursera Machine Learning (3): ロジスティック回帰、正則化
- 【初心者向け】Re:ゼロから始める遺伝的アルゴリズム【人工知能】
- PRML第4章 ベイズロジスティック回帰 Python実装
- Googleスプレッドシートの機械学習アドオンを日本語で試す
- defragTreesがよさそう
- 深層強化学習(DQN)でオセロもどきAIを作ってみた
- TensorFlow 0.12で追加されたEmbedding Visualizationを試す
- ニューラルかな漢字変換
- Jubatus をインストールして使ってみる【2017年版】
- [Python] Deep Learning: ディープラーニング (DBN, SDA) をライブラリを使わずに実装してみた
- 機械学習で美少女化 ~ あるいはNEW GAME! の世界 ~
- 取り急ぎpix2pixで遊んでみた(追記あり)
- 【論文シリーズ】DNCー動的な記憶装置を搭載した人工知能
- 全自動機械学習で実現する、現場のためのワンクリックデータ予測
- 誰でも分かるTrueSkill
- 機械学習向け並列分散処理フレームワーク Petuum について調べてみた
- Julia のススメ 〜 Deep Learning のための Julia 〜
- Coursera Machine Learning: 概要とWeek1-Week5までを振り返って
- Noise Contrastive Estimationについて
- Ruby でニューラルネットワーク
- メンターとパンサーを人工知能に区別させてみた
- Schooの動画レコメンドについて
- AdaBoost の弱学習器を色々試してみた
- PRML第5章 混合密度ネットワーク Python実装
- NLP/機械学習/データ分析系のDockerイメージ8選 + 1
- pix2pixでポップアートから写真を復元してみた (追記あり)
- “逐次的np.append”と”list.append+最後にnp.array作成”の速度比較
- Coursera Machine Learning (4): ニューラルネットワーク入門
- 幼女画像判定システムLolinco フロント編
- GCP(Google Cloud Platform)を活用した機械学習バッチ運用環境(2016)
- TensorFlowのinitialize_all_variablesがDeprecatedになった件
- これを理解できれば自然言語処理もできちゃう? MNISTでRNN(LSTM)を触りながら解説
- TensorFlow の名前空間を理解して共有変数を使いこなす
- Girl Friend Factory – 機械学習で彼女を創る –
- 機械学習でなんとなく材料研究者の気分を味わおう
- (Chainer) DNC(Differentiable Neural Computers)で文字列の学習&生成
- 絵で理解するWord2vecの仕組み
- PCAとSVDの関連について
- PRML第6章 ガウス過程による回帰 Python実装
- 人工知能やディープラーニングの理解に欠かせないパーセプトロンとは何か?
- 「ゼロから作るDeep Learning」の環境をDockerで作る
- JavaScript でニューラルネットワーク
- 2016年のディープラーニング論文100選
- 『Rによるデータサイエンス』をcaretで再現する
- Coursera Machine Learning (5): ニューラルネットワークとバックプロパゲーション
- ついに来た! Azure GPU インスタンス上に30分で構築する TensorFlow on GPU 実行環境構築手順
- LSTMを超える期待の新星、QRNN
- 非線形SVMとscikit-learnによる実装
- NIPS 2016参加報告
- PythonでAIシミュレーションプラットフォームOpen AI Gym を利用して遊ぶ (DQN編)
- TensorFlowをGCPで実行してみる
- Tensorflowで個人サービスにアップロードされた不適切なイラスト画像を検出する
- Chainerでモノクロ画像のカラー化を学習してみる
- Watson Knowledge StudioのTutorialをやってみた (前編)
- TensorFlowで競艇予想
- 環境構築から深層学習チュートリアル
- 2標本問題の新展開~古典的手法からカーネル法まで~
- 医薬品設計とニューラルネットワーク
- Javaで機械学習(DeepLeaning4j) 文書を学習して特定の単語と関連性の高い単語を抽出してみる
- 機械学習を1ヵ月で実践レベルにする #1 (とっかかり編)
- AWS Lambdaによるサーバーレスな機械学習APIの作り方
- 機械学習モデルの実装における、テストについて
- 空気を読むUIを作る
- 30分でわかる機械学習用語「クラスタリング(Clustering)」
- 機械学習を1ヵ月で実践レベルにする #2 (オンライン講座)
- PythonからGPU使用率などの情報を取得する(nvidia-smiコマンド)
- DeepLearning研究 2016年のまとめ
- 機械学習を1ヵ月で実践レベルにする #3 (Octave 編)
- scikit-optimizeの紹介
- 機械学習で競馬予想(その4)
- foobarNet: ディープラーニング関連の○○Netまとめ
- TensorFlowで畳み込みLSTMを用いた動画のフレーム予測
- まだ機械学習の論文を追うのに消耗してるの?それBotで解決したよ
- 確率とモナドと確率論的プログラミング
- 森を彷徨う
- 対話システムに使える(かもしれない)音声情報処理入門
- Pythonにまつわる3タイプ別オススメ書籍
- 【初級編; 2017年版】脳波で機械を操る!ブレインコンピュータインタフェース(BCI/BMI)って何?
- ペンパイナッポーとアッポーペンを識別する(ChainerでYOLO ver2)
- 機械学習を1ヵ月で実践レベルにする #4 (線形回帰編)
- 【転職会議】クチコミをword2vecで自然言語処理して会社を分類してみる
- 深層学習による声質変換
- RNNで人間行動認識
- Word2Vecを用いた類義語の抽出が上手く行ったので、分析をまとめてみた
- ボット開発者のための機械学習入門
- 「量子コンピュータが人工知能を加速する」を読んで、数式を使わずにPythonでその概要を説明してみた
- Metalでカメラからの動画入力をリアルタイム処理する
- 機械学習におけるクラス分類問題の各関数の意味解説
- 【翻訳】scikit-learn 0.18 User Guide 4.3. データ前処理
- CCVを使ってみよう
- 【翻訳】scikit-learn 0.18 User Guide 3.1. クロスバリデーション:推定器の成果を評価する
- Jubatusのバースト検知機能(jubaburst)を使ってみた
- TensorFlow for iOS のモデルについて
- WindowsでGPU使ってTensorFlowを動かすメモ(TensorBoardも動かす)
- 【翻訳】scikit-learn 0.18 User Guide 3.3. モデル評価:予測の質を定量化する
- iOSのMPSCNNによる手書き数字認識のサンプルを読む – 前編
- インフラエンジニアが見た機械学習のトップカンファレンス NIPS 2016
- RNNにおけるDropoutの適用について
- 手書きで数式を書きつつストレス無くノートをデジタル化する方法
- 【PyStan】Graphical LassoをStanでやってみる。
- javascriptでchainerモデルを利用するためのKeras.js
- ニューラルネットワークは電気ねずみの夢を見るか?
- 量子アニーリングで組合せ最適化
- Retty流『2200万ユーザを支える機械学習基盤』の作り方
- 新年をシリコンバレーで迎えるための7日間ハンズオン
- TensorFlowは「テンサーフロー」か「テンソルフロー」か?TensorFlow自身に聞いてみる。
- チャットボットをAIでもっと素敵にする!自然言語処理の仕組み
- DeepLearningはアニメを変えるのか?
- PyCon 2016で発表したChat Botをコードベースから解説(Chainerを利用した雑談応答編)
- 30分でわかる機械学習用語「次元削減(Dimensionality Reduction)」
- 機械学習を1ヵ月で実践レベルにする #9 (オーバーフィッティング)
- iOSのMetalで畳み込みニューラルネットワーク – MPSCNNを用いた手書き数字認識の実装
- Keras+DQNでリバーシのAI書く
- 3層ニューラルネットワークを実装する
- 外部メモリー付きのニューラルネット”Differentiable Neural Computing (DNC)”について解説するよ
- 機械学習の学習用に画像情報抽出とラベル付けが自動でできる前処理アプリをRailsで作ってみた
- Raspberry Pi 深層学習ライブラリで物体認識(Keras with TensorFlow・Open CV)
- scikit-learnを用いた機械学習入門 -データの取得からパラメータ最適化まで
- 音楽の構成(Aメロ、サビ等)を自動で分割する。
- ニューラルネットワークの出力層設計に関する指針
- ロバストにいこう
- ゼロから作るDeep Learning Pythonで学ぶディープラーニングの理論と実装 第3章
- TensorFlow Saverで保存する世代数を指定する方法 (元旦の悲劇)
- 江ノ島を描く ~Neural Style~ [TensorFlowでDeep Learning 14]
- ”ゼロから作る Deep Learning”のための環境構築をdockerとVagrantで実現
- 私的Chainer入門
- WebでChainerを「触って」学習出来る Chainer Playground をやってみた
- 機械学習に必要な最急降下法の実装に必要な知識まとめ
- ディープラーニング(seq2seq)でtwitter chatbotを作ってみた
- 文章を○○風に変換する機械学習をやってみた
- Coursera Machine Learning (6): 機械学習のモデル評価(交差検定、Bias & Variance、適合率 & 再現率)
- 機械学習の内輪向け勉強会: 概念の理解
- PRML第10章 変分混合ガウス分布 Python実装
- 可能性の枝切りができない開発は必ず失敗する。
- Raspberry Pi 深層学習で「赤りんご」と「青りんご」を見分ける(Keras・Open CV)
- Coursera Machine Learning (7): サポートベクターマシーン (SVM)、カーネル (Kernel)
- Coursera Machine Learning (8): 教師なし学習 (K-Means)、主成分分析 (PCA)
- 機械学習で精度が出ない時にやることまとめ
- fastTextを使って単語じゃないものの分散表現を獲得する
- 機械学習をゼロから1ヵ月間勉強し続けた結果
- LightGBM ハンズオン – もう一つのGradient Boostingライブラリ
- 多分もっともわかりやすいTensorFlow 入門 (Introduction)
- 3日で資産が3倍に!! Azure Machine Learning(ML) でFx予測と自動売買連携。-その1 概要・準備編
- 【Tensorflow入門】適当にTensorflowを理解して、モデルを作ってみる
- カルマンフィルタってなに?
- ゼロから作るDeep Learningのメモまとめ
- Stanfordの授業CS231nでニューラルネット、畳み込みニューラルネットを学ぶ
- Raspberry Pi 深層学習でリアルタイム顔認識(Keras・Open CV)
- NIPS 2016 Adversarial Training Workshop 体験記
- 機械学習で電力需要を予測してみる パート2
- TensorFlowの学習モデルによるモバイル端末でのリアルタイム画像認識
- Coursera Machine Learning (10): 大規模機械学習
- いますぐ使える単語埋め込みベクトルのリスト
- OpenAI UniverseでするAtari Pongの強化学習
- 【初心者向け】MacでDockerを使ってTensorFlowを試す(Jupyter Notebook)
- 機械学習ことはじめ(オススメ教材・情報)
- Inside of Deep Learning (ディープラーニングの基本要素)
- Inside of Deep Learning あるいは深層学習は何を変えるのか
- ゆるふわ強化学習1
- PRML第12章 ベイズ的主成分分析 Python実装
- はじめての人向け機械学習【2017年度版】
- ニューラルネットワークを使ったWindowsアプリを作成
- Jupyter on Dockerでパスワードの設定方法が分からないあなたへ
- Coursera Machine Learning (11): 写真の光学文字認識 (Photo OCR)
- fastTextの学習済みモデルを公開しました
- ChainerやTensorFlowでGPUを使うと毎回結果が変わる理由と対策 (まとめ)
- ChainerでGPUを使うと毎回結果が変わる理由と対策
- TensorFlowでGPUを使うと毎回結果が変わる理由と対策
- 【word2vec】会社のクチコミを自然言語処理した結果を可視化してみる
- 再訪scikit-learn
- Pythonでベイズ最適化を行うパッケージ GPyOpt
- 機械学習のルールとベストプラクティス(Rules of Machine Learning: Best Practices for ML Engineering の意訳)
- 人工知能関連ニュースの、実際のところシリーズ
- 遺伝的アルゴリズムxニューラルネットワーク(NeuroEvolution)でOpen AI Gymの山登りをさせた話
- 月刊Interface 2017年03月号がTensorFlow大特集になっている話
- 数学の苦手なバイオの学生がCourseraの機械学習コースを修了して気づいたこと
- Tensorflowでブロック崩し
- Chainer2.0が近日リリース またそれとは別の大規模分散処理に対応したChainerもリリースされるらしい
- 機械学習ざっくりまとめ~パーセプトロンからディープラーニングまで~
- PRML第13章 隠れマルコフモデルの最尤推定 Python実装
- 趣味用に安く深層学習PCを作った
- iOSのMetal Performance Shadersでニューラルネットを実行する際のモデルの渡し方
- GPUなしではじめるディープラーニング
- TensorFlowでVGG19を使ってMNISTのエラー画像一覧を作ってみた
- O(log N)の底は何なのか
- 強化学習
- keras(tensorflow)で花の画像から名前を特定
- 自然言語処理における畳み込みニューラルネットワークを用いたモデル
- 普通のpython実行ファイル(argparseを含むファイル)をJupyter notebookで実行するときのメモ書き
- LINQ を使って 8 行で k-means 法を実装してみた
- TensorFlow (ディープラーニング)で為替(FX)の予測をしてみる
- GraphLassoを用いた株式市場の構造学習
- Kerasでfizzbuzz問題を解いてみる
- ゆるふわ強化学習2
- テキスト分類器fastTextを用いた文章の感情極性判定
- Keras with GridSearchCVでパラメータ最適化自動化
- 文系卒社会人が統計入門でのモヤモヤを克服した話
- 例の機械学習コースが良いらしいと知りながらも2年間スルーし続けたがやはり良かったという話
- 機械学習の regularization の訳は正則化 (正規化ではない)
- CPUで気軽に強化学習してみた話(DeepMind A3C)
- 機械学習とディープラーニングの入門者向けコンテンツまとめ
- なぜ機械学習にPythonが選ばれるのか
- 【テキスト分類】Convolutional Neural Networks for Sentence ClassificationをChainerで実装してみた
- ディープじゃない機械学習で為替(FX)の予測をしてみる
- Apache Sparkによる大規模データの分散処理による機械学習(回帰分析) by Amazon EMR
- 機械学習入門時に知っておきたい情報まとめ
- スタートアップ必須のコホート分析を、サバイバル分析の手法で、簡単かつ正確に
- Courseraの機械学習コースを始めるまえに用意しておくこと、覚悟すべきこと
- iOSのMPSCNNに渡すモデルパラメータのフォーマット / TensorFlowからの書き出し
- トピックモデルを操作 ~Interactive Topic Model~
- Cloud Dataflow(Python)で機械学習パイプラインを動かす
- TensorFlowの増大するAPIについて少し考えてみた
- [Python]強化学習(DQN)を実装しながらKerasに慣れる
- ScalaからTensorFlowのJava APIを呼びだすぞい
- Windowsに、オフラインでディープラーニング環境をインストールする(Tensorflow, Keras) ・・・「オフライン環境でのpipインストール方法」と言ってもいいかも・・・
- TensorFlow の “AttributeError: ‘module’ object has no attribute ‘xxxx'” エラーでつまづいてしまう人のための移行ガイド
- Webアプリケーションエンジニアがディープラーニングに挑戦する際にやったこと(Coursera Week1)
- 続々・node.js で社会性フィルター
- PyTorchリンク集
- TensorFlow iOS カメラサンプルで自作した画像分類器を動かす
- ChainerRLでライントレーサーする
- Cloud Dataflow(Python)でXGBoostを動かす
- 機械学習 トレーニングデータの分割と学習・予測・検証
- 文章から特徴量(素性)を抽出する.
- Qwiklabs の NVIDIA ラボで無料ハンズオンを試す
- 今更ながらchainerでSeq2Seq(1)
- kaggleの脳波検出コンペ上位モデルの解説を翻訳
- scikit-learnでモデルのハイパーパラメータチューニングをしよう!
- 今更ながらchainerでSeq2Seq(2)〜Attention Model編〜
- 自然言語処理における、Attentionの耐えられない短さ
- 4時間で「ゼロから作るDeep Learning」を読んで自分で動かしてみた
- 数学の知識がなくてもできる機械学習
- ゲーマーの為のTensorFlow入門
- [Python]KerasをTensorFlowから,TensorFlowをc++から叩いて実行速度を上げる
- 爆勝ちFXシストレ論文「Learning to Trade via Direct Reinforcement」を再現させたい
- Google Cloud DataflowでTensorFlowのGrid Searchをしてみた
- Ubuntu環境上でPyCharmを使った機械学習の環境を構築する(TensorFlowも導入するよ!)
- 会計データを学習して、仕訳の入力時に摘要の内容から勘定科目を予測してみる
- なぜ自然言語処理にとって単語の分散表現は重要なのか?
- scikit-learn でランダムフォレストによる多ラベル分類
- Google Video Intelligence APIのデモを触ってみた
- Getting Started With TensorFlow を翻訳
- 機械学習した結果から予測をHTTPで返す仕組みの一例
- 今更ながらchainerでSeq2Seq(3)〜CopyNet編〜
- Affineレイヤの逆伝播を地道に成分計算する
- 高校数学で理解・実装するニューラルネットワーク
- [改良版]KerasでVAT(Virtual Adversarial Training)を使ってMNISTをやってみる
- pytorch超入門
- GANで文章の生成(Controllable Text Generation – Arxiv.orgより)
- 【決定版】MacでPythonを使って『機械学習』を学ぶための環境構築
- 機械学習ナイーブベイズ分類器のアルゴリズムを理解したのでメモ。そしてPythonで書いてみた。
- Coursera Machine Learning を修了したので、感想を書いてみる
- 実サービスでの機械学習の活用に関するサーベイ
- ニコ動コメントコーパスでkaomoji2vecして顔文字をベクトル表現で扱う
- 【決定版】WindowsでPythonを使って『機械学習』を学ぶための環境構築
- 機械学習の環境を構築するのにAnacondaをインストールする必要はない。Minicondaを使おう
- TensorFlowによるDCGANでロゴ画像を生成してみた
- 教師無しimage to image ”Discover Cross-Domain Relations with Generative Adversarial Networks.” のざっくりした紹介
- TensorFlow (ディープラーニング)で為替(FX)の予測をしてみる CNN編
- MS の Deep Learning Framework CNTK で画風変換~もしも小学生の自分にゴッホを描かせたら?
- ディープラーニングのフレームワークの自作
- ある美女が,どの大学にいそうかを CNN で判別する
- FPGAでDeep Learningしてみる
- テンプレートを使って爆速で機械学習プロジェクトを作成する
- ブラウザで実行できるplaygroundまとめ
- 機械学習に用いるデータセット作成のための画像収集Pythonスクリプト
- Twitter感情分析で株価予測の論文を検証したら約70%の精度で上下予測できた
- ポエム判別器
- 生成モデルで語られる Kullback-Leibler を理解する
- データサイエンス、データ分析、機械学習に必要な数学
- Google Cloud ML EngineをJupyterから簡単に使えるMagic
- 【テキスト分類】Convolutional Neural NetworksにAttention機構を使ってみた。
- 転移学習:機械学習の次のフロンティアへの招待
- 誤差逆伝播法における行列演算まとめ
- ギブスサンプリング実装とJITコンパイラによる高速化
- Chainer で手書き数字認識(MNIST)
- ちょっと距離についてまとめてみた。
- デレマスで機械学習(データ取得編)
- 最小二乗法のアルゴリズムを理解したのでメモ。そしてPythonで書いてみた。
- トランプ氏のツイートを機械学習し、為替の予測をしてみた。〜GCP ML系使い倒し〜
- 【文分類】Convolutional Neural Networksのpooling方法を色々試してみた
- 【DeepAA on Web】ディープラーニングでアスキーアートを”Web上で”作る #DeepAA
- 「わかりやすさ」に注目した、機械学習による技術ブログの検索
- ディープラーニングでイラスト画像分類
- SE, PG系の方がデータ分析、機械学習をやる必要が出た時にまず手にとるべき一冊
- 顔画像から年齢・性別を推定するためのデータセットIMDB-WIKI
- DeepMindのSonnetを触ったので、TensorFlowやKerasと比較しながら解説してみた
- javascriptでお手軽に顔認識できちゃうライブラリ
- TensorFlow の複数プロセスで queue を共有
- deep learning にも使える scikit-learn の概要と便利な機能
- xgboost: テーブルデータに有効な機械学習モデル
- Kerasでちょっと難しいModelやTrainingを実装するときのTips
- KerasでBEGAN(Boundary Equilibrium Generative Adversarial Networks)を実装する
- ノンプログラミングで機械学習サービスが作りたい! テキスト分類編
- word2vecで吉川英治本の感情分析をしてみた
- 誤差逆伝播法等に用いる 計算グラフ の基本パーツ
- FPGAでDeep Learningしてみる – きゅうりを選果する
- 自然言語処理における前処理の種類とその威力
- DEEP PROBABILISTIC PROGRAMMING —”深層学習+ベイズ”のライブラリ— Edwardの紹介
- 週刊少年ジャンプの短命作品を,機械学習で予測する (前編:データ分析)
- 画像の認識 〜 Yolo
- Batch Normalization の理解
- 【決定版】WindowsでPythonを使って『画像処理』を学ぶための環境構築
- Splunkと機械学習(基礎編)
- 人工知能時代の音楽制作への招待 – Google Magenta 解説&体験ハンズオン (自習編) –
- ノンプログラミングで機械学習サービスが作りたい! WebAPI編
- クラスタリング手法のクラスタリング
- BEGAN( + DCGAN )をpytorchで実装して日本人顔の生成
- ノンプログラミングで機械学習サービスが作りたい! フロントエンド編
- GAN(Generative Adversarial Networks)を学習させる際の14のテクニック
- ベイズ最適化のKeras DNNモデルへの適用
- ResNetで料理の材料をあてていく:food2stuff
- 皆んなでやろう。 汎用人工知能 “General AI Challenge” のススメ
- 新規アプリケーションへの深層学習適用のベストプラクティス
- Microsoft の Deep Learning フレームワーク「CNTK」が Python 対応になって格段に使いやすくなってた話
- データの傾向が変わっても性能が落ちにくいモデルの作り方
- CNTKによる、CT画像からガン患者の推定
- 物体認識用データセット作成支援ツール(Faster R-CNNとかSSDとか)
- ある美女が、どこ出身かをディープラーニングで判別する
- 画像変換手法CycleGANでパンダ生成モデルを作った話
- 複数の機械学習ライブラリを一発で適応しちゃう方法
- C#で実装するトップダウン型自動微分
- データの前処理① Imputerとdropnaで欠損値の処理
- 自然言語処理による文書分類の基礎の基礎、トピックモデルを学ぶ
- Watson Retrieve and Rankの公式ツールを利用して質問応答システムを作る (1)
- Watson Retrieve and Rankの公式ツールを利用して質問応答システムを作る (2)
- Google Cloud Vision APIのOCR(画像認識)を検証する
- 行列の積演算で openBLAS cuBLAS を体感する
- 各種正則化から転移学習まで。tensorflowソースコードで見るDL性能改善手法 まとめ(ver 2)
- データ前処理② データを Categorical から Numerical に。
- 素人の言語処理100本ノック:まとめ
- gensim入門
- Modeling Relational Data with Graph Convolutional Networksのまとめ
- Yolo が遅延するのでプロファイラーを使ってみた
- Watson Retrieve and Rankの公式ツールを利用して質問応答システムを作る (3)
- データサイエンス、データ分析、機械学習に必要な数学2
- ディープラーニングでザッカーバーグの顔を識別するAIを作る①(学習データ準備編)
- ロジスティック回帰の数式を分かりやすく解説、、、できたらいいな
- 機械学習の情報を手法を中心にざっくり整理
- ドコモとリクルートの対話
- ディープラーニングでザッカーバーグの顔を識別するAIを作る②(AIモデル構築編)
- Python vs Ruby 『ゼロから作るDeep Learning』 1章 sin関数とcos関数のグラフ
- ディープラーニングでザッカーバーグの顔を識別するAIを作る③(データ学習編)
- ディープラーニングでザッカーバーグの顔を識別するAIを作る④(WEB構築編)
- 回帰と分類の違い
- 音楽と機械学習 前処理編 MFCC ~ メル周波数ケプストラム係数
- 機械学習⑤ アダブースト (AdaBoost) まとめ
- 人工知能は遊戯王カードの価格を予測できるか?
- 次元の呪い (Curse of dimensionality) とは何なのか
- ディープじゃないディープラーニングをNumPyのみで超簡単実装してみた
- 日本語極性判定を作って公開した~SentencePiece版~
- 2017年夏インターンまとめ【データサイエンス】
- 画像を送ると何が写っているのかを返す LINE Bot を GCP で作った話
- 人と対話するロボットを開発するための、研究ガイド
- 人工知能、機械学習、ディープラーニングを昔の自分でもすぐに理解できるように整理してみた
- 機械学習はライブラリを使えれば数学は必要ないのだろうか。生の声を聞いてみた。
- 割と簡単に顔画像を集める方法
- pythonでなんとなく材料研究者の気分を味わおう【pymatgen入門】
- DCGAN-tensorflowで自動画像生成をお手軽に試す
- 文・単語単位の評判分析データセットのまとめ
- 整数値のベクトルをone hot表現に変換
- データサイエンティストを目指すなら、まず最適解をデザインしよう
- 顧客セグメンテーションをクラスタリングのアルゴリズムを使って5分でやってみた
- TensorFlowを中心とした機械学習環境をUbuntuで構築
- 顧客同士の類似性をMDS(多次元尺度構成法)を使って5分で可視化する
- nvidiaのgpuメモリが解放されない場合の解決方法
- ゲームアプリの「ドット絵」をディープラーニングで自動生成する
- Google翻訳における多言語間翻訳の仕組みを転用して、応答時のテンションが変わるチャットボットを作ってみた
- 機械学習チュートリアルまとめ
- VAEでキャラクターの設定を作る。
- 多変量正規分布の場合のKullback Leibler Divergenceの導出
- Microsoft のCustom Vision を使って遊んでみると想像以上に凄そうなサービスだった
- 行列微分のコツ
- R, Python, SAS, SPSSをヨーロッパのデータサイエンティストの視点で比べてみた
- 初めてのTensorFlow(改訂版)- 線形回帰とロジスティック回帰
- 安倍政権による北朝鮮ミサイル打ち上げ関与の陰謀論をデータから検証してみた
- 単語分散表現のためのダウンローダを作りました
- 【翻訳】scikit-learn 0.18 User Guide 1.11. アンサンブルメソッド
- 3×3 畳み込みフィルタ 結果画像
- HTMLファイルで動作するWord2Vecもどきを作った
- TensorFlowを使ってDir en greyの顔分類器を作ってみた – ①紹介編
- GANで犬を猫にできるか~cycleGAN編(1)~
- Excelで作る人工知能
- なぜニューラルネットはSVMに勝てないのか
- 機械学習について
- TensorFlowを使ってぐるなびの株価の終値の上下を予測してみた(途中経過)
- visual studioでtensorflow
- 【iOS 11】開発者ドキュメントから見る iOS 11 の新機能 #WWDC17
- 口コミのdoc2vecを用いたリコメンデーションシステムの構築
- C#でTensorFlowのCNNを動かす。
- ローカル環境をよごさずに Jupyter で python コードが動く環境を手軽につくる方法
- サービスのエンゲージメントをDAU/MAU比率で計測、可視化、予測まで5分でやってみた
- 週刊少年ジャンプの短命作品を,機械学習で予測する (後編:学習と評価)
- iOS11のcoreMLで物体認識(VGG16)を実装してみる(3分クッキング)
- コロナ社「文脈解析」本のレビュー
- Python vs Ruby 『ゼロから作るDeep Learning』 まとめ
- マーケティング・キャンペーンのROIをGoogleが開発したCausal Impactをつかって5分で計測してみる
- 【iOS 11】【Core ML】pip install coremltools でエラーになった場合の対処法
- ITエンジニアのための機械学習理論入門読了者が Kaggle やってみた
- ディープじゃないディープラーニングをperlのPDLのみで超簡単実装してみた
- Watson Assistant(旧 Conversation)で行こう ②ホテル予約 チャットボットを作る
- Unity上でTensorFlowのCNNを動かす。
- 機械学習を学ぶ上で個人的に最強と思う教科書
- シンプルなNNで 学習失敗時の挙動と Batch Normalization の効果を見る
- Udemyで学べる機械学習を全部見てみたんで、お勧め報告
- KerasのstatefulなRNNを使って、wavファイルを元にして自動作曲できないか試してみた
- シンプルなNNで SeLU と eLU と ReLU を見比べてみる
- Kerasでのim2txtの実装系
- macOS Sierraでtensorflowの新しいObject Detection APIを試してみた
- Core ML+Visionを用いた物体認識の最小実装
- Kerasを用いたCIFAR-10チュートリアル
- Watson Assistant(旧 Conversation)で行こう ③コンテキスト(Context)を活用した、ホテル予約チャットボット
- 機械学習で共有スペース利用状況の解析
- 畳み込みニューラルネットの規模と正答率の実験
- 機械学習の超初心者が、みんなが良いと言う記事を読んでまとめてみた
- 最新ディープラーニングアルゴリズムを使って物体検出のチュートリアルを動かしてみた
- 【入門者向け解説】TensorFlowチュートリアルMNIST(初心者向け)
- CVAEによるキャラクターの台詞の生成と、口調変換
- KerasのモデルとTensorFlowの最適化でWasserstein GANを学習する
- 途中分岐するニューラルネットワークの書き方と精度
- 【入門者向け解説】TensorFlow基本構文とコンセプト
- 「自然言語処理シリーズ」まとめ(コロナ社)
- Chainerのレポーティング機能についてまとめてみる
- データサイエンティストを目指して勉強するなら、Kaggleからはじめよう
- SONY謹製DeepLearningライブラリNNablaでCifar10実装してみたヅラ【ニッポン万歳】
- Keras + iOS11 CoreML + Vision Framework による、ももクロ顔識別アプリの開発
- MNISTでハイパーパラメータをいじってloss/accuracyグラフを見てみる
- 楽曲生成ニューラルネットワークを作った話
- DeepLearningで楽曲特徴量を抽出し、タグを予測する
- TensorFlowのiOSサンプルの実行手順(2017年7月現在)
- Lua版 ゼロから作るDeep Learning まとめ
- 『データサイエンティストとマシンラーニングエンジニアはKaggleやれ』というのは何故なのか
- Webエンジニアがやりたいことドリブンで機械学習に入門してみた
- 機械学習、深層学習のプラットフォームの整理
- R で 巨大な Bayesian networks を扱う
- Webカメラで撮った画像中の数字を判別する
- KerasモデルをCloud ML Engineで学習してOnline Predictionしてみた
- 【随時更新】マシンラーニングエンジニアが機械学習、統計学のおすすめ本を紹介する
- 高速な Convolution 処理を目指してみた。 Kn2Image方式
- Convolution処理の手法 Im2Col方式の図解
- 自前のDeep Learning用のデータセットを拡張して水増しする
- ハミルトニアンモンテカルロ法
- XGBoost/LightGBM のGPUサポート状況調査とベンチマーク
- 【TensorBoard入門】TensorFlow処理を見える化して理解を深める
- 不均衡データに対するClassification
- 【ニューラルネットワーク】Dropout(ドロップアウト)についてまとめる
- 【入門者向け解説】TensorFlowチュートリアルDeep MNIST
- DCGANで画像の自動生成
- 【入門者向け解説】畳み込み処理入門(TensorFlowで説明)
- KerasでLSTM AutoEncoderを実装する
- Chainerでアニメキャラクターの顔画像を分類する
- Kerasはfunctional APIもきちんと理解しよう
- Class activation mappingを用いたCNNの可視化
- Kerasで最短で強化学習(reinforcement learning)する with OpenAI Gym
- 機械学習を英語ビデオで学ぶサイトまとめ
- OpenAIの標準強化学習アルゴリズムPPOを試す
- iOSの機械学習フレームワークの比較 – Core ML / Metal Performance Shaders (MPSCNN) / BNNS
- AWS EC2のスポットインスタンスでGPU版tensorflowを動かす
- 仮想通貨取引所のPoloniexからAPI経由でデータ取得し、ディープラーニング(Chainer)で翌日の価格予測をしよう
- KerasでLSGAN書く
- Variational Autoencoder徹底解説
- kerasのmnistのサンプルを読んでみる
- 「Python 機械学習プログラミング」まとめノート(Jupyter)
- 機械学習超入門
- scikit-learnとflaskで簡単な機械学習✕Webアプリ
- 類似顔検索を半日で実装する
- コロナ社「構文解析」本のレビュー
- データサイエンティスト・データエンジニアのための Python ライブラリ一覧
- 機械学習の論文を読んでみたいけど難しそう、という時に見るサイト
- メガネな人を見つめてくれるWebカメラ
- 「ベクトルで微分・行列で微分」公式まとめ
- k近傍法とk平均法の違いと詳細.
- 音声認識をカスタマイズできるMicrosoftのCustom Speech Serviceの使い方
- Microsoftの音声認識技術を本気で検証してみた
- Tensorflowにおける各種演算まとめ
- Keras チュートリアル
- 機械学習の情報収集に役立つ13のメルマガ
- 一から始める機械学習(機械学習概要)
- ごちうさしか見たことない人がけもふれを見るとどんなコメントをするのか,コメントだけで機械はチノちゃんを認識できるのか
- 論文メモ:Virtual Adversarial Training
- KerasでCNNを簡単に構築
- 論文メモ:Understanding Black-box Predictions via Influence Functions
- Windows版Anaconda上でTensorFlow +JupyterNotebook +Matplotlib の環境構築(2017年8月版)
- 自力で機械学習の訓練画像データを収集する(Google Custom Search API ピカチュウ編)
- 台詞発話時の表情を自動判定する
- Kaggle – Instacart上位陣解法まとめ
- 機械学習における、定型的な作業を自動化する
- 【プログラマーのための統計学】 度数分布とヒストグラム
- 【プログラマーのための統計学】目次 – データサイエンス
- 初めての深層学習ロードマップ [随時更新&文献追加 予定]
- はじめてのdeeplearn.js
- crystal でレコメンドエンジンを作った話
- 【プログラマーのための統計学】平均値・中央値・最頻値
- 【プログラマーのための統計学】箱ひげ図
- ゼロから作るDeepLearning by Rust(第三章まで)
- 機械学習を半自動化するauto-sklearnの環境構築(Mac&Docker)
- TensorFlowの基本的な関数をXORゲートを学習するニューラルネットワーク作成してまとめてみる
- 【プログラマーのための統計学】分散と標準偏差と変動係数
- 囲碁プロ棋士の棋譜を眺める
- Kerasで実践的な為替予測をしてみたかった(RNN編)
- 自力で機械学習の訓練画像データを収集する(Tumblr API 吉岡里帆編)
- コスト関数を解読する
- データシティ鯖江のオープンデータを使って水位計の値を機械学習で予測してみる パート2
- 機械学習によるギター画像の分類 その1
- (保存版:ど素人向け) 機械学習/データ分析 読むべき記事リスト by Team AI
- hyperoptって何してんの?
- 文系エンジニアがCourseraの機械学習コースを1ヶ月で修了したので振り返ってみました。
- (保存版:随時更新)データ分析ハッカソンやる時の便利なチュートリアル集 by Team AI
- 速報 : カナダで強化学習中心の深層学習ビデオコースが無料公開
- 正規分布間のKLダイバージェンス
- 機械学習によるギター画像の分類 その2 ~ 学習データへのノイズ付与による識別のロバスト性向上
- 典型的な DP (動的計画法) のパターンを整理 Part 1 ~ ナップサック DP 編 ~
- sklearn.feature_selection による特徴量選択
- 720万手をディープラーニングで学習したオセロAIをChainerで作ってみた

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。