机器学习自学进度与笔记整理——《机器学习实战:基于Scikit-Learn和TensorFlow》(第一章)
2020-01-14 19:28
666 查看
20191020
集体智慧编程(P7-P20)
#-*-coding:GBK -*- ''' 第二章 提供推荐 一个完整的系统 适用于任何类型的商品或网络链接 建议一个涉及人员、物品和评价值的字典,然后可以借此为任何人提供建议 教材讲解与相关概念补充 ''' from math import sqrt #import importlib,sys #importlib.reload(sys) #使用嵌套的字典来存储影评人及其评价 critics = { 'name_1':{'movie_1':2.5,'movie_2':3.5,'movie_3':3.0,'movie_4':3.5,'movie_5':2.5,'movie_6':3.0}, 'name_2':{'movie_1':3.0,'movie_2':3.5,'movie_3':1.5,'movie_4':5.0,'movie_5':3.5,'movie_6':3.0}, 'name_3':{'movie_1':2.5,'movie_2':3.0,'movie_4':3.5,'movie_6':4.0}, 'name_4':{'movie_2':3.5,'movie_3':3.0,'movie_4':4.0,'movie_5':2.5,'movie_6':4.5}, 'name_5':{'movie_1':3.0,'movie_2':4.0,'movie_3':2.0,'movie_4':3.0,'movie_5':2.0,'movie_6':3.0}, 'name_6':{'movie_1':3.0,'movie_2':4.0,'movie_4':5.0,'movie_5':3.5,'movie_6':3.0}, 'name_7':{'movie_2':4.5,'movie_5':1.0,'movie_4':4.0}, } #返回一个有关person1与person2的基于距离的相似度评价 def sim_distance(prefs,person1,person2): #得到shared_items的列表 si={} #注意这里是一个字典 for item in prefs[person1]: if item in prefs[person2]: si[item] = 1 #如果两者没有共同之处,则返回0 if len(si) == 0: return 0 #计算所有差值的平方和 sum_of_squares = sum([pow(prefs[person1][item] - prefs[person2][item],2) for item in prefs[person1] if item in prefs[person2]]) #此处逻辑:给偏好越相近的人一个更大的值;为防止求出的分母是负数,在分母上+1 return 1/(1+sqrt(sum_of_squares)) ''' print (sim_distance(critics,'name_1','name_2')) print (sim_distance(critics,'name_1','name_3')) print (sim_distance(critics,'name_1','name_4')) ''' #返回p1和p2的皮尔逊相关系数 ''' *概念补充 皮尔逊相关系数: 度量两个变量之间相关程度的方法,取值[-1,1] 1表示变量完全正相关,0表示无关,-1表示完全负相关 ''' def sim_pearson(prefs,p1,p2): """ 函数返回值[-1,1] 当值为1时,说明两者拥有完全一致的评价 """ #得到双方都曾评价过的物品列表 si = {} for item in prefs[p1]: if item in prefs[p2]: si[item] = 1 #得到列表元素的个数 n = len(si) #如果两者没有共同之处,则返回1 if n == 0: return 1 #对所有偏好求和 sum1 = sum([prefs[p1][it] for it in si]) sum2 = sum([prefs[p2][it] for it in si]) #求平方和 sum1Sq = sum([pow(prefs[p1][it],2) for it in si]) sum2Sq = sum([pow(prefs[p2][it],2) for it in si]) #求乘积之和 pSum = sum([prefs[p1][it]*prefs[p2][it] for it in si]) #计算皮尔逊评价值 num = pSum - (sum1*sum2/n) den = sqrt((sum1Sq - pow(sum1,2)/n)*(sum2Sq - pow(sum2,2)/n)) if den == 0: return 0 r = num/den return r ''' print (sim_pearson(critics,'name_1','name_2')) print (sim_pearson(critics,'name_1','name_3')) print (sim_pearson(critics,'name_1','name_4')) ''' #从反映偏好的字典中返回最为匹配者 #返回结果的个数和相似度函数均为可选参数 def topMatches(prefs,person,n=5,similarity=sim_pearson): scores = [(similarity(prefs,person,other),other) for other in prefs if other != person] #对列表进行排序,评价最高者排在最前面 scores.sort() scores.reverse() return scores[0:n] ''' print (topMatches(critics,'name_7',n=3)) ''' #利用所有他人评价值的加权平均,为某人提供建议 def getRecommendations(prefs,person,similarity=sim_pearson): totals = {} simSums = {} for other in prefs: #不要和自己比较 if other == person: continue sim = similarity(prefs,person,other) #忽略评价值为0或者小于零的情况 if sim <= 0: continue for item in prefs[other]: #只对自己还未曾看过的影片进行评价 if item not in prefs[person] or prefs[person][item] == 0: #相似度*评价值 totals.setdefault(item,0) totals[item] += prefs[other][item]*sim #每一项最终评价值的计算方法 #相似度之和 simSums.setdefault(item,0) simSums[item] += sim #建立一个归一化的列表 rankings = [(total/simSums[item],item) for item,total in totals.items()] #返回经过排序的列表 rankings.sort() rankings.reverse() return rankings ''' print(getRecommendations(critics,'name_7')) print(getRecommendations(critics,'name_7',sim_distance)) 程序进行到这里 我们已经知道怎么样向指定的人员寻找品味相近者,同时并且向他推荐商品 ''' #相近商品的匹配 def transformPrefs(prefs): result = {} for person in prefs: for item in prefs[person]: result.setdefault(item,{}) #将物品和人员对调 result[item][person] = prefs[person][item] return result movies = transformPrefs(critics) #print(topMatches(movies,'movie_4'))#相关影片的推荐 #print(getRecommendations(movies,'movie_3'))#为影片推荐评论人
# -*- coding: GBK -*- ''' 找到一组近期提交过的某一热门链接 且链接附带指定标签(tag)的用户 ''' import random from pydelicious import get_popular,get_userposts,get_urlposts import recommendations def initializeUserDict(tag,count=5): """ 得到一个包含若干用户数据的字典 其中每一项都各自指向一个等待填入具体链接的空字典 """ user_dict = {} #获取前count个最受欢迎的链接张贴记录 for p1 in get_popular(tag=tag)[0:count]: #查找所有张贴该链接的用户 for p2 in get_urlposts(p1['hrefs']): user = p2['user'] user_dict[user] = {} return user_dict def fillItems(user_dict): """ 对于每一个用户 他们的‘评价’都只有两类:张贴(1)、未张贴(0) """ all_items = {} #查找所有用户都提交过的链接 for user in user_dict: for i in range(3): try: posts = get_userposts(user) break except: print('Failed user ' + user + ', retrying') time.sleep(4) for post in posts: url = post['href'] user_dict[user]机器学习(Machine Learning)- 吴恩达(Andrew Ng)" target=_blank> = 1.0 all_items[url] = 1 #用零填充缺失的项 for ratings in user_dict.values(): for item in all_items: if item not in ratings: ratings[item] = 0.0 delusers = initializeUserDict('programming') delusers['tsegaran'] = {}#如果你也用delicious,则将自己也加入字典中 fillItems(delusers) ''' 随机选择一位用户 并找出与其品味相近的其他用户 ''' user = delusers.keys()[random.randint(0,len(delusers)-1)] topMatches(delusers,user) getRecommendations(delusers,user)[0:10] [/code]在2019年10月22日时,因为这本书基于Python2.x编写,并且遇到书中链接失效的情况,最终选择再换一本书。
机器学习吴恩达(4/113)
学习参考链接:
[url=https://www.bilibili.com/video/av9912938]机器学习(Machine Learning)- 吴恩达(Andrew Ng)20191022
机器学习吴恩达(8/113)
机器学习实战:基于Scikit-Learn和TensorFlow
因为各个教材教授内容大同小异,从今天开始以该书为主,记录学习进程。
学习参考链接:
[url=https://github.com/DeqianBai/Hands-on-Machine-Learning]DeqianBai/Hands-on-Machine-Learning20191023
机器学习实战:基于Scikit-Learn和TensorFlow
第一部分 机器学习基础(1-8章)
第一章 机器学习概览
思维导图
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 机器学习实战(基于Scikit-Learn和TensorFlow)——第一章
- 机器学习实战(基于Scikit-Learn和TensorFlow)(第2章)
- 《机器学习实战:基于Scikit-Learn和TensorFlow》(第二章_try_it_out_工程实践问题概述)
- 机器学习整理笔记——基于《机器学习实战》
- 《机器学习实战:基于Scikit-Learn和TensorFlow》(第二章_try_it_out)
- 《机器学习实战:基于Scikit-Learn和TensorFlow》(第二章_代码实现)
- 机器学习实战:基于Scikit-Learn和TensorFlow(一)
- 《机器学习实战:基于Scikit-Learn和TensorFlow》(第二章_读书笔记)
- 机器学习实战(基于Scikit-Learn和TensorFlow)(第1章)
- 分享《机器学习实战:基于Scikit-Learn和TensorFlow》高清中英文PDF+源代码
- 基于Python的机器学习包 scikit-learn
- <机器学习笔记-02> <scikit-learn -02>线性回归
- 基于 Python 和 Scikit-Learn 的机器学习介绍
- Python scikit-learn机器学习工具包学习笔记:feature_selection模块
- python中机器学习包scikit-learn使用笔记与sign prediction简单小结
- [机器学习]机器学习笔记整理09- 基于SVM图像识别
- Python机器学习笔记 使用scikit-learn工具进行PCA降维
- <机器学习笔记-04 ><scikit-learn 04>逻辑回归
- <机器学习笔记-06 ><scikit-learn 06>K-Means 聚类
- (转)(三)机器学习笔记之Scikit Learn的线性回归模型初探