数据挖掘之Slope One

计算偏差:

card() 表示集合包含的元素数量。

加权Slope One算法

# coding:utf-8
__author__ = ‘similarface‘
import codecs, os, sys
from math import sqrt
‘‘‘
该数据:
{"用户":{"乐队":评分}}
‘‘‘
users2 = {"Amy": {"Taylor Swift": 4, "PSY": 3, "Whitney Houston": 4},
          "Ben": {"Taylor Swift": 5, "PSY": 2},
          "Clara": {"PSY": 3.5, "Whitney Houston": 4},
          "Daisy": {"Taylor Swift": 5, "Whitney Houston": 3}}

class recommender:
    def __init__(self, data, k=1, metric=‘pearson‘, n=5):
        self.k = k
        self.n = n
        self.username2id = {}
        self.userid2name = {}
        self.productid2name = {}
        self.metric = metric
        if self.metric == ‘pearson‘:
            self.fn = self.pearson
        if type(data).__name__ == ‘dict‘:
            self.data = data
        #频率值 同时对A,B都进行评分的用户数目
        self.frequencies={}
        #样本A对样本B的偏差值
        self.deviations={}
    def computerDeviation(self):
        ‘‘‘
        计算样本间的偏差
        :return:
        ‘‘‘
        #{"用户":{"乐队1":评分1,"乐队2":评分2,"乐队n":评分n}} =》 ratings={"乐队":评分}
        for ratings in self.data.values():
            #"乐队n":评分n
            for (item,rating) in ratings.items():
                #频率值 2样本同时都进行评分的用户数目
                #setdefault 如果键在字典中,返回这个键所对应的值。如果键不在字典中,向字典 中插入这个键,并且以{}为这个键的值,并返回{}
                self.frequencies.setdefault(item, {})
                #偏差值
                self.deviations.setdefault(item, {})
                for (item2,rating2) in ratings.items():
                    if item!=item2:
                        self.frequencies[item].setdefault(item2,0)
                        self.deviations[item].setdefault(item2,0.0)
                        self.frequencies[item][item2]+=1
                        self.deviations[item][item2]+=rating-rating2
        for (item,ratings) in self.deviations.items():
            for item2 in ratings:
                #dev(i,j)
                ratings[item2]/=self.frequencies[item][item2]

    def convertProductID2name(self, id):
        ‘‘‘
        给定商品编号返回商品名称
        ‘‘‘
        if id in self.productid2name:
            return self.productid2name[id]
        else:
            return id

    def slopeOneRecommendations(self,userRatings):
        ‘‘‘
        遍历用户u评论的所有样本:u[i]
            遍历用户u的偏差矩阵: dev[j,i]
                SUM((dev[j,i]+u[i])*c[j,i]) ==?c[j,i]=frequencies[j][i]
        :param userRatings:
        :return:
        ‘‘‘
        recommendations={}
        frequencies={}

        for (useritem,userRating) in userRatings.items():
            for (diffItem,diffRatting) in self.deviations.items():
                if diffItem not in userRatings and useritem in self.deviations[diffItem]:
                    freq=self.frequencies[diffItem][useritem]
                    recommendations.setdefault(diffItem,0.0)
                    frequencies.setdefault(diffItem,0)
                    recommendations[diffItem]+=(diffRatting[useritem]+userRating)*freq
                    frequencies[diffItem]+=freq
        recommendations=[(self.convertProductID2name(k),v /frequencies[k]) for k ,v in recommendations.items()]
        recommendations.sort(key=lambda artistTuple:artistTuple[1],reverse=True)
        return recommendations

if __name__ == ‘__main__‘:
    r=recommender(users2)
    r.computerDeviation()
    g=users2[‘Ben‘]
    result=r.slopeOneRecommendations(g)
    print(result)

  [(‘Whitney Houston‘, 3.375)]

时间: 2024-10-03 13:27:34

数据挖掘之Slope One的相关文章

常见的机器学习&数据挖掘知识点

常见的机器学习&数据挖掘知识点 转载请说明出处 Basis(基础): MSE(Mean Squared Error, 均方误差) RMSE(Root Mean Squared Error, 均方根误差) RRSE(Root Relative Squared Error, 相对平方根误差) MAE(Mean Absolute Error, 平均绝对误差) RAE(Root Absolute Error, 平均绝对误差平方根) LSM(Least Mean Squared, 最小均方) LSM(Le

R语言数据挖掘实战系列(2)

二.R语言简介 R语言是一种为统计计算和图形显示而设计的语言环境,具有免费.多平台支持,同时可以从各种类型的数据源中导入数据,具有较高的开放性以及高水准的制图功能.R是一个体系庞大的应用软件,主要包括核心的R标准包和各专业领域的其他包.R在数据分析.数据挖掘领域具有特别优势. R安装 R可在其主页(https://www.r-project.org/)上获得,根据所选择的平台进行下载安装.安装完成之后启动R.为了方便使用R,可使用免费的图形界面编辑器RStudio,可从https://www.r

【数据挖掘技术】回归

回归(Regression)分析包括线性回归(Linear Regression),这里主要是指多元线性回归和逻辑斯蒂回归(Logistic Regression).其中,在数据化运营中更多的使用逻辑斯蒂回归,它包括响应预测.分类划分等内容. 多元线性回归主要描述一个因变量如何随着一批自变量的变化而变化,其回归公式(回归方程)就是因变量和自变量关系的数据反映.因变量的变化包括两部分:系统性变化与随机性变化,其中,系统性变化是由自变量引起的(自变量可以解释的),随机变化是不能由自变量解释的,通常也

【Python数据挖掘课程】六.Numpy、Pandas和Matplotlib包基础知识

前面几篇文章采用的案例的方法进行介绍的,这篇文章主要介绍Python常用的扩展包,同时结合数据挖掘相关知识介绍该包具体的用法,主要介绍Numpy.Pandas和Matplotlib三个包.目录:        一.Python常用扩展包        二.Numpy科学计算包        三.Pandas数据分析包        四.Matplotlib绘图包 前文推荐:       [Python数据挖掘课程]一.安装Python及爬虫入门介绍       [Python数据挖掘课程]二.K

阿里、腾讯、京东、微软,各家算法&数据挖掘岗位面经大起底!

阿里.腾讯.京东.微软,各家算法&数据挖掘岗位面经大起底! 2016-02-24 36大数据 36大数据 作者: 江少华 摘要: 从2015年8月到2015年10月,花了3个月时间找工作,先后通过内推参加了美团.阿里蚂蚁金服.京东.腾讯.今日头条.Growing IO.微软这7个公司的面试,同时参加了网易游戏.LinkedI In中国这2个公司的笔试,拿到比较优 … 从2015年8月到2015年10月,花了3个月时间找工作,先后通过内推参加了美团.阿里蚂蚁金服.京东.腾讯.今日头条.Growin

数据挖掘十大经典算法

一. C4.5  C4.5算法是机器学习算法中的一种分类决策树算法,其核心算法是ID3 算法.   C4.5算法继承了ID3算法的优点,并在以下几方面对ID3算法进行了改进: 1) 用信息增益率来选择属性,克服了用信息增益选择属性时偏向选择取值多的属性的不足: 2) 在树构造过程中进行剪枝: 3) 能够完成对连续属性的离散化处理: 4) 能够对不完整数据进行处理. C4.5算法有如下优点:产生的分类规则易于理解,准确率较高.其缺点是:在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导

2017.06.29数据挖掘基础概念第十,十一章

第十章63.什么是聚类分析 一个把数据对象划分成子集的过程.每一个子集市一个簇,使得簇中的对象彼此相似,但与其他簇中的对象不相似.由聚类分析产生的簇的集合称做一个聚类.64.数据挖掘对聚类的要求 1.可伸缩性 2.处理不同属性类型的能力 3.发现任意形状的簇 4.对于确定输入参数的领域知识的要求 5.出来噪声数据的能力 6.增量聚类和对输入次序不敏感 7.聚类高维数据的能力 8.基于约束的聚类 9.可解释性和可用性 10.划分准则 11.簇的分离性 12.相似性度量 13.聚类空间65.基本聚类

2017.06.29 数据挖掘概念知识第一章

第一章1.数据仓库技术:1.数据清理 2.数据集成 3.联机分析处理2.数据挖掘(知识发现)过程P5详见图 1.数据清理 2.数据集成 3.数据选择 4.数据变换 5.数据挖掘 6.模式评估 7.知识表示3.大数据的特点: 1.量大 2.种类多 3.处理速度快 4价值密度低 5.复杂性4.类与概念描述方法过程: 1.数据特征化 2.数据区分 3.数据特征化和区分5.分类如何提供导出的模型: 导出的模型可以多种形式表示:分类规则.决策树.数学公式或神经网络6.一个模型是有趣的: 1.易于被人理解

R语言数据挖掘实战系列(1)

R语言数据挖掘实战(1) 一.数据挖掘基础 数据挖掘:从数据中"淘金",从大量数据(包括文本)中挖掘出隐含的.未知的.对决策有潜在价值的关系.模式和趋势,并用这些知识和规则建立用于决策支持的模型,提供预测性决策支持的方法.工具和过程. 数据挖掘的任务 利用分类与预测.聚类分析.关联规则.时序模式.偏差检测.智能推荐等方法,帮助企业提取数据中蕴含的商业价值,提高企业的竞争力. 数据挖掘建模过程 定义挖掘目标,即决定到底想干什么? 数据取样.抽取一个与挖掘目标相关的样本数据子集.抽取数据的