精品一区二区三区四区电影_亚洲人在线视频_久久久91精品_日本欧美黄色

首頁> 快訊 > > 正文

天天最資訊丨幫師妹開發一個系統過濾小程序

2023-04-21 01:43:36來源:平靜的時光
博主簡介:在計算機領域混戰了5年的java開發工程師,正在向全棧奮斗的路上。目前在學習和分享:Java,springboot,spring,vue,系統開發,服務器運維(可做畢業設計)等相關知識。博主主頁: 不會寫文檔的程序員近期目標:寫好專欄的每一篇文章

項目介紹

本期介紹一個基于協同過濾算法的商品推薦系統,主要包括以下功能


(資料圖片僅供參考)

后臺管理系統功能:
后臺登錄
獲取微信小程序登錄的用戶信息
配置上架商品的屬性,分類,價格
獲取用戶在小程序端下的訂單列表
個人用戶配置,賬號修改;
微信小程序功能:
用戶授權實現微信登陸
首頁展示商品輪播圖+商品列表
商品詳情頁,獲取商品詳細sku
一鍵加入購物車,直接購買
維護用戶的收獲地址
訂單列表;
全部訂單,待收貨,確認收貨,退貨

用戶微信授權登錄后,根據每個用戶收藏的商品數據,根據算法,找到有相似收藏愛好的用戶,已推薦相應額商品。為了更方便大家的理解,如下圖:

該系統為每一個用戶都分配了一個用戶賬號,用戶通過賬號的登錄可以在系統中查看商品推薦信息及對個人信息進行修改等功能。

系統截圖

不止這些,基于協同過濾開發了很多的系統

現在對著算法的開發的思路還是比較成熟的,更多系統基于推薦算法功能的更新需求,或者系統開發,可以私信評論區留言哦

協同過濾算法簡介

協同過濾算法是一種基于用戶行為數據的推薦算法,其基本思想是通過分析用戶行為數據,找到不同用戶之間的相似性,從而預測用戶對未知物品的評分或偏好,從而給用戶提供個性化推薦。

協同過濾算法分為兩種:基于用戶的協同過濾和基于物品的協同過濾。

基于用戶的協同過濾

基于用戶的協同過濾算法是通過分析用戶的歷史行為數據,找到與目標用戶行為相似的其他用戶,從而推薦目標用戶可能感興趣的物品。

具體步驟如下:

計算用戶之間的相似度,如皮爾遜相關系數、余弦相似度等。找到與目標用戶相似度最高的K個用戶。綜合K個用戶對某個物品的評分,預測目標用戶對該物品的評分或偏好。推薦目標用戶評分最高的N個物品。

協同過濾算法的優點是可以處理任何類型的物品和用戶行為,同時還可以提供高度個性化的推薦。但是,它也存在一些問題,如數據稀疏性、冷啟動問題、可擴展性等。因此,在實際應用中需要根據具體情況進行優化和改進。

皮爾森(pearson)相關系數公式

皮爾森相關系數是用來衡量變量之間的線性相關性。但是有一個明顯的缺陷就是,它只對線性關系敏感。如果關系是非線性的,哪怕兩個變量之間是一一對應的關系,皮爾森相關系數也可能接近0.

如果有兩個變量:X、Y,最終計算出的相關系數的含義可以有如下理解:

(1)、當相關系數為0時,X和Y兩變量無關系。

(2)、當X的值增大(減?。琘值增大(減?。?,兩個變量為正相關,相關系數在0.00與1.00之間。

(3)、當X的值增大(減小),Y值減?。ㄔ龃螅?,兩個變量為負相關,相關系數在-1.00與0.00之間。

通常情況下通過以下取值范圍判斷變量的相關強度:
相關系數 0.8-1.0 極強相關
0.6-0.8 強相關
0.4-0.6 中等程度相關
0.2-0.4 弱相關
0.0-0.2 極弱相關或無相關

公式一:

公式二:

公式三:

公式四:

Java代碼實現


package com.jun.entity;
/**
* @author 不會寫文檔的程序員
*/
public class Movie implements Comparable<Movie> {
public String movieName;
public int score;
public Movie(String movieName, int score) {
this.movieName = movieName;
this.score = score;
}
@Override
public String toString() {
return "Movie{" +
"movieName="" + movieName + "\"" +
", score=" + score +
"}";
}
@Override
public int compareTo(Movie o) {
return score > o.score ? -1 : 1;
}
}


package com.jun.entity;
import java.util.ArrayList;
import java.util.List;
/**
* @author 不會寫文檔的程序員
*/
public class User {
public String username;
public List<Movie> movieList = new ArrayList<>();
public User() {}
public User(String username) {
this.username = username;
}
public User set(String movieName, int score) {
this.movieList.add(new Movie(movieName, score));
return this;
}
public Movie find(String movieName) {
for (Movie movie : movieList) {
if (movie.movieName.equals(username)) {
return movie;
}
}
return null;
}
@Override
public String toString() {
return "User{" +
"username="" + username + "\"" +
"}";
}
}

Recommend邏輯計算類:

/**
* 計算2個打分序列間的pearson距離
* 選擇公式四進行計算
* @param rating1
* @param rating2
* @return
*/
private double pearson_dis(List<Movie> rating1, List<Movie> rating2) {
int n=rating1.size();
List<Integer> rating1ScoreCollect = rating1.stream().map(A -> A.score).collect(Collectors.toList());
List<Integer> rating2ScoreCollect = rating2.stream().map(A -> A.score).collect(Collectors.toList());
double Ex= rating1ScoreCollect.stream().mapToDouble(x->x).sum();
double Ey= rating2ScoreCollect.stream().mapToDouble(y->y).sum();
double Ex2=rating1ScoreCollect.stream().mapToDouble(x->Math.pow(x,2)).sum();
double Ey2=rating2ScoreCollect.stream().mapToDouble(y->Math.pow(y,2)).sum();
double Exy= IntStream.range(0,n).mapToDouble(i->rating1ScoreCollect.get(i)*rating2ScoreCollect.get(i)).sum();
double numerator=Exy-Ex*Ey/n;
double denominator=Math.sqrt((Ex2-Math.pow(Ex,2)/n)*(Ey2-Math.pow(Ey,2)/n));
if (denominator==0) return 0.0;
return numerator/denominator;
}

public List<Movie> recommend(String username, List<User> users) {
//找到最近鄰
Map<Double, String> distances = computeNearestNeighbor(username, users);
String nearest = distances.values().iterator().next();
System.out.println("最近鄰 -> " + nearest);
//找到最近鄰看過,但是我們沒看過的電影,計算推薦
User neighborRatings = new User();
for (User user:users) {
if (nearest.equals(user.username)) {
neighborRatings = user;
}
}
System.out.println("最近鄰看過的電影 -> " + neighborRatings.movieList);
User userRatings = new User();
for (User user:users) {
if (username.equals(user.username)) {
userRatings = user;
}
}
System.out.println("用戶看過的電影 -> " + userRatings.movieList);
//根據自己和鄰居的電影計算推薦的電影
List<Movie> recommendationMovies = new ArrayList<>();
for (Movie movie : neighborRatings.movieList) {
if (userRatings.find(movie.movieName) == null) {
recommendationMovies.add(movie);
}
}
Collections.sort(recommendationMovies);
return recommendationMovies;
}
}

運行結果:

協同過濾算法的問題分析

目前,協同過濾技術得到了廣泛應用。但是隨著網站商品信息量和用戶人數的不斷攀升,網站的結構也越來越復雜,如果你有需要基于協同算法開發的需求,評論區留言呦,我們一起討論。通過對協同過濾技術以及推薦系統的研究,我們發現協同過濾技術的實現中存在的問題主要有以下幾點。

5.1 稀疏性問題
稀疏性問題是推薦系統面臨的主要問題。比如在一些大型電子商務購買系統,用戶購買過的數量相對網站中商品數量可謂是冰山一角,這就導致了用戶評分矩陣的數據非常稀疏,進行相似性計算耗費會很大,也難以找到相鄰用戶數據集,從而使得推薦系統的推薦質量急劇下降。

5.2 冷啟動問題
因為傳統的協同過濾推薦是基于用戶/物品的相似性計算來得到目標用戶的推薦,在一個新的項目首次出現的時候,因為沒有用戶對它作過評價,因此單純的協同過濾無法對其進行預測評分和推薦。而且,由于新項目出現早期,用戶評價較少,推薦的準確性也比較差。

5.3 可擴展性問題
面對日益增多的數據量,算法的擴展性問題成為制約推薦系統實施的重要因素。識別“最近鄰居”算法的計算量隨著用戶和項的增加而大大增加,對于上百萬的數目,通常的算法會遇到嚴重的擴展性瓶頸問題。

總結

協同過濾作為一種經典的推薦算法種類,在工業界應用廣泛,它的優點很多,模型通用性強,不需要太多對應數據領域的專業知識,工程實現簡單,效果也不錯。這些都是它流行的原因。

當然,協同過濾也有些難以避免的難題,比如令人頭疼的“冷啟動”問題,我們沒有新用戶任何數據的時候,無法較好的為新用戶推薦物品。同時也沒有考慮情景的差異,比如根據用戶所在的場景和用戶當前的情緒。當然,也無法得到一些小眾的獨特喜好,這塊是基于內容的推薦比較擅長的,小伙伴們歡迎一起學習研究探討。

標簽:

上一篇:
下一篇:
精品一区二区三区四区电影_亚洲人在线视频_久久久91精品_日本欧美黄色

            国产精品久久久影院| 欧美丰满熟妇xxxxx| 青青草成人免费在线视频| 网站在线你懂的| 欧美精品性生活| 妺妺窝人体色www在线小说| www.男人天堂网| 懂色av一区二区三区四区五区| 黄色一级片免费的| 国产成人黄色网址| 久草在在线视频| 韩国日本在线视频| 欧美视频第三页| av动漫在线观看| 日本一本二本在线观看| 国产aaa一级片| 国产成人久久婷婷精品流白浆| 国产v片免费观看| 女人帮男人橹视频播放| 9色porny| 18禁男女爽爽爽午夜网站免费| 黄色三级视频片| 99热手机在线| 欧美日韩久久婷婷| 亚洲国产一二三精品无码 | 黄色成人在线看| 5月婷婷6月丁香| 91视频 -- 69xx| 免费日韩视频在线观看| 欧美亚洲日本在线观看| 三级av免费观看| 大地资源第二页在线观看高清版| 国产高清精品软男同| 999一区二区三区| 自慰无码一区二区三区| 日本美女高潮视频| 天天操夜夜操很很操| 337p亚洲精品色噜噜狠狠p| 国产精品后入内射日本在线观看| 日本男人操女人| 免费在线观看污污视频| 日韩精品一区二区在线视频| 亚洲午夜精品久久久久久人妖| 茄子视频成人免费观看| 不卡中文字幕在线观看| 日本中文字幕一级片| 久久精品国产sm调教网站演员| 欧美一级黄色片视频| www.国产福利| 久草热视频在线观看| 蜜桃视频成人在线观看| 国产一区二区在线视频播放| 午夜视频你懂的| 六月婷婷激情网| 91免费视频网站在线观看| 五月天中文字幕在线| 亚洲色欲久久久综合网东京热| 欧美 日韩 国产一区| 亚洲欧洲日本精品| 免费国产成人av| 色乱码一区二区三区熟女| 免费一级特黄特色毛片久久看| 国产成人精品无码播放| 欧美做受777cos| 无码人妻精品一区二区三区66| 男人天堂成人网| 韩国日本在线视频| 艳母动漫在线观看| 99精品免费在线观看| 日本xxxxx18| 国产三级三级看三级| 欧美 日韩 亚洲 一区| 免费看污污网站| 国产乱人伦精品一区二区三区| 免费激情视频在线观看| 国产资源第一页| 小泽玛利亚视频在线观看| 妺妺窝人体色www看人体| 尤物国产在线观看| 激情六月丁香婷婷| 男女激情免费视频| 三日本三级少妇三级99| 毛片av免费在线观看| 日韩一二区视频| 成人性生交免费看| 国产成人在线免费看| 成年人三级视频| 免费av不卡在线| 青青草精品视频在线观看| 久久久久免费看黄a片app| 国产树林野战在线播放| 在线观看亚洲色图| 美女福利视频在线| 日本人妻伦在线中文字幕| 国产a级片免费看| 看看黄色一级片| 三年中国国语在线播放免费| 欧美在线观看www| 大西瓜av在线| 99精品一区二区三区的区别| 99精品999| 日本三级黄色网址| 一区二区在线播放视频| 黄色a级片免费| a√天堂在线观看| 黄色国产一级视频| 无码专区aaaaaa免费视频| 成人一区二区av| 真人做人试看60分钟免费| 国产美女视频免费| 日日噜噜噜夜夜爽爽| 久久婷婷中文字幕| 天堂在线一区二区三区| 中文字幕天天干| 一级在线免费视频| 天堂网在线免费观看| 日韩肉感妇bbwbbwbbw| 一区二区三区 日韩| 亚洲成人天堂网| 中文字幕在线观看日 | 久热在线视频观看| www.亚洲自拍| 懂色av一区二区三区四区五区| 艳母动漫在线免费观看| 糖心vlog在线免费观看| 日韩精品久久一区二区| 日本wwwcom| 亚欧无线一线二线三线区别| 北条麻妃69av| 亚洲男人天堂色| 九九九九九伊人| 手机成人av在线| 成人国产在线看| 无码人妻精品一区二区三区在线| 92看片淫黄大片一级| www.com黄色片| 精品国产乱码久久久久久1区二区| 一级网站在线观看| av影院在线播放| 国产xxxxx在线观看| 日日噜噜夜夜狠狠| 在线免费黄色网| avav在线播放| 成人一级片网站| 精品亚洲一区二区三区四区| 无套内谢丰满少妇中文字幕 | 欧美 丝袜 自拍 制服 另类| 91av在线免费播放| 亚洲欧美日韩三级| 公共露出暴露狂另类av| 男人添女荫道口图片| 日韩精品一区二区三区不卡 | 青青草原播放器| www.69av| 蜜臀av午夜一区二区三区| 日韩中文字幕a| 妺妺窝人体色www看人体| 欧美日韩中文在线视频| 樱花草www在线| 免费成人午夜视频| www.夜夜爽| 91传媒免费视频| 青青草av网站| 亚洲av综合色区| 久草资源站在线观看| 在线观看中文av| 日韩精品一区二区三区久久| 欧美国产日韩另类 | 最新中文字幕免费视频| 中文字幕一区二区三区四区五区人| 欧美一级免费播放| 一区二区三区 欧美| 97在线国产视频| 色播五月激情五月| 国产成人永久免费视频| 五月婷婷激情久久| 精品少妇在线视频| 中文字幕视频三区| 国内精品在线观看视频| 一级黄色片在线免费观看| 欧美黑人经典片免费观看| 福利视频999| 无码人妻丰满熟妇区毛片18| 91社在线播放| 欧美伦理片在线观看| 男人的天堂avav| 五月天开心婷婷| 精品www久久久久奶水| mm131午夜| 天天综合网日韩| 大肉大捧一进一出好爽视频| 久久久无码中文字幕久...| 在线免费观看av的网站| 欧美日本视频在线观看| 日本黄xxxxxxxxx100| 日本超碰在线观看| 欧美少妇性生活视频| 亚洲啊啊啊啊啊| 超碰成人在线播放| 能在线观看的av网站|