サークル間類似度を定義する
まずは手作業でサークルにこんな感じの tag を付ける
tag 1 tag 2 tag 3 · · ·
circle 1 数学 機械学習 R · · ·
circle 2 機械学習 数学
.
.
.
.
.
.
.
.
.
.
.
.
circle m Android IoT Kotlin · · ·
▶ 元々手作業での配置のために似たようなことをしていたのを流用
▶ Tag 集合同士の類似度なら上手いこと定義できそう
▶ ただし tag はかなり雑につけられていることを想定したい
8
Slide 9
Slide 9 text
類似度の定義
Tag によるスコアの定義
r(t) :=
1
log[Tag t を持つサークルの総数]
サークル間類似度の定義
Ci
, Cj
をサークル i, j を表す tag 集合として
s(Ci
, Cj) := max
t∈Ci∩Cj
r(t)
▶ 珍しい tag が優遇されるように傾斜をつけた
▶ Tag が多いサークルが有利にならないよう最大だけを見る
9
サークルを部分集合に分割する方針で舵を切る
circle block
circle A あ
circle B う
circle C う
circle D あ
.
.
.
.
.
.
size: 3
size: 3
size: 3
size: 3
A B C D E F G H I J K L
A D I
B C E
F J K
G H L
サークル A~L を部分集合に分割
size: 3 size: 3
size: 3 size: 3
▶ こんな感じの表が自動でできれば十分なのでは?
▶ 同一ブロック内の細かい配置は人間が調整すれば良いんじゃない?
11
Slide 12
Slide 12 text
サークル分割問題
Table 1: xij
block 1 block 2 block 3 · · · block N
circle 1 1 0 0 · · · 0
circle 2 0 0 1 · · · 0
circle 3 0 0 1 · · · 0
.
.
.
.
.
.
.
.
.
.
.
.
...
.
.
.
circle M 0 1 0 · · · 0
min
x
m
∑
i
m
∑
j
n
∑
k
sij
xik
xjk
s.t. xik
∈ {0, 1}
n
∑
k
xik = 1
m
∑
i
xik
≤ ck
▶ 同一ブロック内のサークル間類似度の総和を最大化
▶ ブロック k には任意のサイズ ck
を与えることができる
12
ブロック間の調整
A D I
B C E G H L
F J K
あ01--あ03 い01--い03
う01--う03 え01--え03
ブロックの位置を人手で入れ替える
A D I
B C E
G H L
F J K
あ01--あ03
い01--い03
う01--う03
え01--え03
▶ 同じサイズのブロック同士は位置を交換することができる
▶ ブロックのサイズをできる限り揃えて人間による調整の余地を残す
▶ 元々の「あ」〜「こ」のブロックをもう少し細かく分割
17