日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

如何在Python中構(gòu)建一個簡單的推薦系統(tǒng)

推薦系統(tǒng)是為了幫助人們發(fā)現(xiàn)和選擇他們可能感興趣的物品而設(shè)計(jì)的。Python提供了豐富的庫和工具,可以幫助我們構(gòu)建一個簡單但有效的推薦系統(tǒng)。本文將介紹如何使用Python構(gòu)建一個基于用戶的協(xié)同過濾推薦系統(tǒng),并提供具體的代碼示例。

協(xié)同過濾是一種推薦系統(tǒng)的常見算法,它基于用戶的行為歷史數(shù)據(jù)來推斷用戶之間的相似性,然后利用這些相似性來預(yù)測和推薦物品。我們將使用MovieLens數(shù)據(jù)集,它包含了一組用戶對電影的評分?jǐn)?shù)據(jù)。首先,我們需要安裝所需的庫:

pip install pandas scikit-learn

登錄后復(fù)制

接下來,我們將導(dǎo)入所需的庫并加載MovieLens數(shù)據(jù)集:

import pandas as pd
from sklearn.model_selection import train_test_split

# 加載數(shù)據(jù)集
data = pd.read_csv('ratings.csv')

登錄后復(fù)制

該數(shù)據(jù)集包含userIdmovieIdrating三列,分別表示用戶ID、電影ID和評分。接下來,我們將數(shù)據(jù)集拆分為訓(xùn)練集和測試集:

train_data, test_data = train_test_split(data, test_size=0.2, random_state=42)

登錄后復(fù)制

現(xiàn)在,我們可以構(gòu)建推薦系統(tǒng)了。這里我們將使用用戶間的余弦相似度作為相似度度量指標(biāo)。我們將創(chuàng)建兩個字典來存儲用戶和電影的相似度得分:

# 計(jì)算用戶之間的相似度
def calculate_similarity(train_data):
    similarity = dict()
    for user in train_data['userId'].unique():
        similarity[user] = dict()
        user_ratings = train_data[train_data['userId'] == user]
        for movie in user_ratings['movieId'].unique():
            similarity[user][movie] = 1.0

    return similarity

# 計(jì)算用戶之間的相似度得分
def calculate_similarity_score(train_data, similarity):
    for user1 in similarity.keys():
        for user2 in similarity.keys():
            if user1 != user2:
                user1_ratings = train_data[train_data['userId'] == user1]
                user2_ratings = train_data[train_data['userId'] == user2]
                num_ratings = 0
                sum_of_squares = 0
                for movie in user1_ratings['movieId'].unique():
                    if movie in user2_ratings['movieId'].unique():
                        num_ratings += 1
                        rating1 = user1_ratings[user1_ratings['movieId'] == movie]['rating'].values[0]
                        rating2 = user2_ratings[user2_ratings['movieId'] == movie]['rating'].values[0]
                        sum_of_squares += (rating1 - rating2) ** 2
                similarity[user1][user2] = 1 / (1 + (sum_of_squares / num_ratings) ** 0.5)

    return similarity

# 計(jì)算電影之間的相似度得分
def calculate_movie_similarity_score(train_data, similarity):
    movie_similarity = dict()
    for user in similarity.keys():
        for movie in train_data[train_data['userId'] == user]['movieId'].unique():
            if movie not in movie_similarity.keys():
                movie_similarity[movie] = dict()

            for other_movie in train_data[train_data['userId'] == user]['movieId'].unique():
                if movie != other_movie:
                    movie_similarity[movie][other_movie] = similarity[user][other_user]

    return movie_similarity

# 構(gòu)建推薦系統(tǒng)
def build_recommendation_system(train_data, similarity, movie_similarity):
    recommendations = dict()
    for user in train_data['userId'].unique():
        user_ratings = train_data[train_data['userId'] == user]
        recommendations[user] = dict()
        for movie in train_data['movieId'].unique():
            if movie not in user_ratings['movieId'].unique():
                rating = 0
                num_movies = 0
                for other_user in similarity[user].keys():
                    if movie in train_data[train_data['userId'] == other_user]['movieId'].unique():
                        rating += similarity[user][other_user] * train_data[(train_data['userId'] == other_user) & (train_data['movieId'] == movie)]['rating'].values[0]
                        num_movies += 1
                if num_movies > 0:
                    recommendations[user][movie] = rating / num_movies

    return recommendations

# 計(jì)算評價指標(biāo)
def calculate_metrics(recommendations, test_data):
    num_users = 0
    sum_of_squared_error = 0
    for user in recommendations.keys():
        if user in test_data['userId'].unique():
            num_users += 1
            for movie in recommendations[user].keys():
                if movie in test_data[test_data['userId'] == user]['movieId'].unique():
                    predicted_rating = recommendations[user][movie]
                    actual_rating = test_data[(test_data['userId'] == user) & (test_data['movieId'] == movie)]['rating'].values[0]
                    sum_of_squared_error += (predicted_rating - actual_rating) ** 2
    rmse = (sum_of_squared_error / num_users) ** 0.5

    return rmse

# 計(jì)算用戶之間的相似度
similarity = calculate_similarity(train_data)

# 計(jì)算用戶之間的相似度得分
similarity = calculate_similarity_score(train_data, similarity)

# 計(jì)算電影之間的相似度得分
movie_similarity = calculate_movie_similarity_score(train_data, similarity)

# 構(gòu)建推薦系統(tǒng)
recommendations = build_recommendation_system(train_data, similarity, movie_similarity)

# 計(jì)算評價指標(biāo)
rmse = calculate_metrics(recommendations, test_data)

登錄后復(fù)制

最后,我們可以輸出推薦系統(tǒng)的結(jié)果和評價指標(biāo):

print(recommendations)
print('RMSE:', rmse)

登錄后復(fù)制

通過上述代碼示例,我們在Python中成功構(gòu)建了一個基于用戶的協(xié)同過濾推薦系統(tǒng),并計(jì)算了其評價指標(biāo)。當(dāng)然,這只是一個簡單的示例,實(shí)際的推薦系統(tǒng)需要更復(fù)雜的算法和更大規(guī)模的數(shù)據(jù)集來獲得更準(zhǔn)確的推薦結(jié)果。

總結(jié)一下,Python提供了強(qiáng)大的庫和工具來構(gòu)建推薦系統(tǒng),我們可以使用協(xié)同過濾算法來推斷用戶之間的相似性,并根據(jù)這些相似性來進(jìn)行推薦。希望本文能夠幫助讀者理解如何在Python中構(gòu)建一個簡單但有效的推薦系統(tǒng),并為進(jìn)一步探索推薦系統(tǒng)的領(lǐng)域提供了一些思路。

以上就是如何在Python中構(gòu)建一個簡單的推薦系統(tǒng)的詳細(xì)內(nèi)容,更多請關(guān)注www.92cms.cn其它相關(guān)文章!

分享到:
標(biāo)簽:Python 推薦系統(tǒng) 構(gòu)建
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定