Machine Learning Week2

Multiple Linear Regression

Posted by yellowDog on 2018-07-13

Multivariate Linear Regression

Multivariate linear regression(多元线性回归)

hypothesis function

  其中x0 = 1

  数据在多特征数据集中的表示方法


Gradient Descent For Multiple Variables

注意和一元线性回归中的梯度下降联系,区别不大

Feature Scaling(特征放缩)

Get every feature into approximately a (-1,1) range

放缩变量 -> 从代价函数 J 的图像中更容易得到全局最小值

更一般的公式:

$\mu$ average of all the values for feature (i) and $s_{ i }$
​ is the range of values (max - min)


choose learning rate

  • Debugging gradient descent

    作出以 x 轴为更新步数,y 为 min(J(θ))的图像

  • 图像上升 => 减小学习效率

  • Declare convergence if J(θ) decreases by less than E in one iteration, where E is some small value such as 10^(-3). However in practice it’s difficult to choose this threshold value.

learning rate

  • too small => slow convergence(收敛很慢)

  • too large => may not decrease on every iteration and thus may not converge(可能不会收敛)


Polynomial Regression(多项式回归)

选择合适的特征值 => 得到更好的回归模型

多项式函数取代线性回归函数 => 模型和数据的拟合

有平方和立方的时候不要忘了 feature scaling(放缩)


Normal Equation(正规方程)

直接算出最优的 θ 值,不需要用梯度下降算法,直接一步得到假设方程

Gradient Descent VS Normal Equation

Gradient Descent:

  • 需要选择学习效率

  • 需要很多步迭代

  • 特征很多的时候(>10000),运行的很好

Normal Equation:

  • 不需要选择学习效率,画出代价函数的图像

  • 特征很多的时候,逆矩阵会算的很慢


什么时候转置矩阵*矩阵会不可逆
  • Redundant Features(linearly dependent)

      检查是否有多余的特征可以删除, 计算线性代数特征值的时候可以判断矩阵不可逆

  • 太多的特征值

      删除一些特征值或者删除更多


使用Octave

1
2
3
4
5
6
7
8
9
10
11
12
13
~= %not equal
eye(n) %n阶单位矩阵

a = [1 2;3 4;5 6]
a(:,2) = [10;11;12]

a =

1 10
3 11
5 12

: %means every item in rows/columns
element wise operation
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

.位运算

.* 点乘运算 -> 矩阵对应位置进行运算

ones(3,1)

A' transform matrix

a = [1 2 3 4]

b = magic(3) %幻方

max(b,[],1) % 8 9 7 每列的最大值

max(b,[],2) % 8 7 9 每行的最大值

sum(a,1) % 求每列的和

sum(a,2) % 求每行的和

[value,index] = max(a) % value = 4 index = 4

a < 3 % 1 1 0 0

find(a < 3) % 1 3 4

sum(a) % 10

prod(a) % 24

floor(), ceil()
找出矩阵中的最大值
1
2
3
max(max(a))

max(a(:)) %矩阵变成向量
求对角线和副对角线元素的和
1
2
3
4
5
sum(sum(a .* eye(n)))

sum(sum(a .* flipud(eye(n))))

flipud %翻转

plotting data(绘制数据图形)

1
2
3
4
5
6
7
8
9
10
t = [0:0.01:0.98]
y1 = sin(2 * pi * 4 * t)
y2 = cos(2 * pi * 4 * t)
plot(t,y1)
hold on; %新图不会覆盖旧图
plot(t,y2)
xlabel('time') %定义x轴
ylabel('value') %定义y轴
legend('sin','cos') %标注区分图像
title('plotting hhh')

  • subplot分割图像
1
2
3
4
subplot(1,2,1)
plot(t,y1)
subplot(1,2,2)
plot(t,y2)

  • axis改变坐标轴刻度

  • 可视化

1
imagesc(magic(15)), colorbar, colormap