Re:ゼロから始めるML生活

どちらかといえばエミリア派です

recsys-pythonをやる (第9章 単純ベイズ分類器・第10章 決定木)

この記事は(1人で)基礎から学ぶ推薦システム Advent Calendar 2022の5日目の記事です。

前回に引き続きrecsys-pythonをやっていきます。

www.nogawanogawa.com

今回は9章・10章をやっていきたいと思います。

第9章 単純ベイズ分類器

考え方:ユーザーは好きな特徴を多く含んだアイテムを好むだろう

ユーザーがそのアイテムを好むかを考える際に、「Aさんはaという特徴を好むからアイテムBを好むだろう」といった形でアイテムの特徴をから嗜好を推定することがあります。

例として、ある産地Aのコーヒーaを良く高評価したユーザーがいたとします。 このユーザーは産地Aの別のコーヒーbも好きなことが予想できそうですね? このとき、類似のコーヒーbをおすすめするイメージです。

ベイズの定理

このとき、産地Aのコーヒーbが好きな確率を求めれば良いと考えるとベイズの定理が使用できます。

\displaystyle{
p(x | y) = \frac{p(y | x)p(x)}{p(y)}
}

ベイズの定理では、産地Aのコーヒーbが好きな確率がわからなくても、

  • コーヒーbが好きな確率
  • 産地Aのコーヒーである確率
  • コーヒーbが好きなとき、その産地がAである確率

がわかれば計算できるといったように、計算できる確率に変形することができます。

単純ベイズ仮定

基本的には好きな特徴を多く含んでいるアイテムをおすすめするんですが、通常アイテムの特徴は複数あります。

例に出したコーヒーであっても

  • 産地
  • 煎り方
  • 酸味
  • 甘み

など、特徴は様々考えられそうです。 上記であれば、4つすべての特徴を同時に扱うのは大変なので、「ユーザーの嗜好はすべての特徴について独立である」という仮定を置くことにします。

この単純ベイズ仮定を置くことで、複数の特徴量を考慮する必要があっても、個別に確率を計算して最後に確率をかけ合わせれば良いという形になります。

ラプラススムージング

出現頻度が低い特徴がある場合には、算出する確率がどう頑張っても0になってしまうケースがあります。 こういった問題を回避するために、ラプラススムージングを行うことで回避することができます。

具体的には、確率の算出時に分子分母に対して定数αを加算することで確率が0にならないようにし、出現頻度が少ない場合でどうしても確率が0になってしまうケースを回避しています。

やってみる

recsyslab.github.io

第10章 決定木

「ユーザーがアイテムを好むかどうか」という分類問題を考えると、決定木のような手法で解くことも十分に考えられます。 同じleafにおける評価値がなるべく同じになるように、アイテムの特徴の値によって分岐を作っていく手法ですね。

分類のイメージ(内部的にはこんな感じで特徴の値をもとに好きか嫌いかを分類しています)

やってみる

recsyslab.github.io

参考文献

下記の文献を参考にさせていただきました。

感想

ということで、今回はモデルベースのコンテンツベース推薦でした。 決定木はともかくナイーブベイズは正直あまり得意ではないですし使う予定も今の所ないですが、考え方とかはわかったので良しとします。