呆板学习·L3W2-协同过滤

[复制链接]
发表于 2026-2-9 22:07:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
保举算法

保举算法可以猜测用户评分,并根据评分保举数据
保举算法与其他猜测算法的区别在于:保举算法中的数据大多都不完备,用户只对几个影戏评分;而猜测算法则要求数据完备,便于拟合和猜测
协同过滤

评分矩阵Y,左侧索引是名称,栏目是用户名
协同过滤的根本原理就是利用已有的评分数据,对未有的评分数据举行猜测,根据评分巨细保举给用户

本质上用的算法照旧线性回归那套
盘算公式

J(x(0),...,x(nm−1),w(0),b(0),...,w(nu−1),b(nu−1))=[12∑(i,j):r(i,j)=1(w(j)⋅x(i)+b(j)−y(i,j))2]+[λ2∑j=0nu−1∑k=0n−1(wk(j))2+λ2∑i=0nm−1∑k=0n−1(xk(i))2]⏟regularizationJ({\mathbf{x}^{(0)},...,\mathbf{x}^{(n_m-1)},\mathbf{w}^{(0)},b^{(0)},...,\mathbf{w}^{(n_u-1)},b^{(n_u-1)}})= \left[ \frac{1}{2}\sum_{(i,j):r(i,j)=1}(\mathbf{w}^{(j)} \cdot \mathbf{x}^{(i)} + b^{(j)} - y^{(i,j)})^2 \right]+ \underbrace{\left[\frac{\lambda}{2}\sum_{j=0}^{n_u-1}\sum_{k=0}^{n-1}(\mathbf{w}^{(j)}_k)^2+ \frac{\lambda}{2}\sum_{i=0}^{n_m-1}\sum_{k=0}^{n-1}(\mathbf{x}_k^{(i)})^2\right]}_{regularization}J(x(0),...,x(nm​−1),w(0),b(0),...,w(nu​−1),b(nu​−1))=​21​(i,j):r(i,j)=1∑​(w(j)⋅x(i)+b(j)−y(i,j))2​+regularization[2λ​j=0∑nu​−1​k=0∑n−1​(wk(j)​)2+2λ​i=0∑nm​−1​k=0∑n−1​(xk(i)​)2]​​
The first summation in (1) is “for all iii, jjj where r(i,j)r(i,j)r(i,j) equals 111” and could be written:
=[12∑j=0nu−1∑i=0nm−1r(i,j)∗(w(j)⋅x(i)+b(j)−y(i,j))2]+regularization= \left[ \frac{1}{2}\sum_{j=0}^{n_u-1} \sum_{i=0}^{n_m-1}r(i,j)*(\mathbf{w}^{(j)} \cdot \mathbf{x}^{(i)} + b^{(j)} - y^{(i,j)})^2 \right]+\text{regularization}=[21​j=0∑nu​−1​i=0∑nm​−1​r(i,j)∗(w(j)⋅x(i)+b(j)−y(i,j))2]+regularization
代码

本质上就是一个矩阵的运算,利用np.sum()化简代码
自界说盘算函数cofi_cost_func_v
  1. def cofi_cost_func_v(X, W, b, Y, R, lambda_):
  2.     """
  3.     Returns the cost for the content-based filtering
  4.     Vectorized for speed. Uses tensorflow operations to be compatible with custom training loop.
  5.     Args:
  6.       X (ndarray (num_movies,num_features)): matrix of item features
  7.       W (ndarray (num_users,num_features)) : matrix of user parameters
  8.       b (ndarray (1, num_users)            : vector of user parameters
  9.       Y (ndarray (num_movies,num_users)    : matrix of user ratings of movies
  10.       R (ndarray (num_movies,num_users)    : matrix, where R(i, j) = 1 if the i-th movies was rated by the j-th user
  11.       lambda_ (float): regularization parameter
  12.     Returns:
  13.       J (float) : Cost
  14.     """
  15.     j = (tf.linalg.matmul(X, tf.transpose(W)) + b - Y)*R
  16.     J = 0.5 * tf.reduce_sum(j**2) + (lambda_/2) * (tf.reduce_sum(X**2) + tf.reduce_sum(W**2))
  17.     return J
复制代码
利用tensorflow求导
  1. iterations = 200
  2. lambda_ = 1
  3. for iter in range(iterations):
  4.     with tf.GradientTape() as tape:
  5.         cost_value = cofi_cost_func_v(X, W, b, Y, R, lambda_)
  6.     grads = tape.gradient( cost_value, [X,W,b] )
  7.     optimizer.apply_gradients( zip(grads, [X,W,b]) )
  8.     if iter % 5 == 0:
  9.         print(f"Training loss at iteration {iter}: {cost_value:0.1f}")
复制代码
猜测变量

猜测二进制变量

原来的f(w,b,x)→f=sigmoid(z)f(w,b,x)\to f=sigmoid(z)f(w,b,x)→f=sigmoid(z)函数
丧失函数改为交错熵即可!

本事:匀称值正常化

模子评估


  • 不得当冷启动题目
  • 必要额外的信息,很难表明这些额外的信息的寄义
  • 梯度降落速率极慢,参数太多

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表