SlideShare una empresa de Scribd logo
1 de 85
Descargar para leer sin conexión
機械学習するな
機会学習しろ
データサイエンスLT祭り 2夜目@Y社
@wonder_zone
機械学習するな
機会学習しろ
データサイエンスLT祭り 2夜目@Y社
@wonder_zone
あんた誰なん?
私です
• かんこれ(缶これ)
• @wonder_zone
• 研究室にて磔の刑にされたM2
• 学部:統計屋さん
修士:アルゴリズム屋さん
• 趣味:ビリヤード、音楽鑑賞、アニメ
• 推し:三森すずこ
ところで
僕の友人達が最近、こ
んなことを口にします
彼女欲しい…
俺ってなんで
彼女いない歴=年齢
なんだろ…
こじらせてますね
しかし、ちゃっかりしてる
彼らはこんなお誘いをし
てくれます
「○○日空いてる?
合コン行こうぜ」
それに対する僕の反応
いやあ忙しいからパス
だわー(やべえ研究の
進捗出さねえと)
【以前の彼ら】
「これからの時代は機械
学習だよっ!」
だが彼らも現実を見る
ようになった・・・
仮に行くとして
そりゃ成果を出したい
でも、僕は聖徳太子で
はないのでn人の話など
きけん
もっと言うと1人くらいし
か話がわからん!
ってことで、最適化され
た環境がほしい
ていうか自分にあった
相手をその場で機械的
に判断してほしい
あるよ
マッチングアルゴリズム
イメージ
1. 参加する
2. 相性占いと称してデータを入力する
3. アルゴリズムで良いマッチングを算出
4. その通りに席替え
5. たぶん仲良くなれる
イメージ
1. 参加する
2. 相性占いと称してデータを入力する
3. アルゴリズムで良いマッチングを算出
4. その通りに席替え
5. たぶん仲良くなれる
マッチングアルゴリズム
• 2つの集合の要素の全てが「幸せ」となるマッチング
となるような組み合わせ(=安定マッチング)を発見
するアルゴリズム
• よく聞く応用先
• 研修医配属における研修医と病院の組み合わせ
• 研究室配属における学生と研究室の組み合わせ
• ただし、研究室配属は謎の面接によって決めるパターン
もあるので全ての機関が行っているとは断言できません
もう少しドヤ顔で語りたいなら
• 最大マッチング問題の定義
• 入力:二部グラフ
• 出力:サイズが最大のマッチング
※サイズ=マッチングの個数
• 安定マッチング問題の定義
• 入力:二部グラフ+各点の相手に対する好みの順
• 出力:安定的なマッチング
※安定ではない=互いに現在の相手より好ましい組が
存在(ブロッキングペアが存在)
二部グラフ
言われてもわからんと
思うので良いマッチング
が一撃でわかる図
どちらが良いマッチングですか?
どちらが良いマッチングですか?
↑こっち
これは良いマッチングですか?
1
2
3
a
b
c
1太郎くん「僕はb子のほう
が好きなんだ!」
b子さん「私は2助くんより
1太郎くんの方が好き」
これは良いマッチングですか?
1
2
3
a
b
c
1太郎くん「僕はb子のほう
が好きなんだ!」
b子さん「私は2助くんより
1太郎くんの方が好き」
ブロッキングペア(1,	b)
これは良いマッチングですか?
1
2
3
a
b
c
ブロッキングペアを含まないマッチング
この業界で超有名な
やつ
Gale-Shapley	Algorithm
Gale-Shapley Algorithm
• Gale氏とShapley氏が提案したのでその名前から
• Gale,	David,	and	Lloyd	S.	Shapley.	"College	
admissions	and	the	stability	of	marriage."	The	
American	Mathematical	Monthly 69.1	(1962):	9-15.
• 日本でも研修医配属の時に使われているらしい
(公益財団法人医療研修推進財団のHPより)
この功績を讃えてShapley
氏は89歳にしてノーベル
経済学賞受賞(2012)
※Gale氏は2008年に死去
ちなみにShapley氏は
今年3月に死去…
悲しい
実際のアルゴリズムの流れ
1. 初期値は男性・女性ともに独身
2. 独身の男性𝑚がいる限り、以下の操作を繰り返す
3. 現在のペアの集合を安定マッチングとする
(おわり)
男性𝑚はまだ告白していない女性の中で最も好きな女性𝑤に告白
1. 女性𝑤が独身なら男性𝑚をキープ
2. 女性𝑤が独身でない(キープ相手𝑚#がいる)場合
•𝑤にとって𝑚が現在のキープ𝑚#よりも好みならば𝑚#を捨てて𝑚を
キープとする
•𝑤にとって𝑚よりも現在のキープ𝑚#が好みならば𝑚からの告白を
断る
実際のアルゴリズムの流れ
1. 初期値は男性・女性ともに独身
2. 独身の男性𝑚がいる限り、以下の操作を繰り返す
3. 現在のペアの集合を安定マッチングとする
(おわり)
男性𝑚はまだ告白していない女性の中で最も好きな女性𝑤に告白
1. 女性𝑤が独身なら男性𝑚をキープ
2. 女性𝑤が独身でない(キープ相手𝑚#がいる)場合
•𝑤にとって𝑚が現在のキープ𝑚#よりも好みならば𝑚#を捨てて𝑚を
キープとする
•𝑤にとって𝑚よりも現在のキープ𝑚#が好みならば𝑚からの告白を
断る
実際のアルゴリズムの流れ
1. 初期値は男性・女性ともに独身
2. 独身の男性𝑚がいる限り、以下の操作を繰り返す
3. 現在のペアの集合を安定マッチングとする
(おわり)
男性𝑚はまだ告白していない女性の中で最も好きな女性𝑤に告白
1. 女性𝑤が独身なら男性𝑚をキープ
2. 女性𝑤が独身でない(キープ相手𝑚#がいる)場合
•𝑤にとって𝑚が現在のキープ𝑚#よりも好みならば𝑚#を捨てて𝑚を
キープとする
•𝑤にとって𝑚よりも現在のキープ𝑚#が好みならば𝑚からの告白を
断る
実際のアルゴリズムの流れ
1. 初期値は男性・女性ともに独身
2. 独身の男性𝑚がいる限り、以下の操作を繰り返す
3. 現在のペアの集合を安定マッチングとする
(おわり)
男性𝑚はまだ告白していない女性の中で最も好きな女性𝑤に告白
1. 女性𝑤が独身なら男性𝑚をキープ
2. 女性𝑤が独身でない(キープ相手𝑚#がいる)場合
•𝑤にとって𝑚が現在のキープ𝑚#よりも好みならば𝑚#を捨てて𝑚を
キープとする
•𝑤にとって𝑚よりも現在のキープ𝑚#が好みならば𝑚からの告白を
断る
実際のアルゴリズムの流れ
1. 初期値は男性・女性ともに独身
2. 独身の男性𝑚がいる限り、以下の操作を繰り返す
3. 現在のペアの集合を安定マッチングとする
(おわり)
男性𝑚はまだ告白していない女性の中で最も好きな女性𝑤に告白
1. 女性𝑤が独身なら男性𝑚をキープ
2. 女性𝑤が独身でない(キープ相手𝑚#がいる)場合
•𝑤にとって𝑚が現在のキープ𝑚#よりも好みならば𝑚#を捨てて𝑚を
キープとする
•𝑤にとって𝑚よりも現在のキープ𝑚#が好みならば𝑚からの告白を
断る
実際のアルゴリズムの流れ
1. 初期値は男性・女性ともに独身
2. 独身の男性𝑚がいる限り、以下の操作を繰り返す
3. 現在のペアの集合を安定マッチングとする
(おわり)
男性𝑚はまだ告白していない女性の中で最も好きな女性𝑤に告白
1. 女性𝑤が独身なら男性𝑚をキープ
2. 女性𝑤が独身でない(キープ相手𝑚#がいる)場合
•𝑤にとって𝑚が現在のキープ𝑚#よりも好みならば𝑚#を捨てて𝑚を
キープとする
•𝑤にとって𝑚よりも現在のキープ𝑚#が好みならば𝑚からの告白を
断る
実際のアルゴリズムの流れ
1. 初期値は男性・女性ともに独身
2. 独身の男性𝑚がいる限り、以下の操作を繰り返す
3. 現在のペアの集合を安定マッチングとする
(おわり)
男性𝑚はまだ告白していない女性の中で最も好きな女性𝑤に告白
1. 女性𝑤が独身なら男性𝑚をキープ
2. 女性𝑤が独身でない(キープ相手𝑚#がいる)場合
•𝑤にとって𝑚が現在のキープ𝑚#よりも好みならば𝑚#を捨てて𝑚を
キープとする
•𝑤にとって𝑚よりも現在のキープ𝑚#が好みならば𝑚からの告白を
断る
実際のアルゴリズムの流れ
1. 初期値は男性・女性ともに独身
2. 独身の男性𝑚がいる限り、以下の操作を繰り返す
3. 現在のペアの集合を安定マッチングとする
(おわり)
男性𝑚はまだ告白していない女性の中で最も好きな女性𝑤に告白
1. 女性𝑤が独身なら男性𝑚をキープ
2. 女性𝑤が独身でない(キープ相手𝑚#がいる)場合
•𝑤にとって𝑚が現在のキープ𝑚#よりも好みならば𝑚#を捨てて𝑚を
キープとする
•𝑤にとって𝑚よりも現在のキープ𝑚#が好みならば𝑚からの告白を
断る
実際のアルゴリズムの流れ
1. 初期値は男性・女性ともに独身
2. 独身の男性𝑚がいる限り、以下の操作を繰り返す
3. 現在のペアの集合を安定マッチングとする
(おわり)
男性𝑚はまだ告白していない女性の中で最も好きな女性𝑤に告白
1. 女性𝑤が独身なら男性𝑚をキープ
2. 女性𝑤が独身でない(キープ相手𝑚#がいる)場合
•𝑤にとって𝑚が現在のキープ𝑚#よりも好みならば𝑚#を捨てて𝑚を
キープとする
•𝑤にとって𝑚よりも現在のキープ𝑚#が好みならば𝑚からの告白を
断る
補足
• 先ほどの説明は男性の希望を優先したもの
• 女性の希望を優先した場合、結果が変わることも
(非対称性)
• 𝑂(𝑛'
)
※ 𝑛 は男性 or	女性の数
• 非対称性の問題については提案手法もいくつかあ
るが今回は省略
現実はそんなに甘くない!
実際の流れ
1 2 3
C A B X
C B A Y
A C B Z
1 2 3
A X Y Z
B Z X Y
C Z Y X
男性 女性
実際の流れ
1 2 3
C A B X
C B A Y
A C B Z
1 2 3
A X Y Z
B Z X Y
C Z Y X
男性 女性
実際の流れ
1 2 3
C A B X
C B A Y
A C B Z
1 2 3
A X Y Z
B Z X Y
C Z Y X
男性 女性
実際の流れ
1 2 3
C A B X
C B A Y
A C B Z
1 2 3
A X Y Z
B Z X Y
C Z Y X
男性 女性
実際の流れ
1 2 3
C A B X
C B A Y
A C B Z
1 2 3
A X Y Z
B Z X Y
C Z Y X
男性 女性
>
実際の流れ
1 2 3
C A B X
C B A Y
A C B Z
1 2 3
A X Y Z
B Z X Y
C Z Y X
男性 女性
☓
☓
振られたー
バイバーイ
実際の流れ
1 2 3
C A B X
C B A Y
A C B Z
1 2 3
A X Y Z
B Z X Y
C Z Y X
男性 女性
☓
☓
実際の流れ
1 2 3
C A B X
C B A Y
A C B Z
1 2 3
A X Y Z
B Z X Y
C Z Y X
男性 女性
☓
☓
実際の流れ
1 2 3
C A B X
C B A Y
A C B Z
1 2 3
A X Y Z
B Z X Y
C Z Y X
男性 女性
☓
☓ >
実際の流れ
1 2 3
C A B X
C B A Y
A C B Z
1 2 3
A X Y Z
B Z X Y
C Z Y X
男性 女性
☓
☓
☓
実際の流れ
1 2 3
C A B X
C B A Y
A C B Z
1 2 3
A X Y Z
B Z X Y
C Z Y X
男性 女性
☓
☓
☓ >
実際の流れ
1 2 3
C A B X
C B A Y
A C B Z
1 2 3
A X Y Z
B Z X Y
C Z Y X
男性 女性
☓
☓
☓
☓
☓
実際の流れ
1 2 3
C A B X
C B A Y
A C B Z
1 2 3
A X Y Z
B Z X Y
C Z Y X
男性 女性
☓
☓
☓
☓
☓
実際の流れ
1 2 3
C A B X
C B A Y
A C B Z
1 2 3
A X Y Z
B Z X Y
C Z Y X
男性 女性
☓
☓
☓
☓
☓
シミュレーションしよう
• 以下の擬似データを用いてマッチング
• 男性陣
僕の周りで彼女欲しがってそうな人々を想定した
データ
• 女性陣
以前知り合った彼氏欲しがってる人々を想定した
データ
こんなんパッケージとか
ないやろ
フルスクラッチやなあ
と思ったらあったよRに
matchingR
Install.packages(“matchingR”)
Rはいいぞ
実際に行う操作
• 男女のプロフィールのデータセットとそれぞれ互い
のプロフィールに対し求める条件を作り、1項目に
つき、条件を満たしてたらスコアに+1点
• 満たす数が多ければ多いほどスコアは上がる
• 現実はどの方がいいか迷う状態もあるので同一の
スコアがおるのもありとする
プロフィールのデータ内容
• 男性は
• 身長(cm)
• 趣味の平凡度(0	– 5)
• 交際経験人数
• 稼ぐ意欲があるか(あり =	1,	なし =	0)
• 眼鏡をかけているか(あり =	1,	なし =	0)
• 女性は
• 身長(cm)
• 趣味の平凡度(0	– 5)
• 交際経験人数
• おしゃべりが得意か(得意 =	1,	そうでもない =	0)
• 眼鏡をかけているか(あり =	1,	なし =	0)
ß0-(平凡度)-5à有無言わさず0
データセット(男性編)
• 男性1(Gさん)
• 173cm,		趣味:	1,	交際経験人数:1,	稼ぎ:	1,	眼鏡:	1
• 男性2(Cさん)
• 171cm,	趣味:	2,	交際経験人数:	1,	稼ぎ:	1,	眼鏡:	1
• 男性3(Tさん)
• 175cm,	趣味:	0,	交際経験人数:	0,	稼ぎ:	1,	眼鏡:	1
• 男性4(Hさん)
• 180cm,	趣味:	1,	交際経験人数:	1,	稼ぎ:	0,	眼鏡:	0
• 男性5(Sさん)
• 164cm,	趣味:	0,	交際経験人数:	0,	稼ぎ:	0,	眼鏡:	0
データセット(女性編)
• 女性1(A子さん)
• 160cm,	趣味: 5,	交際経験人数:	5,	話:	1,	眼鏡:	0
• 女性2(B美さん)
• 152cm,	趣味:	4,	交際経験人数:	2,	話:	1,	眼鏡:	0
• 女性3(C里さん)
• 155cm,	趣味:	0,	交際経験人数:	0,	話:	0,	眼鏡:	1
• 女性4(D央さん)
• 146cm,	趣味:	1,	交際経験人数:	1,	話:	0,	眼鏡:	1
• 女性5(E華さん)
• 158cm,	趣味:	4,	交際経験人数:	3,	話:	0,	眼鏡:	0
相手に求める条件(男性編)
• ↑ =	以上,	↓ =	以下
• 男性1(Gさん)
• 157cm↑, 趣味:	2↑,	交際経験人数: 0,	話:	1,	眼鏡:	0
• 男性2(Cさん)
• 158cm↓, 趣味:	0↑,	交際経験人数: 3↓,	話:	0,	眼鏡:	0↑
• 男性3(Tさん)
• 160cm↑,	趣味:	1↑,	交際経験人数:	0,	話:	1,	眼鏡:	0↑
• 男性4(Hさん)
• 150cm↑,	趣味:	1↓,	交際経験人数:	1↓,	話:	0,	眼鏡:	0↑
• 男性5(Sさん)
• 164cm,	趣味:	0,	交際経験人数:	0,	話:	0,	眼鏡:	1
相手に求める条件(女性編)
• ↑ =	以上,	↓ =	以下
• 女性1(A子さん)
• 170cm↑,	趣味: 2↑,	交際経験人数:	1↑,	稼ぎ:	1,	眼鏡:	0↑
• 女性2(B美さん)
• 170cm↑,	趣味:	1,	交際経験人数:	1↑,	稼ぎ:	1,	眼鏡:	1
• 女性3(C里さん)
• 160cm↑,	趣味:	2↑,	交際経験人数:	0↑,	稼ぎ:	1,	眼鏡:	0↑
• 女性4(D央さん)
• 165cm↑,	趣味:	1↑,	交際経験人数:	3↓,	稼ぎ:	0,	眼鏡:	0↑
• 女性5(E華さん)
• 160cm↓,	趣味:	1↑,	交際経験人数:	2↓,	稼ぎ:	1,	眼鏡:	0↑
結果
結果
matching$proposals
[,1]
[1,]				2
[2,]				4
[3,]				1
[4,]				5
[5,]				3
(Gさん,	B美さん)
(Cさん,	D央さん)
(Tさん,	A子さん)
(Hさん,	E華さん)
(Sさん,	C里さん)
今後の課題
• 合コンに参加する
• 実行する
• 1人勝ちするタイプのやつは消し去る
こんなんもどうです?
\おしまい/

Más contenido relacionado

Más de cancolle

データ菜園ティストもできるドッカーンとdocker入門 #TokyoR #87
データ菜園ティストもできるドッカーンとdocker入門 #TokyoR #87データ菜園ティストもできるドッカーンとdocker入門 #TokyoR #87
データ菜園ティストもできるドッカーンとdocker入門 #TokyoR #87cancolle
 
東京駅から”114,514”な 場所を探す
東京駅から”114,514”な 場所を探す東京駅から”114,514”な 場所を探す
東京駅から”114,514”な 場所を探すcancolle
 
イルカになりたい(TokyoR #63 LT)
イルカになりたい(TokyoR #63 LT)イルカになりたい(TokyoR #63 LT)
イルカになりたい(TokyoR #63 LT)cancolle
 
てかLINEやってる? (Japan.R 2016 LT) #JapanR
てかLINEやってる? (Japan.R 2016 LT) #JapanRてかLINEやってる? (Japan.R 2016 LT) #JapanR
てかLINEやってる? (Japan.R 2016 LT) #JapanRcancolle
 
みんな何使ってるの(Japan.R 2015 LT)
みんな何使ってるの(Japan.R 2015 LT)みんな何使ってるの(Japan.R 2015 LT)
みんな何使ってるの(Japan.R 2015 LT)cancolle
 
非リアの僕がリア充に勝つ話 (TokyoR #50 LT)
非リアの僕がリア充に勝つ話 (TokyoR #50 LT)非リアの僕がリア充に勝つ話 (TokyoR #50 LT)
非リアの僕がリア充に勝つ話 (TokyoR #50 LT)cancolle
 
JKがJKのツイートを分析してほんとにJKかどうかを判断する(プロ生#33 LT)
JKがJKのツイートを分析してほんとにJKかどうかを判断する(プロ生#33 LT)JKがJKのツイートを分析してほんとにJKかどうかを判断する(プロ生#33 LT)
JKがJKのツイートを分析してほんとにJKかどうかを判断する(プロ生#33 LT)cancolle
 
分析で好みの娘をぶっこぬく (TokyoR #45 LT)
分析で好みの娘をぶっこぬく (TokyoR #45 LT)分析で好みの娘をぶっこぬく (TokyoR #45 LT)
分析で好みの娘をぶっこぬく (TokyoR #45 LT)cancolle
 
コミュ障の俺が、自分と近い特徴のヤツを探す(プロ生#32 LT)
コミュ障の俺が、自分と近い特徴のヤツを探す(プロ生#32 LT)コミュ障の俺が、自分と近い特徴のヤツを探す(プロ生#32 LT)
コミュ障の俺が、自分と近い特徴のヤツを探す(プロ生#32 LT)cancolle
 

Más de cancolle (9)

データ菜園ティストもできるドッカーンとdocker入門 #TokyoR #87
データ菜園ティストもできるドッカーンとdocker入門 #TokyoR #87データ菜園ティストもできるドッカーンとdocker入門 #TokyoR #87
データ菜園ティストもできるドッカーンとdocker入門 #TokyoR #87
 
東京駅から”114,514”な 場所を探す
東京駅から”114,514”な 場所を探す東京駅から”114,514”な 場所を探す
東京駅から”114,514”な 場所を探す
 
イルカになりたい(TokyoR #63 LT)
イルカになりたい(TokyoR #63 LT)イルカになりたい(TokyoR #63 LT)
イルカになりたい(TokyoR #63 LT)
 
てかLINEやってる? (Japan.R 2016 LT) #JapanR
てかLINEやってる? (Japan.R 2016 LT) #JapanRてかLINEやってる? (Japan.R 2016 LT) #JapanR
てかLINEやってる? (Japan.R 2016 LT) #JapanR
 
みんな何使ってるの(Japan.R 2015 LT)
みんな何使ってるの(Japan.R 2015 LT)みんな何使ってるの(Japan.R 2015 LT)
みんな何使ってるの(Japan.R 2015 LT)
 
非リアの僕がリア充に勝つ話 (TokyoR #50 LT)
非リアの僕がリア充に勝つ話 (TokyoR #50 LT)非リアの僕がリア充に勝つ話 (TokyoR #50 LT)
非リアの僕がリア充に勝つ話 (TokyoR #50 LT)
 
JKがJKのツイートを分析してほんとにJKかどうかを判断する(プロ生#33 LT)
JKがJKのツイートを分析してほんとにJKかどうかを判断する(プロ生#33 LT)JKがJKのツイートを分析してほんとにJKかどうかを判断する(プロ生#33 LT)
JKがJKのツイートを分析してほんとにJKかどうかを判断する(プロ生#33 LT)
 
分析で好みの娘をぶっこぬく (TokyoR #45 LT)
分析で好みの娘をぶっこぬく (TokyoR #45 LT)分析で好みの娘をぶっこぬく (TokyoR #45 LT)
分析で好みの娘をぶっこぬく (TokyoR #45 LT)
 
コミュ障の俺が、自分と近い特徴のヤツを探す(プロ生#32 LT)
コミュ障の俺が、自分と近い特徴のヤツを探す(プロ生#32 LT)コミュ障の俺が、自分と近い特徴のヤツを探す(プロ生#32 LT)
コミュ障の俺が、自分と近い特徴のヤツを探す(プロ生#32 LT)
 

機械学習するな機会学習しろ - データサイエンスLT祭り 2夜目