協調フィルタリングを学ぶ隣人Python--マシン[最もユーモラスな、最も理解しやすい機械学習]


      もっとに関する機械学習は、~~注意ヨーヨーを追加してください。:ブロガーのための接触ガボール主な民間の手紙またはお問い合わせください
      QQ:3327908431
      マイクロ手紙:ZDSL1542334210を

        こちらの商品を参照してください。機械学習、次の世紀の同義語、技術者の作成者の将来、創始人工知能のを:。なぜそれが高齢の代表ですか?Huawei社任正非ボスがかつて言った:ビッグデータの人工知能の時代は機械学習である「ビッグデータの時代は、重要である」、そしてそれは、統計に基づいています!ねえ、私は統計をよ、あなたを教えてくれません、私たちは、私は統計的にプロの出だと言うしないでください。
        だから、協調フィルタリングとは何でしょうか?「同様のグループの人々のように魅了しています。」:一つの文章にまとめ 朱の兄の記事を見て選ぶそう!すべての後に、朱の兄は、私が5歳の3000個の言葉、暗唱詩を学び、10村の有名な神童だった知っています!しかし、時間は(中SOB ...)ナなっているが、残念ながら、ああ、私は継続する方法、(泣いて...)18歳です...

1.協調フィルタリングの隣人とは何ですか

        これは、商品やその後の類似性に基づいて勧告を行うとの間の類似性を見つけることです。これは、アイテムベースの協調フィルタリングと協調フィルタリングベースのユーザーに分割されています。ぶっきらぼうに、あなたのように私を与えることができない場合!与えるの?お金好きではない良いことであり、これは(お金を稼ぐことを目的としている----ので、これら二つの単語を行い、より多くの人々がより多くの異なるアイテムを購入するために取得する方法です今少しの助けの貧しい山岳地の子どもたち!その上にマイクロチャネルの連絡先の詳細、もちろん、また、サポートQQ)。

1.1記事に基づく協調フィルタリング

        最も簡単な説明は、あなたがそのような「ウルフ2」として映画を見ることで、その後、別の、システム、「ウルフ2」は、「狼1」、「紅海のアクション」と同様のフィルムが基づいている家、であなたにお勧めしますあなたは同じことの多くを購入したい人:品物はと略記、フィルタリングのコラボレーション。

1.2ユーザベースの協調フィルタリング

        システムの結果は、明るい弟にお勧め「ダウン歯買い」映画を行うたとえば、カブス、明るい兄弟は、右の良い友達で見る、そして映画の島「ジャマイカダウン」を見ているようにそれを負担し、これはユーザーのに基づいています略記協調フィルタリング、:人のキャラクターに、より類似したものをお勧めしたいが(視聴者は、彼らが望むあなたのキャラクターを参照してください)。

図2に示すように、同様の溶液

        それは、距離を用いて計算し、オブジェクト間または過去のデータに基づいて人々の間の距離、あなたがクラスに行くことができる最も近い、同様の命令をされています。それは、ユーザに、ユーザから2次元テーブルとの間にオンになっている場合、ここでユーザーに基づいて2次元テーブルに最初のデータは、それが2次元テーブルとの間の物品に対応する物品に変換されます。次のように6×6の異なる書籍が得点した場合:

ここに画像を挿入説明
        あなたは、私たちがしなければならないので、フルに欠員を埋めるの価値を把握するために、次に推奨フィル値に従って降順にソートすることで、表から各書籍の各ユーザーのスコアを見ることができます。そして、これらのヌルはどのようにそれを埋めるために?私たちは、はい、距離を考えるだろうが、我々は、距離の直接計算であるユークリッド距離、と思います。実際に、私たちは私たちの関係は、スペースでこれらのユーザーより多くの方向は、むしろ彼らの通常の距離よりも、同じ方向に2人のユーザーが類似している示していることであるように、各ユーザーは、複数の次元のデータを持っていることを知ることができます。私たちは、コサイン相関係数を使用して:
ここに画像を挿入説明
        ここでは、私が手でコードをノックしていないので、比較的ライブラリである強力なのPythonを持っています。以下の計算によって得られた2次元テーブル後。

図示のユーザの類似関係に基づいて2.1協調フィルタリング

        彼らは、2次元テーブル間の対応関係に似ています。
ここに画像を挿入説明
        このように、各ユーザが最も類似して正確にどのように多くのユーザーを見つけることができます。関連商品を購入することができ、ユーザは、同様のユーザーと他の人に彼をお勧めします。

2.2協調フィルタリングベースのアイテム間の類似関係を示す図

        我々はユーザーの視点ではなく、独自の類似性よりも、彼らの類似性を判定したいので、テーブルも、書評のユーザーから来て、私たちの目標とビジョンは、ユーザーの身体の上に常にあります。
ここに画像を挿入説明
        このようにして、各項目といくつかのものをユーザーの視点で最も類似したアイテムを見つけることができます。私たちは彼にお勧め類似したアイテムを置くことができます。

4、データは、ユーザーの隣に基づく協調フィルタリングを行います

データダウンロードネットワークディスクのBaidu ----抽出接続コード:vzqi

#导包
import pandas as pd
import numpy as np
dat='example.txt' # 读入数据  该数据就是 第一张截图里面的表格数据
df = pd.read_csv(dat,header=None)
df.columns=['用户id','物品id','喜好程度'] # 修改列名
#  构建第二张截图的矩阵数据
df_pivot = df.pivot(index="用户id",columns="物品id",values="喜好程度")
freq = df_pivot.fillna(0)  #将缺失值填为0
#在sklearn中有自带的余弦相似度计算函数
from sklearn.metrics.pairwise import cosine_similarity
user_similar = cosine_similarity(freq_matrix)
##画热力图来看一下,比较好看
import matplotlib.pyplot as plt
import seaborn as sns
sns.heatmap(user_similar,annot=True,cbar=False)
plt.show();   #热力图

ヒートマップ
        色軽く、より悪いそれは次のように表しています。

あなたは私たちが今、最初の3人のユーザーを与えたいと言うなら、スコアの最初の5つの商品の計算をお勧めします

user_id_action = freq_matrix[2,:] #取出第三个用户的评分向量
item_id_action = freq_matrix[:,4] #取出用户对第五个物品的评分向量  
#假如说我们现在想要找出和该用户最相似的三个用户 k=3
#那么应该从这个user_similar 矩阵中提取出三个最大的值,所对应的用户
k = 3
score = 0  #用于计算评分的分子
weight = 0  #用于计算评分的分母   最终得分为 score/weight,因为给用户相似度一个权重
user_id = 2  #第三个用户
item_id = 4  #第五个用户
similar_index =np.argsort(user_similar[user_id])[::-1][1:k+1]  #索引出和第三个用户相似的前三个用户
similar_index    # 结果为 1,0,5 说明1,0,5在第五个物品选择上和第三位用户最相似

ユーザの平均値を算出する評価
        スコアギャップの値が大きすぎるため、及び0-1の値の重量、重量のために良いので、スコアの標準化、標準化されたデータの使用:

#构建一个基于用户和物品的推荐
def Recommendation_mean(user_id,item_id,similar,k=10):
    """减去平均数的计算方法:
    user_id:输入用户ID
    item_id:物品ID
    similar:计算好余弦距离后的矩阵
    k:以计算几个最相近的用户,默认值为10"""
    score = 0
    weight = 0
    user_id_action = freq_matrix[user_id,:]      #用户user_id 对所有商品的行为评分  
    item_id_action = freq_matrix[:,item_id]      #物品item_id 得到的所有用户评分  

    user_id_similar = similar[user_id,:]      #用户user_id 对所有用户的相似度    
    similar_index = np.argsort(user_id_similar)[-(k+1):-1]  #最相似的k个用户的index(除了自己)
    user_id_i_mean = np.sum(user_id_action)/user_id_action[user_id_action!=0].size# 算出平均值
    for j in similar_index :
        if item_id_action[j]!=0: #找到物品评分不为零的值
            user_id_j_action = freq_matrix[j,:]
            user_id_j_mean = np.sum(user_id_j_action)/user_id_j_action[user_id_j_action!=0].size
            score += user_id_similar[j]*(item_id_action[j]-user_id_j_mean)   #计算该物品的评分均值
            weight += abs(user_id_similar[j]) # 得到权重

    if weight==0:  
        return 0
    else:
        return user_id_j_mean + score/float(weight) #计算最终得分

予測関数の構造は、各アイテムの各ユーザに対応するスコアが完了します

#构建预测函数
def predict_mean(user_similar):
    """预测函数的功能: 传入相似度矩阵, 通过对每个用户和每个物品进行计算, 计算出一个推荐矩阵"""
    user_count = freq_matrix.shape[0]#用户数
    item_count = freq_matrix.shape[1]#商品数
    predic_matrix = np.zeros((user_count,item_count))
    print(user_count)
    for user_id in range(user_count):
        print(user_id)
        for item_id in range(item_count):
            if freq_matrix[user_id,item_id] == 0:
                #print (user_id,item_id)
                predic_matrix[user_id,item_id] = Recommendation_mean(user_id,item_id,user_similar) #调用函数,求出每一个空值对应的分数,如果数据太大时间会很长。
    return predic_matrix  #返回一个填补完空值的得分表

スコア行列を取得します

user_prediction_matrix = predict_mean(user_similar) #得到每一个用户对应每一个物品的分数
user_prediction_matrix

ここに画像を挿入説明
最初のいくつかの推奨項目を削除します

def get_topk(group,n):  
    # 返回排序后的前n个值
    return group.sort_values("推荐指数",ascending=False)[:n]
   
def get_recommendation(user_prediction_matrix,n=5):
    # 将用户预测数据, 构建成一个DataFrame
    recommendation_df = pd.DataFrame(user_prediction_matrix,columns=freq.columns,index=freq.index)
    # 将数据进行转换
    recommendation_df = recommendation_df.stack().reset_index() # reset_index重置索引stack将其行索引变成列索引
    # 对列名进行修改
    recommendation_df.rename(columns={0:"推荐指数"},inplace=True)
    # 根据用户ID列进行分组
    grouped = recommendation_df.groupby("用户id")
    # 得到分组后的前几个数据
    topk = grouped.apply(get_topk,n=n)  #的返回值就是func()的返回值
    # 删除掉用户ID列
    topk = topk.drop(["用户id"],axis=1)
    # 删除掉多余的索引
    topk.index = topk.index.droplevel(1)
    # 索引重排
    topk.reset_index(inplace=True)
    return topk

通話機能

n=5   #取出前5个   要几个就修改这里就可以了
get_recommendatios=get_recommendation(user_prediction_matrix,n)
get_recommendatios #得到每个用户的前5个推荐的书本编号

        注:あなたが近い協調フィルタリングに基づいた記事を行う場合は、単にdf_pivot転置あなたは、コードのように、ここで停止できますか。

5、紙の卵の終わり - 簡単な瞬間

        まあ我々はすべて知っているが、私の弟は、ナショナルデーの休日前によくない口論、外に、私は彼が、私はちょうど2ムービーを再生するために、それはそれの結果を見て彼の家には何も思っていなかった良い友人梁王明は、彼の父親が出てきました明るい兄と私幸せではなかった、と彼は言った:.プレー見て「のほとんどが似年齢のほぼ25年間は、まだ何も、あなたは、一日中プレイし、他の人のカイは、会社を開始するためにあなたに言っ見ることを知っています」 、と言い返し、彼は言った、私は恐れ与える、「大きなとしてあなたをしているものと、それ馬、人を見て...」彼を見つめ、彼の父の結果が突然沈黙と言った:「理由はなぜ馬は、強力な、彼は良い息子がいるので...いくつかの良い友達...ポジティブなエネルギーがあります。」だから、息子のように、彼はYeliangうるさいがハングアップすることができ、本当に父は、このような場合です。

       機械学習の知識についてもっと学ぶためにリラックスした瞬間のよ〜利息 - ヨーヨー//ここで各記事を終了するには今日は最後の卵を持っています!見ていただきありがとうございます、私はJetuserデータでした

リンク:[https://blog.csdn.net/L1542334210]
CSND:L1542334210
ここに画像を挿入説明
私はあなたのすべての成功を祈って!家族で楽しみます!

公開された29元の記事 ウォン称賛53 ビュー30000 +

おすすめ

転載: blog.csdn.net/L1542334210/article/details/102468125