week16 矩阵分解的推荐算法 和绘图
绘图
Strtok()函数详解:
该函数包含在"string.h"头文件中
函数原型:
char* strtok (char* str,constchar* delimiters );
函数功能:
切割字符串,将str切分成一个个子串
函数参数:
str:在第一次被调用的时间str是传入需要被切割字符串的首地址;在后面调用的时间传入NULL。
delimiters:表示切割字符串(字符串中每个字符都会 当作分割符)。
函数返回值:
当s中的字符查找到末尾时,返回NULL;
如果查不到delimiter所标示的字符,则返回当前strtok的字符串的指针。
atoi()函数
atoi():int atoi(const char *str );
功能:把字符串转换成整型数。
str:要进行转换的字符串
返回值:每个函数返回 int 值,此值由将输入字符作为数字解析而生成。 如果该输入无法转换为该类型的值,则atoi的返回值为 0。
说明:当第一个字符不能识别为数字时,函数将停止读入输入字符串。
atoi
atof()函数
atof():double atof(const char *str );
功 能: 把字符串转换成浮点数
str:要转换的字符串。
返回值:每个函数返回 double 值,此值由将输入字符作为数字解析而生成。 如果该输入无法转换为该类型的值,则返回值为 0.0。
函数说明 :atof()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回,str字符串可包含正负号、小数点或E(e)来表示指数部分。
atof
CPen:画笔
CBrush:画刷
High-speed Charting Control也许是vc下最好最方便的绘图类,它有TeeChart的绘图和操作风格,不用当心注册破解的问题,因为它是开源的。不用打包注册,因为它是封装成类的,能方便扩展继承。vc6.0到vs2017都能使用,而且非常简单。
High-speed Charting Control--MFC绘制图表(折线图、饼图、柱形图)控件 - xuanyuanlei1020的专栏 - CSDN博客 https://blog.csdn.net/xuanyuanlei1020/article/details/53487107
high-speed控件绘制
推荐算法
一、基于用户的协作型过滤:
求出所有用户与目标用户的相似度,该相似度类似于权值,相似度越高,权值越高,说明该用户对目标用户的影响越大。使用用户权值*用户物品评分,最后统计物品的和(这里还可以做一个缩放 每件物品和/权值和)。得到每件物品推荐给用户的评分。这个评分是所有用户的加权评分和。权值是通过相似度函数求得(欧几里德距离、皮尔逊相关系数)。如下图:
用户
问题:一个人可能存在极端偏好
二、基于物品的协作型过滤:
物品型过滤和用户型过滤很相似,就是将用户型过滤的用户和物品做一个调换。把物品当作用户,求每个物品最相近的物品。这样如果有新用户需要推荐,我们只需要将该用户评分过的物品中选出前面几个,然后找与这些物品相似度高的推荐就行。
好处:由于物品相似度受到已有数据的影响已经比较稳定了,所以我们不用时时更新物品之间相似度的关系。可以每隔一小段时间求一次,并且这个数据的计算是可以独立出来运算的。那么我们在推荐时可以直接利用算出来的数据,这样推荐速度更快。
小结:两种方法运算很相似,可以使用一个简单的函数就将用户型过滤变为物品型过滤。后者可以在大量数据集的情况下,提前将推荐数据独立运算出来,提高推荐速度。当然这也要视数据的稀疏情况而定。
SVD:矩阵分解在协同过滤推荐算法中的应用 - 刘建平Pinard - 博客园 https://www.cnblogs.com/pinard/p/6351319.html
Python Numpy Tutorial http://cs231n.github.io/python-numpy-tutorial/
思路
过程
初始化,输入字典,输出 7*6 列表
step1
梯度下降,得到分解矩阵 P 和 Q
step2
根据P和Q得到预测矩阵,排序,进行推荐
recommend
loss