python矩阵

基于矩阵分解的推荐算法,简单入门

假装没事ソ 提交于 2020-01-25 10:14:15
基于矩阵分解的推荐算法,简单入门 转自:http://www.cnblogs.com/kobedeshow/p/3651833.html 本文将要讨论基于矩阵分解的推荐算法,这一类型的算法通常会有很高的预测精度,也活跃于各大推荐系统竞赛上面,前段时间的百度电影推荐最终结果的前10名貌似都是把矩阵分解作为一个单模型,最后各种ensemble,不知道正在进行的阿里推荐比赛( http://102.alibaba.com/competition/addDiscovery/index.htm ),会不会惊喜出现。。。。好了,闲话不扯了,本文打算写一篇该类型推荐算法的入门篇 目录 一,基于矩阵分解的推荐算法相关理论介绍 二,C++代码实现 三,总结跟展望一下 四,后续计划 一,基于矩阵分解的推荐算法相关理论介绍 我们知道,要做推荐系统,最基本的一个数据就是,用户-物品的评分矩阵,如下图1所示 图1 矩阵中,描述了5个用户(U1,U2,U3,U4 ,U5)对4个物品(D1,D2,D3,D4)的评分(1-5分),- 表示没有评分,现在目的是把没有评分的 给预测出来,然后按预测的分数高低,给用户进行推荐。 如何预测缺失的评分呢?对于缺失的评分,可以转化为基于机器学习的回归问题,也就是连续值的预测,对于矩阵分解有如下式子,R是类似图1的评分矩阵,假设N*M维(N表示行数,M表示列数)

转推荐算法——基于矩阵分解的推荐算法

北战南征 提交于 2020-01-25 10:13:39
推荐算法概述 对于推荐系统(Recommend System, RS),从广义上的理解为:为用户(User)推荐相关的商品(Items)。常用的推荐算法主要有: 基于内容的推荐(Content-Based Recommendation) 协同过滤的推荐(Collaborative Filtering Recommendation) 基于关联规则的推荐(Association Rule-Based Recommendation) 基于效用的推荐(Utility-Based Recommendation) 基于知识的推荐(Knowledge-Based Recommendation) 组合推荐(Hybrid Recommendation) 在推荐系统中,最重要的数据是用户对商品的打分数据,数据形式如下所示: 其中, U 1 ⋯ U 5 表示的是 5 个不同的用户, D 1 ⋯ D 4 表示的是 4 个不同的商品,这样便构成了用户-商品矩阵,在该矩阵中,有用户对每一件商品的打分,其中“-”表示的是用户未对该商品进行打分。 在推荐系统中有一类问题是对未打分的商品进行评分的预测。 目前推荐系统中用的最多的就是矩阵分解方法,在Netflix Prize推荐系统大赛中取得突出效果。以用户-项目评分矩阵为例,矩阵分解就是预测出评分矩阵中的缺失值,然后根据预测值以某种方式向用户推荐

python与matlab指定矩阵范围时冒号的区别

别来无恙 提交于 2020-01-25 08:14:33
python的冒号在指定范围时是含左不含右的,这点跟matlab不一样。 例:在python中,X[:, m:n],即取矩阵X的所有行中的的第m到n-1列数据含左不含右 。 而在matlab中,X[:, m:n],即取矩阵X的所有行中的的第m到n列数据含左也含右 。 来源: CSDN 作者: Wen62598741 链接: https://blog.csdn.net/weixin_44623330/article/details/104010656

【数据分析与科学计算可视化】numpy 和 matplotlib库总结

让人想犯罪 __ 提交于 2020-01-21 14:01:51
一、numpy库 numpy:科学计算包,支持N维数组运算、处理大型矩阵、成熟的广播函数库、矢量运算、线性代数、傅里叶变换、随机数生成,并可与C++/Fortran语言无缝结合。树莓派Python v3默认安装已经包含了numpy。 另: scipy:scipy依赖于numpy,提供了更多的数学工具,包括矩阵运算、线性方程组求解、积分、优化、插值、信号处理、图像处理、统计等等。 1.扩展库numpy简介 导入模板:(交换式) >>>import numpy as np 2.numpy库应用于数组 (1)简单数组的生成 >>>import numpy as np #把列表转化为数组 >>> np.array([0,1,2,3,4]) array([0, 1, 2, 3, 4])>>>np.array((0,1,2,3,4)) # 元组转化为数组array([0, 1, 2, 3, 4]) >>>np.array(range(5)) # 把range对象转换成数组 array([0, 1, 2, 3, 4]) >>>np.array([[1,2,3,4,],[5,6,7,8]]) #二维数组 array([[1, 2, 3, 4], [5, 6, 7, 8]]) >>>np.arange(8) # 类似于内置函数range() array([0,1,2,3,4,5,6,7]) >>

DTW + python 矩阵操作 + debug

你离开我真会死。 提交于 2020-01-19 00:57:10
1. from here . diagonal Return specified diagonals. diagflat Create a 2-D array with the flattened input as a diagonal. trace Sum along diagonals. triu Upper triangle of an array. tril Lower triangle of an array. 2. DTW distance. dtaidistance from dtaidistance import dtw ds = dtw.distance_matrix_fast(x) 3. sparce matrix in csr format. 4. Bug: AttributeError: module 'community' has no attribute 'best_partition' import community 但是安装包是不是安装community,而是安装pip intall python-louvain. 来源: https://www.cnblogs.com/dulun/p/12210829.html

Python matplotlib subplot 简单使用

久未见 提交于 2020-01-16 09:41:40
原文: https://www.cnblogs.com/xiaoboge/p/9683056.html mark:得先回忆一下以前学的矩阵哈,现在才知道矩阵在啥时候用。。。 直接上例子: subplot(numRows, numCols, plotNum)   如:subplot(2, 3, 3)   numRows=2, numCols=3:表示矩阵有2行 3列   plotNum=3:指定区域为3,坐标为(1, 3)   如:plotNum=4:指定区域为4,坐标为(2, 1)     区域 应该就是 挨着数下去吧   2*3的矩阵,总共有6个坐标点: (1, 1), (1, 2), (1, 3) (2, 1), (2, 2), (2, 3)    来源: https://www.cnblogs.com/guxingy/p/12199609.html

numpy 如何指定矩阵中输出的小数位数

╄→尐↘猪︶ㄣ 提交于 2020-01-16 02:32:41
如果有一个小数位很多的矩阵,我们希望只显示前某几位,该怎么办? ```python import numpy as np a=np.array([[1.123,2.123,3.123],[4.456,5.456,6.456],[7.789,8.789,9.789]]) print(a.round(0))#显示整数部分 print(a.round(1))#显示一位小数 输出结果: ```python ```python [[ 1. 2. 3.] [ 4. 5. 6.] [ 8. 9. 10.]] [[1.1 2.1 3.1] [4.5 5.5 6.5] [7.8 8.8 9.8]] 来源: CSDN 作者: thompson_wang 链接: https://blog.csdn.net/Jinyindao243052/article/details/103987460

Python使用小结

。_饼干妹妹 提交于 2020-01-15 20:55:42
初始化 Numpy中提供了zero(),ones(),empty()分别让在向量初始化时置为0、置为1和置为空 矩阵相乘 尽量使用np中三角函数,如np.cos(),np.sin()等等。 你需要在下面的代码里面主要到这些点: (1):np.dot()如果碰到的是秩为1的数组,那么执行的是对应位置的元素相乘再相加;如果遇到的是秩不为1的数组,那么执行的是矩阵相乘。但是需要注意的是矩阵与矩阵相乘是秩为2,矩阵和向量相乘秩为1。 (2):np.multiply()表示的是数组和矩阵对应位置相乘,输出和输出的结果shape一致。 (3):np.outer()表示的是两个向量相乘,拿第一个向量的元素分别与第二个向量所有元素相乘得到结果的一行。 (4):*对数组执行的是对应位置相乘,对矩阵执行的是矩阵相乘。 绘图 绘制三维图导入的包包括以下几个,尤其是第一个包 from mpl_toolkits.mplot3d import Axes3D import numpy as np import matplotlib.pyplot as plt 绘图的所有色彩参考如下: cnames = { 'aliceblue': '#F0F8FF', 'antiquewhite': '#FAEBD7', 'aqua': '#00FFFF', 'aquamarine': '#7FFFD4', 'azure':

有关ascii码的hill加解密

人走茶凉 提交于 2020-01-13 03:50:39
hill加解密的原理实际上就是利用可逆矩阵,将明文矩阵和加密矩阵进行计算得到密文,在接收端利用密文和加密矩阵的逆进行计算再得到明文。[加密矩阵][明文矩阵]%256=[密文矩阵],[加密矩阵的逆][密文矩阵]%256=[明文矩阵]。 本次实验是将一串明文英文字符串(可包含空格)作为输入,根据加密矩阵的阶数来构建对应的明文矩阵(明文转换为ascii码),然后与加密矩阵进行计算,对256取余再对密文进行转义输出成加密字符。解密时,先计算加密矩阵的逆,调用python的numpy包进行计算,结果输出都是小数,需要转换为分数,得到分子和分母,目的是为了方便计算小数对整数取余。 小数对整数取余,先转换为分数。在python里面调用fractions,v = fractions.Fraction(mat[j][i]).limit_denominator()#小数转分数,v.denominator和v.numerato#分别获取分子和分母。 假设(a/b)%256取余:(a/b)%256=x得到a(%256)=bx,继续得到bx=256k+a,即x=(256k+a)/b。把k从0开始取,直到x计算得到整数为之。35/3对256取余得到97。 实验输入和输出为: 请输入加密位数(-1结束):9 请输入明文:wo ai ni zhongguo! 明文矩阵: [[119, 97, 110, 122,

数组索引 笔记2

霸气de小男生 提交于 2020-01-07 16:23:16
数组的类型及形状 numpy里面的数据类型 numpy里面的数据类型,其实就是封装了python里面的基础的数据类型,然后还进行细致划分,之后封装为np . 数据类型 1 ,创建数组的时候通过dtype属性来指定 元素的数据类型 arr = np . array ( [ 1 , 2 , 3 , 4 ] ) , dtype = float32 ( ) 2 ,也可以进行强制转换 res = np . float32 ( 5 ) 3 ,可以通过stype来修改数据类型 将arr的float32类型转化为int32类型 arr = arr . astype ( np . int32 ) arr . dtype = np . int32 - - > 转化类型正确,但是元素发生变化,不建议用 4 ,ndarray也可以存储复合数据类型 - - 了解 存储人对象 - - 人对象 3 个属性 - - 姓名,身高,体重 df = np . dtype ( [ ( 'name' , np . str , 40 ) , ( 'high' , np . float32 ) , ( 'weight' , np . float32 ) ] ) #创建一个存储复合数据的数组对象 arr = np . arrpy ( [ ( 'bq' , 168.5 , 50.5 ) , ( 'yf' , 172 , 55 )