推奨システム:コンテンツベースの推奨


http://blog.csdn.net/pipisorry/article/details/49205589
(パーソナライズ)推奨システム構築の3つの方法:コンテンツベースの推奨content-based、協同フィルタcollaborative filtering、隠語義モデル(LFM、latent factor model)推奨.このブログは主にコンテンツベースの推奨content-basedについて話しています.
コンテンツベースの推奨1 Content-based System
{MMDsにおけるuser-item profile空間に基づくcosin類似度の考え方}
主な思想.
推荐系统:基于内容的推荐_第1张图片 推荐系统:基于内容的推荐_第2张图片
上図はexplictとimpliict情報を併用してItem profilesを構築しており、推奨時には赤色の六角形が推奨される可能性が高い.
ItemモデルItem Profile
itemは、映画のようなfeaturesベクトルが対応するbooleanまたはreal−valuedの数値ベクトルであってもよいfeaturesベクトルとして表される.
ここで異なるfeaturesの数値は一般的にscaleを必要とします.そうしないと、数値が大きいfeaturesはitemモデル全体の表現をdominateします.スケール係数を比較的公平に選択する方法の1つは、各スケール係数を対応する成分の平均値に反比例させることである.もう1つのベクトル成分を縮小変換する方法は、まずベクトルを正規化することであり、すなわち、各成分の平均値を計算し、ベクトルの各成分に対して対応する平均値を減算することである.
推荐系统:基于内容的推荐_第3张图片
記事推奨のitem記述例:Text Features
Profile = set of “important” words in item (document)
TF-IFを使用してテキストフィーチャー抽出を行うため、テキストのprofileはreal vectorであり、thresholdを設定してフィルタします.[Scikit-learn:Feature extractionテキストフィーチャー抽出:TF-IDF(Term frequency*Inverse Doc Frequency)語重み]
UserモデルUser Profileは、ユーザが採点した(または閲覧のようなインタラクティブな)itemのprofilesによってユーザのprofilesを構築する.
ユーザー・モデルを構築する方法:
推荐系统:基于内容的推荐_第4张图片
Simple方式は、ユーザprofileの図示を確立する(ただし、ここではweightは追加されていない):各ベクトルはitem(例えば映画)のベクトル表現である(ベクトル成分はactorであってもよい.そうすれば、分類属性は独熱符号化で表されるか、直接各actorはfeatureで表される)
推荐系统:基于内容的推荐_第5张图片
ユーザprofileの作成例は、ユーザのprofileベクトルとitemベクトルが同じであることに注意する.すなわち、item vecの要素はprofile(e.g actor)であり、user vecの要素もprofile(e.g actor)である.ユーザのprofileは、採点されたitem profileに基づいて作成されます(採点されていないものは使用しません).
ユーティリティマトリックス(utility matrix)はuser-itemマトリックスであり、例えば採点や視聴の有無のbooleanマトリックス[複数のユーザがマトリックスであり、1人のユーザの場合はもちろんベクトルであり、以下の例はいずれも1人のユーザで説明する]であり、ユーザとitemとの間には、効率マトリクスによって接続されています:(もちろん、使いやすいように、効率マトリクスを表示せずに、ユーザが採点した映画データを直接計算することもできます)

例1:Boolen Utility Matrix(simple方式、採点なし、ただし視聴あり)

推荐系统:基于内容的推荐_第6张图片

これは実際には上のsimple方式で、見た映画のitemベクトルを合わせて/Nします.映画のprofileは[(1,0),(1,0),....]です.このようにユーザのprofileは(0.4,0.6)である.
例2:Star Ratings(variant方式、採点あり)


If the utility matrix is not boolean, e.g., ratings 1–5, then we can weight the vectors representing the profiles of items by the utility value.
推荐系统:基于内容的推荐_第7张图片
オリジナル

user rating normalized

実際には2つのステップに分かれています.
まず効用マトリクス効用値を正規化し,項としてベクトルの重みを表す
   =》 

さらに、アイテムはベクトル加重平均を表します.
   =》  
  =》

各userの寛大さが異なるため、採点の手値が異なり、規格化が必要である.規格化によりスコア1と2は実際にはnegative ratingsであることが分かった.
規格化はitem vecの各属性を規格化することに相当し,この規格化はこの属性のすべてのitemによって行われる.
なお、profileの平均値計算は、ユーザがすべての映画に対して合計スコアを評価する平均値であり、profile Aの計算は、ユーザがスコアを評価するすべての映画の総数ではなく、(0+2)/profile Aが映画に現れる回数である.
この方法の有効な直感的な知識は、Itemのprofileスコアごとに全体的な平均値を減算し、異なるユーザーの寛大さの影響を除去することであり、profileが映画に現れる回数を除いて、個人の平均値を再計算することに相当し、あるprofileに対する好みのプログラムをよりよくフィットさせることである.
Making Predictionsは、高次元ベクトルの類似度計算に適しており、cosin値が大きいほど類似している(このとき角度が小さい)ため、余弦類似度を使用してuser profileとitem profileの類似度を測定することを推奨します.[
距離と類似度の測定方法]
推荐系统:基于内容的推荐_第8张图片
このように,ユーザxを計算するcatlogにおけるすべてのitem iについて類似度計算を行い,ユーザ類似度の高いitemsに推奨する.
皮のblog
評価:コンテンツ推奨に基づくメリットとデメリットpros and cons
メリット
推荐系统:基于内容的推荐_第9张图片
1新しくitemが来ると推薦することができ、その推薦は他のユーザーの採点ではなく、それ自体の特徴に基づいている.協同フィルタリングのfirst-rater問題はありません.
2はあなたのことを意味します.
3相乗フィルタリングは、独特の味のユーザに対して類似のユーザが見つからない可能性があり、コンテンツベースの推奨は依然として推奨される.when we get to collaborative filtering,We need to find similar users.But if the user were very unique or idiosyncratic taste there may not be any other similar users.But the content-based approach, user can very unique tastes as long as we can build item profiles for the items that the user likes.
欠点
推荐系统:基于内容的推荐_第10张图片
ユーザーが何らかのタイプのitemを採点したことがない場合、そのitemは現在かなり人気があるとしても、ユーザーに推薦されません.
コールドスタートの問題:新しいユーザーにはprofileがありません.
[マスデータマイニングMining Massive Datasets(MMDs)week 4-Jure Leskovec courses推奨システムRecommendation System]
皮のblog
コンテンツベースの推奨2 Content Based Recommendations
{Andrew NGマシン学習courseにおけるuser-item profile線形計画に基づく考え方}
線形計画に基づく主な思想
各ユーザのスコア予測を独立した線形回帰問題separate linear regression problemと見なし,すなわち各ユーザjに対してパラメータベクトルを学習しなければならない.θ^j(nがfeaturesの数である次元R=n+1)では、内積によってθj'Xiは、item iに対するuser jのスコアを予測する.
推荐系统:基于内容的推荐_第11张图片
content based recommendations:私たちはすでに異なるitemsのfeaturesを持っていると仮定します.that capture what is the content of these movies,how romantic/action is movie?これでitemsのコンテンツfeaturesを予測しています.
各itemのfeatureベクトルに追加の遮断interceptor feature x 0=1を追加し,n=2はfeatureの数(x 0を除く)である.
線形計画によりAliceのパラメータを求めたとするθ(Aliceに対して評価された各映画はexampleであり、example 0ではx=[0.90]、y=5であり、勾配降下でthetaを求める)、3本目の映画に対するAliceのスコアは4.95(図)と予測される.
最適化アルゴリズムさいてきか:パラメータベクトルぱらめーたべーすθjの推定
推荐系统:基于内容的推荐_第12张图片
推荐系统:基于内容的推荐_第13张图片 推荐系统:基于内容的推荐_第14张图片
Note:定数項目1/mjが削除されました.線形計画と同じようにregularizeではありませんθ0.
Suppose there is only one user and he has rated every movie in the training set. This implies that nu=1 and r(i,j)=1 for every i,j. In this case, the cost function J(θ) is equivalent to the one used for regularized linear regression.
[機械学習Machine Learning-Andrew NG courses]
皮のblog
Reviews復習
規格化の問題
推荐系统:基于内容的推荐_第15张图片
正規化された行列は次のように計算されます.
[[-1.333 -1.     0.     0.333  2.   ] [-0.333  0.    -1.     1.333  0.   ] [ 1.667  1.     1.    -1.667 -2.   ]]
Content-basedのcosin距離計算問題
推荐系统:基于内容的推荐_第16张图片
Note:距離が小さいほど似ています.
計算された距離行列は、次のようになります.
scale_alpha = 0          scale_alpha = 0.5           scale_alpha = 1                scale_alpha = 2    A        B        C            A        B        C                   A        B        C                A        B        C[[ 0.     0.333  1.   ]        [[ 0.     0.278  0.711]     [[ 0.     0.153  0.383]      [[ 0.     0.054  0.135] [ 0.333  0.     0.592]     [ 0.278  0.     0.333]      [ 0.153  0.     0.15 ]        [ 0.054  0.     0.047] [ 1.     0.592  0.   ]]        [ 0.711  0.333  0.   ]]     [ 0.383  0.15   0.   ]]       [ 0.135  0.047  0.   ]]
Code:
import numpy as np
from scipy import spatial

from Utility.PrintOptions import printoptions


def Nomalize(A):
    '''
    user-item   :         ,    
    '''
    row_mean = np.mean(A, 1).reshape([len(A), 1])  #       
    A -= row_mean

    col_mean = np.mean(A, 0)
    A -= col_mean
    with printoptions(precision=3):
        print(A)
    return A


def CosineDist(A, scale_alpha):
    '''
           cosin   
    '''
    A[:, -1] *= scale_alpha
    cos_dist = spatial.distance.squareform(spatial.distance.pdist(A, metric='cosine'))
    with printoptions(precision=3):
        print('scale_alpha = %s' % scale_alpha)
        print('\tA\t\tB\t\tC')
        print(cos_dist)
        print()


if __name__ == '__main__':
    task = 2
    if task == 1:
        A = np.array([[1, 2, 3, 4, 5], [2, 3, 2, 5, 3], [5, 5, 5, 3, 2]], dtype=float)
        Nomalize(A)
    else:
        for scale_alpha in [0, 0.5, 1, 2]:
            A = np.array([[1, 0, 1, 0, 1, 2], [1, 1, 0, 0, 1, 6], [0, 1, 0, 1, 0, 2]], dtype=float)
            CosineDist(A, scale_alpha=scale_alpha)

[マスデータマイニングMining Massive Datasets(MMDs)week 4-Jure Leskovec courses推奨システムRecommendation System]
from:http://blog.csdn.net/pipisorry/article/details/49205589
ref: