Skip to content

Commit c47fbb0

Browse files
committed
blas renew
1 parent 75946fd commit c47fbb0

File tree

2 files changed

+27
-28
lines changed

2 files changed

+27
-28
lines changed

_posts/2013-06-29-open-blas-r.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,4 +62,5 @@ OpenBLAS 环境安装完毕后,即可安装 R 环境,同一般安装 R 类
6262

6363

6464
-------------
65+
6566
注意:还未仔细尝试其兼容性,请酌情使用

_posts/2013-07-07-gradient-descent.md

Lines changed: 26 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -9,84 +9,82 @@ type: post
99
published: false
1010
---
1111

12-
13-
数据
12+
数据
1413

1514
1 1 7.97
1615
2 1 10.2
1716
3 1 14.2
1817
4 1 16.0
1918
5 1 21.2
2019

21-
脚本:
20+
脚本:
2221

2322
A <- x[,1:2]
2423
b <- x[,3]
2524
C <- t(A) %*% A
2625
solve(C, t(A)%*%b)
2726

28-
必须将矩阵转化为方阵才能进行solve,结果同
27+
必须将矩阵转化为方阵才能进行solve,结果同
2928

3029
lm(b ~ A)
3130

32-
33-
A <- read.csv(textConnection("
34-
3 2 4 0 0 0 0
35-
1 0 1 0 0 0 0
36-
0 1 2 0 0 0 0
37-
0 0 0 1 1 1 1
38-
0 0 0 1 0 1 1
39-
0 0 0 3 2 2 3
40-
"), header = FALSE, sep = ' ')
31+
A <- read.csv(textConnection("
32+
3 2 4 0 0 0 0
33+
1 0 1 0 0 0 0
34+
0 1 2 0 0 0 0
35+
0 0 0 1 1 1 1
36+
0 0 0 1 0 1 1
37+
0 0 0 3 2 2 3
38+
"), header = FALSE, sep = ' ')
4139

4240

43-
北京京东世纪贸易有限公司
41+
北京京东世纪贸易有限公司
4442

4543
http://www.quuxlabs.com/blog/2010/09/matrix-factorization-a-simple-tutorial-and-implementation-in-python/
4644

47-
# 矩阵分解的数学原理
45+
# 矩阵分解的数学原理
4846

49-
首先约定一下符号,对于用户(users)的集合 $$U$$,以及商品的集合 $$D$$,用$$R$$ 来表示用户商品信息的共现($$U \times D $$)矩阵。我们现在想找出 K 个潜在的特征,即:找到两个新矩阵P($$U \times K$$),Q($$D \times K$$),使得:
47+
首先约定一下符号,对于用户(users)的集合 $$U$$,以及商品的集合 $$D$$,用$$R$$ 来表示用户商品信息的共现($$U \times D $$)矩阵。我们现在想找出 K 个潜在的特征,即:找到两个新矩阵P($$U \times K$$),Q($$D \times K$$),使得:
5048

5149
$R = P \times Q^T = \hat{R}$
5250

53-
这时,P包含了所有的用户(U)的相关信息(特征),而Q则包含了商品的相关信息(特征)。那如何找到这两个矩阵呢?
51+
这时,P包含了所有的用户(U)的相关信息(特征),而Q则包含了商品的相关信息(特征)。那如何找到这两个矩阵呢?
5452

55-
其中的一种方法就是梯度下降(gradient descent):首先先给P、Q一些初始值,然后计算R和$$P \times Q$$的差异,接着通过迭代最小化二者的差异。这个差异我们一般用如下的方式表示:
53+
其中的一种方法就是梯度下降(gradient descent):首先先给P、Q一些初始值,然后计算R和$$P \times Q$$的差异,接着通过迭代最小化二者的差异。这个差异我们一般用如下的方式表示:
5654

5755
$e_{ij}^2 = (r_{ij} - \hat{r}_{ij})^2 = (r_{ij} - \sum_{k=1}^K p_{ik} q_{kj})^2$
5856

59-
对于上式,我们必须找到一个方向来优化$$p_{ik},q_{kj}$$。换句话说,我们需要知道当前值的梯度下降方向:
57+
对于上式,我们必须找到一个方向来优化$$p_{ik},q_{kj}$$。换句话说,我们需要知道当前值的梯度下降方向:
6058

6159
$\frac{\partial}{\partial p_{ik} e_{ij}^2} = -2(r_{ij} - \hat{r}_{ij})(q_{kj}) = -2 e_{ij}q_{kj}$
6260

6361
$\frac{\partial}{\partial q_{ik} e_{ij}^2} = -2(r_{ij} - \hat{r}_{ij})(p_{ik}) = -2 e_{ij}p_{ik}$
6462

65-
既然以及找到梯度,那则有
63+
既然以及找到梯度,那则有
6664

6765
$p_{ik}^' = p_{ik} + 2\alpha e_{ij} q_{kj}$
6866

6967
$q_{kj}^' = q_{kj} + 2\alpha e_{ij} p_{ik}$
7068

71-
这里$$\alpha$$ 是一个常数,决定梯度的步长,为了避免越过局部最优值,所以$$\alpha$$一般都是一个很小的数,比如0.0002。
69+
这里$$\alpha$$ 是一个常数,决定梯度的步长,为了避免越过局部最优值,所以$$\alpha$$一般都是一个很小的数,比如0.0002。
7270

73-
另外一个问题有来了:
71+
另外一个问题有来了:
7472

75-
> 如果我们求得的P和Q的乘积同R完全一致,那么未观测的值(表示为零的行为),依旧是零。
73+
> 如果我们求得的P和Q的乘积同R完全一致,那么未观测的值(表示为零的行为),依旧是零。
7674
77-
这里需要澄清一下:`我们只对原始数据不为零的元素求解二者差异,而不是全部的元素。`
75+
这里需要澄清一下:`我们只对原始数据不为零的元素求解二者差异,而不是全部的元素。`
7876

7977

80-
# 规整化 Regularization
78+
# 规整化 Regularization
8179

82-
为了避免过拟合,我们一般会引入Regularization来作为惩罚项,一般是引入一个$$\beta$$来修改误差的平方:
80+
为了避免过拟合,我们一般会引入Regularization来作为惩罚项,一般是引入一个$$\beta$$来修改误差的平方:
8381

8482

8583
$e_{ij}^2 = (r_{ij} - \sum_{k=1}^K p_{ik} q_{kj})^2 + \frac{\beta}{2} \sum_{k=1}^K(||P||^2 + ||Q||^2)$
8684

87-
$$\beta$$用来控制用户特征和商品特征的程度(magnitudes),保证P、Q对R的近似,但不会出现太大的数值。
85+
$$\beta$$用来控制用户特征和商品特征的程度(magnitudes),保证P、Q对R的近似,但不会出现太大的数值。
8886

89-
这样梯度下降的规则就变成了如下:
87+
这样梯度下降的规则就变成了如下:
9088

9189
$p_{ik}^' = p_{ik} + 2\alpha e_{ij} q_{kj} - \beta p_{ik}$
9290

0 commit comments

Comments
 (0)