Skip to content

ebook 1st edition eratta

Akihiro Takizawa edited this page Feb 16, 2018 · 1 revision

ebook版第1刷(およびPOD版)の正誤表

本書の誤りを見つけた場合には、書籍に掲載の連絡先(https://www.oreilly.co.jp/feedback/ もご参照ください)よりご連絡ください。

目次 ⅶ

7.4.2 いよいよFactorizatoin Machineで学習する

7.4.2 いよいよFactorization Machinesで学習する

6.4.3 ランダム化比較試験 p107 第2段落

社会実験や臨床試験ではRTCはコストの高い手法とされます

社会実験や臨床試験ではRCTはコストの高い手法とされます

7.2.5 アイテム間型協調フィルタリング p121

ユーザー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章 p.123

図7-1 Factorizatoin Machineのイメージ

図7-1 Factorization Machinesのイメージ

7章 p.132

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