Skip to content

Commit 1ce81a8

Browse files
Merge pull request #134 from jiangzhonglian/master
添加首页 readme.md QQ群
2 parents 6b98e1e + 949dab8 commit 1ce81a8

3 files changed

Lines changed: 54 additions & 24 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
* **欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远**
44
* **Machine Learning in Action (机器学习实战) | [ApacheCN(apache中文网)](http://cwiki.apachecn.org/)**
55
* **视频每周更新:如果你觉得有价值,请帮忙点 Star【后续组织学习活动:sklearn + tensorflow】**
6+
* **ApacheCN - 学习机器学习群【629470233】<a target="_blank" href="//shang.qq.com/wpa/qunwpa?idkey=30e5f1123a79867570f665aa3a483ca404b1c3f77737bc01ec520ed5f078ddef"><img border="0" src="/images/MainPage/ApacheCN-group.png" alt="ApacheCN - 学习机器学习群[629470233]" title="ApacheCN - 学习机器学习群[629470233]"></a>**
67

78
## 第一部分 分类
89

images/MainPage/ApacheCN-group.png

1.78 KB
Loading
Lines changed: 53 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,17 @@ def cosSim(inA, inB):
8585

8686

8787
# 基于物品相似度的推荐引擎
88-
# standEst()函数,用来计算在给定相似度计算方法的条件下,用户对物品的估计评分值。
89-
# standEst()函数的参数包括数据矩阵、用户编号、物品编号和相似度计算方法
9088
def standEst(dataMat, user, simMeas, item):
89+
"""standEst(计算某用户未评分物品中,以对该物品和其他物品评分的用户的物品相似度,然后进行综合评分)
90+
91+
Args:
92+
dataMat 训练数据集
93+
user 用户编号
94+
simMeas 相似度计算方法
95+
item 未评分的物品编号
96+
Returns:
97+
ratSimTotal/simTotal 评分(0~5之间的值)
98+
"""
9199
# 得到数据集中的物品数目
92100
n = shape(dataMat)[1]
93101
# 初始化两个评分值
@@ -100,7 +108,8 @@ def standEst(dataMat, user, simMeas, item):
100108
if userRating == 0:
101109
continue
102110
# 寻找两个用户都评级的物品
103-
# 变量 overLap 给出的是两个物品当中已经被评分的那个元素
111+
# 变量 overLap 给出的是两个物品当中已经被评分的那个元素的索引ID
112+
# logical_and 计算x1和x2元素的真值。
104113
overLap = nonzero(logical_and(dataMat[:, item].A > 0, dataMat[:, j].A > 0))[0]
105114
# 如果相似度为0,则两着没有任何重合元素,终止本次循环
106115
if len(overLap) == 0:
@@ -114,35 +123,25 @@ def standEst(dataMat, user, simMeas, item):
114123
simTotal += similarity
115124
ratSimTotal += similarity * userRating
116125
if simTotal == 0:
117-
return 0
126+
return 0
118127
# 通过除以所有的评分总和,对上述相似度评分的乘积进行归一化,使得最后评分在0~5之间,这些评分用来对预测值进行排序
119128
else:
120129
return ratSimTotal/simTotal
121130

122131

123-
# recommend()函数,就是推荐引擎,它默认调用standEst()函数,产生了最高的N个推荐结果。
124-
# 如果不指定N的大小,则默认值为3。该函数另外的参数还包括相似度计算方法和估计方法
125-
def recommend(dataMat, user, N=3, simMeas=cosSim, estMethod=standEst):
126-
# 寻找未评级的物品
127-
# 对给定的用户建立一个未评分的物品列表
128-
unratedItems = nonzero(dataMat[user, :].A == 0)[1]
129-
# 如果不存在未评分物品,那么就退出函数
130-
if len(unratedItems) == 0:
131-
return 'you rated everything'
132-
# 物品的编号和评分值
133-
itemScores = []
134-
# 在未评分物品上进行循环
135-
for item in unratedItems:
136-
estimatedScore = estMethod(dataMat, user, simMeas, item)
137-
# 寻找前N个未评级物品,调用standEst()来产生该物品的预测得分,该物品的编号和估计值会放在一个元素列表itemScores中
138-
itemScores.append((item, estimatedScore))
139-
# 按照估计得分,对该列表进行排序并返回。列表逆排序,第一个值就是最大值
140-
return sorted(itemScores, key=lambda jj: jj[1], reverse=True)[: N]
141-
142-
143132
# 基于SVD的评分估计
144133
# 在recommend() 中,这个函数用于替换对standEst()的调用,该函数对给定用户给定物品构建了一个评分估计值
145134
def svdEst(dataMat, user, simMeas, item):
135+
"""svdEst( )
136+
137+
Args:
138+
dataMat 训练数据集
139+
user 用户编号
140+
simMeas 相似度计算方法
141+
item 未评分的物品编号
142+
Returns:
143+
ratSimTotal/simTotal 评分(0~5之间的值)
144+
"""
146145
# 物品数目
147146
n = shape(dataMat)[1]
148147
# 对数据集进行SVD分解
@@ -176,6 +175,36 @@ def svdEst(dataMat, user, simMeas, item):
176175
return ratSimTotal/simTotal
177176

178177

178+
# recommend()函数,就是推荐引擎,它默认调用standEst()函数,产生了最高的N个推荐结果。
179+
# 如果不指定N的大小,则默认值为3。该函数另外的参数还包括相似度计算方法和估计方法
180+
def recommend(dataMat, user, N=3, simMeas=cosSim, estMethod=standEst):
181+
"""svdEst( )
182+
183+
Args:
184+
dataMat 训练数据集
185+
user 用户编号
186+
simMeas 相似度计算方法
187+
estMethod 使用的推荐算法
188+
Returns:
189+
返回最终 N 个推荐结果
190+
"""
191+
# 寻找未评级的物品
192+
# 对给定的用户建立一个未评分的物品列表
193+
unratedItems = nonzero(dataMat[user, :].A == 0)[1]
194+
# 如果不存在未评分物品,那么就退出函数
195+
if len(unratedItems) == 0:
196+
return 'you rated everything'
197+
# 物品的编号和评分值
198+
itemScores = []
199+
# 在未评分物品上进行循环
200+
for item in unratedItems:
201+
# 获取 item 该物品的评分
202+
estimatedScore = estMethod(dataMat, user, simMeas, item)
203+
itemScores.append((item, estimatedScore))
204+
# 按照评分得分 进行逆排序,获取前N个未评级物品进行推荐
205+
return sorted(itemScores, key=lambda jj: jj[1], reverse=True)[: N]
206+
207+
179208
# 图像压缩函数
180209
# 打印矩阵
181210
def printMat(inMat, thresh=0.8):

0 commit comments

Comments
 (0)