CS229 老版作业1

课程视频地址:http://open.163.com/special/opencourse/machinelearning.html

课程主页:http://cs229.stanford.edu/

更具体的资料链接:https://www.jianshu.com/p/0a6ef31ff77a

作业地址:https://github.com/Doraemonzzz/CS229

参考资料:https://github.com/zyxue/stanford-cs229

这部分回顾老版作业1。

1. Newton’s method for computing least squares

(a)因为

所以

注意到

所以

(b)牛顿法的规则为

$\theta$的初始值为$0$,所以此时

所以第一步更新后

2.Locally-weighted logistic regression

(a)首先推导题目中给出的梯度计算式,注意到

所以

从而

定义$z\in \mathbb R^m$

那么

接着计算Hessian矩阵,首先求偏导数

记$D\in \mathbb R^{m\times m}$为对角阵,其中

那么

代码见(b)

(b)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# -*- coding: utf-8 -*-
"""
Created on Mon Jan 28 16:12:53 2019

@author: qinzhen
"""
import numpy as np
import matplotlib.pyplot as plt

Lambda = 0.0001
threshold = 1e-6

#读取数据
def load_data():
X = np.loadtxt('data/x.dat')
y = np.loadtxt('data/y.dat')

return X, y

#定义h(theta, X)
def h(theta, X):
return 1 / (1 + np.exp(- X.dot(theta)))

#计算
def lwlr(X_train, y_train, x, tau):
#记录数据维度
m, d = X_train.shape
#初始化
theta = np.zeros(d)
#计算权重
norm = np.sum((X_train - x) ** 2, axis=1)
W = np.exp(- norm / (2 * tau ** 2))
#初始化梯度
g = np.ones(d)

while np.linalg.norm(g) > threshold:
#计算h(theta, X)
h_X = h(theta, X_train)
#梯度
z = W * (y_train - h_X)
g = X_train.T.dot(z) - Lambda * theta
#Hessian矩阵
D = - np.diag(W * h_X * (1 - h_X))
H = X_train.T.dot(D).dot(X_train) - Lambda * np.eye(d)

#更新
theta -= np.linalg.inv(H).dot(g)

ans = (theta.dot(x) > 0).astype(np.float64)
return ans

#作图
def plot_lwlr(X, y, tau):
x_min, x_max = X[:, 0].min() - .1, X[:, 0].max() + .1
y_min, y_max = X[:, 1].min() - .1, X[:, 1].max() + .1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.01),
np.arange(y_min, y_max, 0.01))
d = xx.ravel().shape[0]
Z = np.zeros(d)
data = np.c_[xx.ravel(), yy.ravel()]

for i in range(d):
x = data[i, :]
Z[i] = lwlr(X, y, x, tau)

plt.pcolormesh(xx, yy, Z, cmap=plt.cm.Paired)
X0 = X[y == 0]
X1 = X[y == 1]
plt.scatter(X0[:, 0], X0[:, 1], marker='x')
plt.scatter(X1[:, 0], X1[:, 1], marker='o')
plt.title("tau="+str(tau))
plt.show()

Tau = [0.01, 0.05, 0.1, 0.5, 1, 5]
X, y = load_data()
for tau in Tau:
plot_lwlr(X, y, tau)

参数$\tau$越大,边界越平滑,如果是unweighted的形式,相当于$\tau \to \infty$,所以可以推断出unweighted的边界类似于$\tau =5$时的情形。

备注:这里和标准答案的图不一样是因为答案中的代码为$\tau $,实际应该是$\tau^2$

3.Multivariate least squares

(a)注意到

所以

(b)

注意到

所以

令上式为$0$可得

(c)如果化为$p$个独立的最小二乘问题,则

其中$Y_{:, j}$为$Y$的第$j$列,从而

4.Naive Bayes

(a)不难看出

所以

(b)先关于$\phi_{j|y=k}$求梯度

令上式为$0$可得

从而

关于$\phi_{y}$求梯度可得

令上式为$0$可得

(c)

所以

所以

等价于

所以

等价于

5.Exponential family and the geometric distribution

(a)

所以

化简可得

综上

(b)

(c)由(b)可得

带入

可得

这里

所以对数似然函数为

关于$\theta_j$求偏导可得

所以

所以随机梯度上升的更新规则为

本文标题:CS229 老版作业1

文章作者:Doraemonzzz

发布时间:2019年03月01日 - 17:55:00

最后更新:2019年10月12日 - 16:42:55

原始链接:http://doraemonzzz.com/2019/03/01/CS229 老版作业1/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。