-
Notifications
You must be signed in to change notification settings - Fork 75
ebook 1st edition eratta
Akihiro Takizawa edited this page Feb 16, 2018
·
1 revision
本書の誤りを見つけた場合には、書籍に掲載の連絡先(https://www.oreilly.co.jp/feedback/ もご参照ください)よりご連絡ください。
誤
7.4.2 いよいよFactorizatoin Machineで学習する
正
7.4.2 いよいよFactorization Machinesで学習する
誤
社会実験や臨床試験ではRTCはコストの高い手法とされます
正
社会実験や臨床試験ではRCTはコストの高い手法とされます
誤
ユーザーUの評価ベクトルをu、ユーザーVの評価ベクトルをv、映画Mの評価ベクトルをm(評価値行列を縦に
一列切り取ったもの)、映画Nの評価ベクトルをnとすると、アイテム間型協調フィルタリングのピアソンの相関
係数は、以下のように書けます。
def item_pearson_coefficient(u, v, m, n):
u_diff = u - np.mean(m)
v_diff = v - np.mean(n)
numerator = np.dot(u_diff, v_diff)
denominator = np.sqrt(sum(u_diff **2)) * np.sqrt(sum(v_diff **2))
return numerator / denominator
アイテム間型協調フィルタリングでは、分母で映画Mの評価値の平均を引くのですが、その代わりにユーザーの
評価値の平均で引いたものが、調整済みコサイン類似度です。調整済みコサイン類似度は以下のように書けます。
def adjusted_pearson_coefficient(u, v):
u_diff = u - np.mean(u)
v_diff = v - np.mean(v)
numerator = np.dot(u_diff, v_diff)
denominator = np.sqrt(sum(u_diff **2)) * np.sqrt(sum(v_diff **2))
return numerator / denominator
これはちょうどユーザー間型協調フィルタリングのピアソンの相関係数を求めるのと同じことになります。ユーザーの
評価値の平均を割り引くことで、高めの点数に評価をするユーザーと低めに評価をするユーザーの違いを除去する
ことができ、予測性能が向上します。
正
映画Mの評価ベクトルをm(評価値行列を縦に一列切り取ったもの)、映画Nの評価ベクトルをnとすると、
アイテム間型協調フィルタリングのピアソンの相関係数は、pearson_coefficient(u, v)のu, vにそれぞれ
m, nを代入することで求めることができます。以下に、ピアソンの相関係数を再掲します。
def pearson_coefficient(u, v):
u_diff = u - np.mean(u)
v_diff = v - np.mean(v)
numerator = np.dot(u_diff, v_diff)
denominator = np.sqrt(sum(u_diff **2)) * np.sqrt(sum(v_diff **2))
return numerator / denominator
アイテム間型協調フィルタリングでは、分母で映画Mの評価値の平均を引くのですが、その代わりにユーザーの評価値の
平均で引いたものが、調整済みコサイン類似度です。各ユーザーの平均評価値ベクトルをu_meanとすると、調整済み
コサイン類似度は以下のように書けます。
def adjusted_cosine_coefficient(m, n, u_mean):
adjusted_m = m - u_mean
adjusted_n = n - u_mean
numerator = np.dot(adjusted_m, adjusted_n)
denominator = np.sqrt(sum(adjusted_m **2)) * np.sqrt(sum(adjusted_n **2))
return numerator / denominator
例えば、表7-1の例では、の例では映画Aと映画Cの類似度を計算する場合、 m = np.array([5, 4, 0])
と n = np.array([2, 1, 5])となります。また、各ユーザーの平均評価値は
`u_mean = np.array([2.333, 1.667, 3.0])` となります。なお、評価値行列 rating を使って
u_mean を計算する場合は以下のようにNumPyの mean関数を使うことができます。
rating = np.asarray([[5, 0, 2],
[4, 0, 1],
[0, 4, 5]])
u_mean = rating.mean(axis=1)
# array([ 2.33333333, 1.66666667, 3.])
ユーザーの評価値の平均を割り引くことで、高めの点数に評価をするユーザーと低めに評価をするユーザーの違いを
除去することができ、予測性能が向上します。
誤
図7-1 Factorizatoin Machineのイメージ
正
図7-1 Factorization Machinesのイメージ
誤
7.4.2 いよいよFactorizatoin Machineで学習する
正
7.4.2 いよいよFactorization Machinesで学習する
誤
from sklearn.feature_selection import train_test_split
正
from sklearn.model_selection import train_test_split