马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
保举算法
保举算法可以猜测用户评分,并根据评分保举数据
保举算法与其他猜测算法的区别在于:保举算法中的数据大多都不完备,用户只对几个影戏评分;而猜测算法则要求数据完备,便于拟合和猜测
协同过滤
评分矩阵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−1k=0∑n−1(wk(j))2+2λi=0∑nm−1k=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}=[21j=0∑nu−1i=0∑nm−1r(i,j)∗(w(j)⋅x(i)+b(j)−y(i,j))2]+regularization
代码
本质上就是一个矩阵的运算,利用np.sum()化简代码
自界说盘算函数cofi_cost_func_v- def cofi_cost_func_v(X, W, b, Y, R, lambda_):
- """
- Returns the cost for the content-based filtering
- Vectorized for speed. Uses tensorflow operations to be compatible with custom training loop.
- Args:
- X (ndarray (num_movies,num_features)): matrix of item features
- W (ndarray (num_users,num_features)) : matrix of user parameters
- b (ndarray (1, num_users) : vector of user parameters
- Y (ndarray (num_movies,num_users) : matrix of user ratings of movies
- R (ndarray (num_movies,num_users) : matrix, where R(i, j) = 1 if the i-th movies was rated by the j-th user
- lambda_ (float): regularization parameter
- Returns:
- J (float) : Cost
- """
- j = (tf.linalg.matmul(X, tf.transpose(W)) + b - Y)*R
- J = 0.5 * tf.reduce_sum(j**2) + (lambda_/2) * (tf.reduce_sum(X**2) + tf.reduce_sum(W**2))
- return J
复制代码 利用tensorflow求导- iterations = 200
- lambda_ = 1
- for iter in range(iterations):
- with tf.GradientTape() as tape:
- cost_value = cofi_cost_func_v(X, W, b, Y, R, lambda_)
- grads = tape.gradient( cost_value, [X,W,b] )
- optimizer.apply_gradients( zip(grads, [X,W,b]) )
- if iter % 5 == 0:
- 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)函数
丧失函数改为交错熵即可!
本事:匀称值正常化
模子评估
- 不得当冷启动题目
- 必要额外的信息,很难表明这些额外的信息的寄义
- 梯度降落速率极慢,参数太多
|