しろあんのさかな

ふーちゃのエンジニアブログ

ポケモンを技で分類してみた~LDA for Pokemon~

ゲンガーとプリンが大好きな大学院生が趣味でポケモンを勝手に再分類したのでまとめてみます。
プレゼン内容をまとめていて長いので、めんどくさいひとは最後のカラフルな図だけ見るとなんとなくやってることがわかるかもしれません。

ポケモンに新たなタイプをつける

概要

簡単に説明するとポケモンとその技のタイプにLatent Dirichlet Allocation(LDA)を適用してポケモンに含まれる技の確率分布であるトピックを抽出した後にポケモンを技トピックの大きさに基づいて分類します。

ポケモンのタイプについて

今回利用したポケモンのタイプは18種類です。

  • ノーマル / ほのお / みず / でんき / くさ / エスパー / かくとう / どく / じめん / ひこう / むし / いわ / ゴースト / ドラゴン / こおり / あく / はがね / フェアリー

ポケモンは種類ごとに最大2つのタイプを持っています。ピカチュウでんきタイプフシギダネはくさタイプとどくタイプです。

今回の目的

つまり、単純計算するとポケモンのタイプの組み合わせは18*18=324通りとなります。151匹の友達を軽くこえています。そこで今回はポケモンの覚える技のタイプに注目して偏りを見つけて5つのTopicを生成することで新たなタイプとしてみることにします。

LDAについて

トピックモデルという文章分類モデルのひとつです。文章に現れる単語には何らかの規則や偏りがあると仮定し、その偏りに注目して文章中のまとまりをTopicとして分類する教師なし学習です。

  • 利点
    • 教師なし学習なので比較的データ準備が楽
    • K-meansなどと比較してひとつの対象(たとえば文章)が複数の性質をもつと仮定しているため多くの情報を活かせます。
  • 欠点
    • パラメータチューニングが難しいとされます
    • 外乱によわいです

LDAの有名な利用例(LDA for news)

LDAはニュース記事のトピック把握などに使われています。ニュース記事は記事ごとに含まれる単語の偏りがあります。その偏りをTopicとして単語の確率分布で表します。

  • Topicを単語分布で表した例
    • Topic0 : 内閣*0.3 + 選挙*0.3 + 会談*0.2 + 脱退*0.2
    • Topic1 : 株*0.7 + 赤字*0.2 + 需要*0.1
    • Topic2 : オリンピック*0.4 + テニス*0.3 + サッカー*0.3

ここで、各トピックの名前は見た人の判断で決めてよい。例えばこの場合、Topic0は政治、Topic1は経済、Topic2はサッカーなど。

  • 単語をTopic分布で表すことも可能
    • 内閣: Topic1*0.8 + Topic2*0.1 + Topic3*0.1
    • オリンピック : Topic1*0.1 + Topic2*0.2 + Topic3*0.7

LDA for Pokemon

ちょっとトピックモデルの本を読むとニュース記事などに対するLDAではwordをカウント(bag of words)しますが、bag of wordsはbag of 〇〇などに応用できます的なことが書いてあります。今回はbag of typeです。ポケモンのtypeでコーパスを生成します。

LDA for ニュース LDA for ポケモン
対象 ニュース記事 ポケモン
Topic 単語の確率分布 わざのtypeの確率分布
コーパス 出現単語 わざのtype

やったこと

  1. データを集める
  2. JupyterでLDA

結果

ポケモンに含まれる5つのトピックです。今回はこのトピックを新たなポケモンのタイプとしてみようということです。

f:id:taiyaki_future:20190213220542p:plain
LDA for Pokemonの結果

勝手に新しいタイプを命名します。実際わかる人が共感できれば大丈夫みたいなところがあります。そもそもTopicに命名しなくても大丈夫です。

  • Topic0 : みずタイプ
  • Topic1:化学・超能力タイプ
  • Topic2:器用なほのおタイプ・洞窟タイプ
  • Topic3:物理タイプ
  • Topic4:でんきタイプ

ちなみに各ポケモンはこのトピックの確率分布で表すことができますが、そのうち一つのトピックが9割を占めるポケモンの例を図示しました。

f:id:taiyaki_future:20190213230028p:plain
Topicごとに9割がそのTopicからなるポケモン

考察

わざマシンやそのた特別に覚えるデータもつかったので、ノーマルが多くなってしまいますね。”ねむる”などほぼみんな覚えられるノーマルタイプのわざマシンが多いからかもしれません。Topic数10だとノーマルばっかりになりすぎたので5にしました。 Topic0, Topic2, Topic4はよく分かれていると思います。特にTopic2は洞窟にいそうなほのお、いわ、じめんタイプがうまくかたまってくれました。Topic1,Topic3の命名は苦労しましたが、Topic1はエスパーとかゴーストとかが多かったので超能力タイプ、Topic3はかくとう、ノーマルという物理アタック系だったので物理タイプと命名してみました。

感想

LDAを利用してポケモンを再分類をしました。正解がない分類なので、定量的な評価が難しいです。いいやり方あればおしえてほしいです。結果をみるとまあまあ似ているポケモンがかたまったかなという感じです。
ドメイン知識(ポケモンの知識)があまりないグループ(研究室)とドメイン知識があるグループ(インターン先)の両方でプレゼンしましたが、ドメイン知識がないグループだと定量的な評価指標がないぶん評価が難しいのでこの手の分類は、如何にドメインについて説明するかはとても重要だと思いました。データにどんな偏りがあるか(たとえばポケモンならくさタイプとどくタイプは共存しやすいなど)は共有したほうがいいかもしれません。

参考

www.amazon.co.jp

radimrehurek.com