From 664fffaf553d4f6c2524616052b3f7106d863a7c Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Fri, 1 Sep 2017 11:15:20 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E6=9B=B4=E6=8D=A2=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=90=8D=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/python/14.SVD/{svdRec.py => svdRecommend.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/python/14.SVD/{svdRec.py => svdRecommend.py} (100%) diff --git a/src/python/14.SVD/svdRec.py b/src/python/14.SVD/svdRecommend.py similarity index 100% rename from src/python/14.SVD/svdRec.py rename to src/python/14.SVD/svdRecommend.py From 8ca05ede1f3e61c898d7c4cb302faa82fc43446f Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Fri, 1 Sep 2017 13:52:07 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20svd=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/python/14.SVD/svdRecommend.py | 77 +++++++++++++++++++++---------- 1 file changed, 53 insertions(+), 24 deletions(-) diff --git a/src/python/14.SVD/svdRecommend.py b/src/python/14.SVD/svdRecommend.py index b2b26ba5..669429aa 100644 --- a/src/python/14.SVD/svdRecommend.py +++ b/src/python/14.SVD/svdRecommend.py @@ -85,9 +85,17 @@ def cosSim(inA, inB): # 基于物品相似度的推荐引擎 -# standEst()函数,用来计算在给定相似度计算方法的条件下,用户对物品的估计评分值。 -# standEst()函数的参数包括数据矩阵、用户编号、物品编号和相似度计算方法 def standEst(dataMat, user, simMeas, item): + """standEst(计算某用户未评分物品中,以对该物品和其他物品评分的用户的物品相似度,然后进行综合评分) + + Args: + dataMat 训练数据集 + user 用户编号 + simMeas 相似度计算方法 + item 未评分的物品编号 + Returns: + ratSimTotal/simTotal 评分(0~5之间的值) + """ # 得到数据集中的物品数目 n = shape(dataMat)[1] # 初始化两个评分值 @@ -100,7 +108,8 @@ def standEst(dataMat, user, simMeas, item): if userRating == 0: continue # 寻找两个用户都评级的物品 - # 变量 overLap 给出的是两个物品当中已经被评分的那个元素 + # 变量 overLap 给出的是两个物品当中已经被评分的那个元素的索引ID + # logical_and 计算x1和x2元素的真值。 overLap = nonzero(logical_and(dataMat[:, item].A > 0, dataMat[:, j].A > 0))[0] # 如果相似度为0,则两着没有任何重合元素,终止本次循环 if len(overLap) == 0: @@ -114,35 +123,25 @@ def standEst(dataMat, user, simMeas, item): simTotal += similarity ratSimTotal += similarity * userRating if simTotal == 0: - return 0 + return 0 # 通过除以所有的评分总和,对上述相似度评分的乘积进行归一化,使得最后评分在0~5之间,这些评分用来对预测值进行排序 else: return ratSimTotal/simTotal -# recommend()函数,就是推荐引擎,它默认调用standEst()函数,产生了最高的N个推荐结果。 -# 如果不指定N的大小,则默认值为3。该函数另外的参数还包括相似度计算方法和估计方法 -def recommend(dataMat, user, N=3, simMeas=cosSim, estMethod=standEst): - # 寻找未评级的物品 - # 对给定的用户建立一个未评分的物品列表 - unratedItems = nonzero(dataMat[user, :].A == 0)[1] - # 如果不存在未评分物品,那么就退出函数 - if len(unratedItems) == 0: - return 'you rated everything' - # 物品的编号和评分值 - itemScores = [] - # 在未评分物品上进行循环 - for item in unratedItems: - estimatedScore = estMethod(dataMat, user, simMeas, item) - # 寻找前N个未评级物品,调用standEst()来产生该物品的预测得分,该物品的编号和估计值会放在一个元素列表itemScores中 - itemScores.append((item, estimatedScore)) - # 按照估计得分,对该列表进行排序并返回。列表逆排序,第一个值就是最大值 - return sorted(itemScores, key=lambda jj: jj[1], reverse=True)[: N] - - # 基于SVD的评分估计 # 在recommend() 中,这个函数用于替换对standEst()的调用,该函数对给定用户给定物品构建了一个评分估计值 def svdEst(dataMat, user, simMeas, item): + """svdEst( ) + + Args: + dataMat 训练数据集 + user 用户编号 + simMeas 相似度计算方法 + item 未评分的物品编号 + Returns: + ratSimTotal/simTotal 评分(0~5之间的值) + """ # 物品数目 n = shape(dataMat)[1] # 对数据集进行SVD分解 @@ -176,6 +175,36 @@ def svdEst(dataMat, user, simMeas, item): return ratSimTotal/simTotal +# recommend()函数,就是推荐引擎,它默认调用standEst()函数,产生了最高的N个推荐结果。 +# 如果不指定N的大小,则默认值为3。该函数另外的参数还包括相似度计算方法和估计方法 +def recommend(dataMat, user, N=3, simMeas=cosSim, estMethod=standEst): + """svdEst( ) + + Args: + dataMat 训练数据集 + user 用户编号 + simMeas 相似度计算方法 + estMethod 使用的推荐算法 + Returns: + 返回最终 N 个推荐结果 + """ + # 寻找未评级的物品 + # 对给定的用户建立一个未评分的物品列表 + unratedItems = nonzero(dataMat[user, :].A == 0)[1] + # 如果不存在未评分物品,那么就退出函数 + if len(unratedItems) == 0: + return 'you rated everything' + # 物品的编号和评分值 + itemScores = [] + # 在未评分物品上进行循环 + for item in unratedItems: + # 获取 item 该物品的评分 + estimatedScore = estMethod(dataMat, user, simMeas, item) + itemScores.append((item, estimatedScore)) + # 按照评分得分 进行逆排序,获取前N个未评级物品进行推荐 + return sorted(itemScores, key=lambda jj: jj[1], reverse=True)[: N] + + # 图像压缩函数 # 打印矩阵 def printMat(inMat, thresh=0.8): From bd507a9bce1bd11156ac0861f53ab8f57cb53b3e Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Fri, 1 Sep 2017 14:05:03 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index fd47d8b9..c8e6f576 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ * **欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远** * **Machine Learning in Action (机器学习实战) | [ApacheCN(apache中文网)](http://cwiki.apachecn.org/)** * **视频每周更新:如果你觉得有价值,请帮忙点 Star【后续组织学习活动:sklearn + tensorflow】** +* **应部分网友的要求,特地建机器学习群:【629470233】遇到问题可以进行提问,也可以参与文档的同步更新ApacheCN - 学习机器学习** ## 第一部分 分类 From e5db7aaa11c0457752828f2b512fa2fe2a587556 Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Fri, 1 Sep 2017 14:13:08 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E6=9B=B4=E6=98=AF=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +++- images/MainPage/ApacheCN-group.png | Bin 0 -> 1827 bytes 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 images/MainPage/ApacheCN-group.png diff --git a/README.md b/README.md index c8e6f576..b7485cc8 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,9 @@ * **欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远** * **Machine Learning in Action (机器学习实战) | [ApacheCN(apache中文网)](http://cwiki.apachecn.org/)** * **视频每周更新:如果你觉得有价值,请帮忙点 Star【后续组织学习活动:sklearn + tensorflow】** -* **应部分网友的要求,特地建机器学习群:【629470233】遇到问题可以进行提问,也可以参与文档的同步更新ApacheCN - 学习机器学习** +* **ApacheCN - 学习机器学习群[629470233] 方便网友提问,也可以方便大家修复BUG 并 参与文档的同步更新** + +ApacheCN - 学习机器学习群[629470233] ## 第一部分 分类 diff --git a/images/MainPage/ApacheCN-group.png b/images/MainPage/ApacheCN-group.png new file mode 100644 index 0000000000000000000000000000000000000000..ea93fc51640c1a19cbc62fb42ef48dd8e35dfed8 GIT binary patch literal 1827 zcmV+;2i*9HP)ccWHX`L6qMvsui)$M_HyC&lT$JO+u9?P&%NF5W0brufV1V#vq7EE zY%?1UweMuR>WHVo-RSm#!sN}Hd2V)N(c|qEo8}^v(p_3WqHS8mkZMAZzZs_a!6>g*WT~??ehD2G$f0x zqga{3Fp0m7psrG@+uh9Bb3iu6%+`BSOem`D{{H{Jh*)!zd4;jk)2NSAf1mO7{P5Sn zC7$5i;K~Jw6~bFc}?};%U5?{Ql!v@KP{zZ zRlC34eoH%(U`Q0f_H@SbR=V#xl*nYi@RqyQ6s_>*=IdxLBl6a}Ppi4scJ&($f~!Wlr^X2-qGWHo4C>J`>JkU@6fc6SWIm*BiP>Q z(4vERfM&9NSQ?+`oLx5Q@A@oxt{RNiII!=TuG`tfwY79jKini1j#`!a!*rVI{f=4=5f1>x~(3)38(R5;7Ek_%K6RT#&|Y(sOT6sm#MMVHF7K}*Sf}}Nv})q zUAHxG(`2m-v&b^2G)8v{ZG8dT1E>*Yigq`0!_A(krQoC59#hCfmPuApnI@Ruy|V~; zI7d6+|D2io-S7L~-@WtQ;hdF=PKa{8Tr2jg5 z_R@BAQBgTZL@VWmphN_bQ#>VHx7c0uS4X% z8KMxq{pdnx+b=U1(oH2H~^bqlWEw5|9kv=^4>Y?|g#jeND9rkt(q zQU!IFGfVM1t09NxeRg>$TL@+EepzToTVDMud6Vz90nOY)hwj`wv<;ode#1O1UP&|1 z!-<=Xxg-k-LYeLs+&dS`W^mP^n(^K3xfUen|aYiIR@^?n^p-1YLY->X! zh36GLsFeso105Yh*s-G;qJz~Vc&yB*MPa9Tc2g*fgiw?5Wd_7)i< zm9OEIKWEM?{&)r?$aGBQ8ICC$2X&Y{O?F^3#S2k9QE64@F;5FvCGqg4&EAP|sEIAb zcN=K=f)^_)D&GF7@3Lim|L8^0tePj@g~c^7bezYEFfP}NFm~*%&ci8QF%c(vs|npjw9%IrY$GZtrA&2ZQ_uJKNxx;pb@CV zSx$(Cv`Qr{Q`M~w#N^kD5Gqsrsm?WYYEmjmlm;$(kFyX8H5tC^xEGRSsdfL?mcoQW zsc?Vm)TyPn+$R}mhk_KvgiH<=#mJ~F8aalLTxRn-2~mN0{prJggyHf3pc7V}yYe-7 z5^gUo?ce{=82T78DX~okDvCn4FhLGJsL?3D#Ly?V*7mHerB9y~pz+6tK86f*{d)xk z1^sRW^@HGddpDscJRr-GBn1NXc2IpF5RfFe#(`bchV|S<6VB^QCv{oR90rMPw)1z( R<%<9S002ovPDHLkV1i93(UkxI literal 0 HcmV?d00001 From 5347c617333d0afa92c7084156350998df520d74 Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Fri, 1 Sep 2017 14:17:55 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=08=08=E6=B7=BB=E5=8A=A0=20QQ=E7=BE=A4=20?= =?UTF-8?q?=E7=9A=84readme.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index b7485cc8..0a6c76d7 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,7 @@ * **欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远** * **Machine Learning in Action (机器学习实战) | [ApacheCN(apache中文网)](http://cwiki.apachecn.org/)** * **视频每周更新:如果你觉得有价值,请帮忙点 Star【后续组织学习活动:sklearn + tensorflow】** -* **ApacheCN - 学习机器学习群[629470233] 方便网友提问,也可以方便大家修复BUG 并 参与文档的同步更新** - -ApacheCN - 学习机器学习群[629470233] +* **ApacheCN - 学习机器学习群【629470233】ApacheCN - 学习机器学习群[629470233]** ## 第一部分 分类