【遊戯王デュエルリンクス】4ターン目でデッキ0枚 高速デッキ破壊デッキ

 うまく動くと4ターン目にも相手のデッキを0枚にできる高速デッキ破壊デッキを作りました。

f:id:upura:20170718015816j:plain

 例えば「連鎖破壊」を自らの「ウォーム・ワーム」に対して発動し、手札・デッキから2枚の「ウォーム・ワーム」を破壊。さらに召喚した「ウォーム・ワーム」は「本陣強襲」で破壊します。この3枚のコンボで計11枚のデッキを破壊できます。

f:id:upura:20170718015325p:plain
f:id:upura:20170718015609p:plain
f:id:upura:20170718015614p:plain

 スキル「デュエルスタンバイ」の効果で初期のデッキ枚数が15枚になっていることもあり、かなりの速度で相手のデッキを削られます。安定性を考慮して「イクタァの暴風」や「陽動作戦」もデッキに入れています。

デッキレシピ

f:id:upura:20170718015232p:plain

ヒアリの画像識別分類器を作るのに良さげな「AntWeb」

最近、強い毒を持つ南米原産のアリ「ヒアリ」が日本国内で数例発見され、注目が集まっています。
www.nikkei.com

暇な時にでも画像からアリの種類を分類するアルゴリズムを実装しようかと思い、最初にデータを探していたところ、良さげなデータベースを見つけました。

www.antweb.org

AntWeb is the world's largest online database of images, specimen records, and natural history information on ants.

ヒアリ(学名・Solenopsis invicta)含め、体系的にアリが管理されています。
Species: Solenopsis invicta - AntWeb

画像もアップロードされています。
f:id:upura:20170708142527p:plain
Species: Solenopsis invicta - AntWeb

APIも整備されているようです。
Antweb API

[追記 20170708 19:40]
なんかヒアリ学習済みのAPIが公開されてるらしい。
dotnsf.blog.jp

matplotlibでラベルの向きを変える

Pythonによる勾配降下法の実装 - u++の備忘録の記事で、以下のような図を作成した。

f:id:upura:20170705111311p:plain

y軸のラベルは横を向いている。これで全く問題ないのだが、ラベルの向きを変えたい場合には、次のように"rotation"のオプションを指定すれば良い。

import numpy as np
import matplotlib.pyplot as plt

def J(x):
    return x*(x-4)+5

n = 100
x = np.linspace(0, 5, n)
np.random.seed(seed = 32)
stack = [] # プロット用のリスト

# Graph
plt.xlim(-1, 6)
plt.ylim(-1, 8)
plt.xlabel(r"$\omega$")
plt.ylabel(r"$J(\omega)$", rotation=0)
plt.plot(x, J(x), "b")
plt.show()

f:id:upura:20170705165941p:plain

Pythonによる勾配降下法の実装

勾配降下法

 目的関数{J}の1次微分を求めて、勾配の逆方向にパラメータ{\omega}を逐次的に更新していく手法。

数式表現

{\omega^{(m+1)}\gets\omega^{(m)}}-\eta\nabla_\omega J(\omega^{(m)})

実装

条件

 目的関数は{J(x)=x*(x-4)+5}に設定。明らかに{x=2}で最小となる。
f:id:upura:20170705111311p:plain

コード
import numpy as np
import matplotlib.pyplot as plt

def J(x):
    return x*(x-4)+5

def diffJ(x):
    h = 1e-4
    return (J(x+h) - J(x)) / h

n = 100
x = np.linspace(0, 5, n)
np.random.seed(seed = 32)
stack = [] # プロット用のリスト

'''
# Graph
plt.xlim(-1, 6)
plt.ylim(-1, 8)
plt.xlabel(r"$\omega$")
plt.ylabel(r"$J(\omega)$")
plt.plot(x, J(x), "b")
plt.show()
'''

# 初期値
omega = np.random.rand()*5
# ステップ幅
eta = 0.01

for i in range(100000):
    # プロット用のリスト
    stack.append(omega)
    # パラメータ更新
    omega = omega-eta*diffJ(omega)
    # 収束判定
    if eta*diffJ(omega)<=0.0001:
        break

# 結果表示
plt.xlabel(r"number of steps")
plt.ylabel(r"$\omega$")
plt.plot(stack, "r")
plt.show()
出力

 {x=2}辺りに収束していると分かる。
f:id:upura:20170705111346p:plain

主成分分析における行列表現

線形次元削減

 高次元の訓練入力標本{x_i}から低次元の表現{z_i}を求めること。
 つまり{m\times d}の埋め込み行列{T}を用いて、{z_i=Tx_i}として{z_i}を求めること。

f:id:upura:20170704135846p:plain

主成分分析

 次元削減後の表現{z_i}{x_i}の正射影であるという制約の下で、{z_i}{x_i}となるべく近くなる埋め込み行列{T}を決定する。
 下線部は{TT^\mathrm{T}=I}と行列を用いて表現できる。
 このとき{z_i}{x_i}は次元が違うので、単純に比較できない。そのため{z_i}に左から{T^\mathrm{T}}をかけて{T^\mathrm{T}z_i}として次元を揃える。
 これらの差{|T^\mathrm{T}z_i-x_i|=|T^\mathrm{T}Tx_i-x_i|}を最小化するような{T}を求めることになる。

『画像認識』(機械学習プロフェッショナルシリーズ)第1章まとめ

 某所にて、『画像認識』(機械学習プロフェッショナルシリーズ)の勉強会(輪読形式)がありました。

www.kspub.co.jp

 第1章を担当し、以下の資料にまとめました。第1章では画像認識の概要がまとめられており、その後の章で具体的に解説していく構成になっています。
 古典的な画像処理手法から、近年話題になっているニューラルネットを用いた画像認識まで、幅広い話題を体系的に扱っています。また最小二乗法など数学的記述も豊富に記載されており、読み応えがありそうです。

【遊戯王デュエルリンクス】粉砕!+タイラント・ドラゴンの1ショットキル

海馬のスキル「粉砕!」と「タイラント・ドラゴン」を使った1ショットキルデッキを紹介します。

場に「タイラント・ドラゴン」を召喚し「流星の弓―シール」を装備。スキル「粉砕!」を発動し、攻撃力を300上げます。これだけで攻撃力2200で2回直接攻撃できる「タイラント・ドラゴン」が完成し、1ターンで勝利できます。

f:id:upura:20170701230122p:plain