Second week of machine learning on Coursera

Second week of machine learning on Coursera

@(Coursera)


Multivariate Linear Regression

当线性模型的特征从一个变量到多个变量时,引出了本节的多元线性回归。

Size number of bedrooms number of floors age of home price
2104 5 1 45 460
1416 3 2 40 232
1534 3 2 40 232
852 2 1 36 178

标注:
- m表示数据集的个数:m=4;
- n表示特征的个数:n=4;
- x(i)表示训练集第i个样本:

x(2)=14163240

- x(i)j 表示第i个样本中第j个特征的值:x(2)3=2


相应的,我们的假设函数从hθ(x)=θ0+θ1x变为:

hθ(x)=θ0+θ1x1+θ2x2+θ3x3+......+θnxn

为了方便矩阵计算,这里假定hθ(x)θ0x0x0=1.
x0(i)=1表示训练集中每行样本中第”0”个特征为1.
此时:
X⃗ =x0x1x2x3xnRn+1

X⃗ :(n+1)m
θ=θ0θ1θ2θ3θnRn+1

θ:(n+1)1
此时:hθ(x)=θTX:(1(n+1))×((n+1)m)>1m
得到的是1行,m列元素,每列元素分别对应着训练集中每行样本的y值。


Gradient Descent for Multiple Variables

Hypothesis:hθ(x)=θTx=θ0x0+θ1x1+...+θnxn
Parameters:θ0,θ1,...,θn
Cost function:

J(θ0,θ1,...,θn)=12mi=1m(hθ(x(i))y(i))2
(系数为什么是1/2m可以查看上一篇博客first week coursera)
此时:
θj:θjα1mi=1m(hθ(x(i))y(i))x(i)j,(j=0,..,n)


Feature Scaling(特征缩放)

当特征规模近似的时候,梯度下降法可以更快收敛。
一般采用均值归一化(Mean normalization)方法来缩放特征,将特征缩放到-1~+1这个范围。

x=xxxmax

还有就是归一化到0~+1这个范围:
x=xxminxmaxxmin


learning rate: α

  • 如果α很小,收敛会很慢;
  • 如果α太大,每次迭代后Cost function J(θ)可能不会减小,最终不能收敛。
    实际过程中,可以通过给α设置为0.001,0.01,0.1,1,分别画出J(θ)函数的图,查看收敛情况,来选择更合适的α值。

Polynomial Regression(多项式回归)

我们可以提升特征以及假设函数的形式通过不同的方式,例如,我们可以将特征融合为一个,比如通过将特征1和特征2生成一个特征3。
但是新生成的特征一定要注意特征缩放的问题,新生成的特征值规模可能会很大。


Normal Equation(正规方程)

Second week of machine learning on Coursera
使用正规方程来直接求解θ=(XTX)1XTy
In matlab:inv(XX)Xy
正规方程法和梯度下降法对应,是求解最小化J(θ)θ值得另一种方法。

Gradient Descent Normal Equation
需要选择学习速率α 不需要选择α
需要多次迭代 不需要迭代
O(kn2) O(n3)need to calculate (XTX)1
当特征数n很大时考虑(n>10000) 当n<10000时考虑

实际上,正定方程法对于有些方法是不适用的,即当XTX不可逆时,方程法就不能求解了。比如logistic regression,就不能用正定方程法,只能使用梯度下降法。
XTX不可逆的常见原因:
- 存在冗余特征,两个特征密切相关的,比如线性冗余,比如一个特征使用m2表示面积,另一个特征使用feet2表示面积,这两个特征就是冗余了;
- 当矩阵X的行数m<列数n时,XTX是不可逆的。而m代表训练集的个数,n代表特征个数。所以当不能正定方程法,尝试使用正则化剔除一些特征,减小特征个数n


Matlab/Octave 常用命令

pwd:显示当前路径,cd和ls可以改变路径;
load feature.dat和load target.dat导入特征和目标数据集;
who or whos:显示当前工作空间中的变量;
save hello.mat v:将变量v存在hello.mat文件中;
save hello.txt v -ascii:将变量v存在hello.txt文件中;
A(:):将矩阵A中所有元素放入到一个向量中。
magic(n):1+2+3+...+n2n,n3
**[r,c]=find(A>=7):**r,c分别对应矩阵A中>=7元素的行列标号。

A=834159672

r=132

A=123

A(1,2)=8;A(3,2)=9;A(2,3)=7

plot(x,y);hold on保持原图存在
xlabel(‘x’),ylabel(‘y’),legend(‘cos’,’sin’),title(‘my plot)’,print dpng ‘myplot.png’打印为图片,close关闭


hθ(x)=j=0nθjxj=θTx

θ⃗ =θ0θ1θ2θn

X⃗ =x0x1xn

此时,计算hθ(x)的值,在MATLAB中一步就可以了:θx