低秩矩阵分解(low-rank matrix factorization)

何为低秩矩阵(low-rank matrix)

我们先来回忆下矩阵的秩。举个简单的例子:
{   2 x + 3 y + z = 10   3 x + y + z = 7   6 x + 2 y + 2 z = 14 \begin{cases} \ 2x+3y+z=10\\ \ 3x+y+z=7\\ \ 6x+2y+2z=14 \end{cases}  2x+3y+z=10 3x+y+z=7 6x+2y+2z=14
对于上面的线性方程组,方程1和方程2有不同的解,而方程2和方程3的解完全相同。我们可以说方程3是多余的,因为它没有带来有用的信息,把它去掉对解方程组没影响。从方程组中去掉多余的方程,自然就导出了“矩阵的秩”这一概念。

还记得徒手求矩阵的秩吗?我们先通过矩阵初等变换将矩阵A化为阶梯型矩阵,若该阶梯型矩阵有r个非零行,那矩阵A的秩rank(A)就等于r。矩阵的秩度量的其实就是矩阵的行列之间的相关性。如果矩阵的各行或列是线性无关的,那么矩阵就是满秩的,也就是秩等于行数。

让我们回到上面线性方程组,因为线性方程组可以用矩阵描述,所以秩就表示有多少个有用的方程。上面的方程组实际上只有2个是有用的,方程3是多余的,因此对应的矩阵的秩就是2。

既然秩可以度量相关性,而矩阵的相关性实际上就表示矩阵的结构信息。如果矩阵之间各行的相关性很强,那么就表示这个矩阵实际可以投影到更低维的线性子空间,也就是用几个向量就可以完全表达,那么它就是低秩的。

Summary:如果矩阵表达的是结构性信息,例如图像、用户-商品推荐表等等,那么这个矩阵各行之间存在这一定的相关性,那这个矩阵一般就是低秩的。

向量化:低秩矩阵分解(low-rank matrix factorization)

我们使用机器学习课程16中推荐系统(recommender system)的例子来说明。
1
将左边表格中的数据写为矩阵形式,即为右边的矩阵Y。因为用户j对电影i的评分预测为
( θ ( j ) ) T x ( i ) (\theta^{(j)})^Tx^{(i)} (θ(j))Tx(i)
则矩阵Y所对应的预测值矩阵如下:
2
我们整理一下x和θ:

  • 10
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
这是一个相对复杂的问题,需要一定的领域知识才能回答。不过,我会尽力回答。 首先,Uplift model是一种机器学习模型,用于预测营销策略的效果。它可以帮助营销人员确定哪些客户应该被针对,以及哪些营销策略会对他们产生最大的影响。 在多个相关响应的情况下,我们可以使用因子分解来构建模型。因子分解是一种流行的矩阵分解技术,可以将大型矩阵分解为更小的矩阵,以便更容易处理和分析。 具体来说,我们可以使用Python中的scikit-learn库来实现Uplift model for multiple correlated responses with Low-Rank factorization。首先,我们需要将数据集分为两组:控制组和干预组。然后,我们可以使用因子分解来拟合每个组的数据,并预测响应变量的值。最后,我们可以计算控制组和干预组之间的差异,以确定干预策略的效果。 以下是代码示例: ```python from sklearn.decomposition import NMF from sklearn.metrics import mean_squared_error # 将数据分为控制组和干预组 X_control, y_control = X[y == 0], y[y == 0] X_treatment, y_treatment = X[y == 1], y[y == 1] # 使用因子分解拟合控制组和干预组的数据 model_control = NMF(n_components=5) model_treatment = NMF(n_components=5) W_control = model_control.fit_transform(X_control) H_control = model_control.components_ W_treatment = model_treatment.fit_transform(X_treatment) H_treatment = model_treatment.components_ # 预测响应变量的值 y_control_pred = W_control.dot(H_control) y_treatment_pred = W_treatment.dot(H_treatment) # 计算控制组和干预组之间的差异 uplift = np.mean(y_treatment_pred - y_control_pred) # 输出结果 print('Uplift: %.2f' % uplift) ``` 请注意,这只是一个简单的示例,实际实现可能涉及更多的数据预处理和模型调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值