吴恩达机器学习笔记

吴恩达机器学习

监督学习

分类问题
回归问题(线性回归/单变量线性回归)

无监督学习

聚类算法
鸡尾酒会算法

符号含义

m 训练样本的数量
n 特征量的数目
x 输入变量/特征
y 输出变量
(x,y) 一个训练样本
(x(i),y(i)) 第i个训练样本
x(i) 第i个训练样本

xj(i) 第i个训练样本的第j个特征量的值

h 假设函数
θi 模型参数

线性回归模型

假设函数

hθ(x) = θ0 + θ1x

模型参数

θ0,θ1

代价函数/平方误差函数

J(θ01) = 1/2m · ∑(hθ(x(i))-y(i))2

目标函数

minimize(θ01) J(θ01)

梯度下降法的定义

反复做这一步,直到收敛。更新参数θj
:= 赋值
= 真假判断
α 学习效率,用来控制梯度下降时,我们迈出多大的步子。控制我们以多大的幅度来更新参数θj

θj := θj - α·∂J(θ01)/∂θj (for j = 0 and j = 1)

同步更新。同时更新θ0和θ1,以上式子拆分如下:

temp0 := θ0 - α·∂J(θ01)/∂θ0
temp1 := θ1 - α·∂J(θ01)/∂θ1
θ0 = temp0
θ1 = temp1

!! 以下为错误更新方式。非同步更新

temp0 := θ0 - α·∂J(θ01)/∂θ0
θ0 = temp0
temp1 := θ1 - α·∂J(θ01)/∂θ1
θ1 = temp1

回归的梯度下降法

梯度下降法

θj := θj - α·∂J(θ01)/∂θj (for j = 0 and j = 1)

线性回归代价函数

J(θ01) = 1/2m · ∑(hθ(x(i))-y(i))2

结合 ---> 回归的梯度下降法

θ0 := θ0 - α/m·∑(hθ(x(i))-y(i))

θ1 := θ0 - α/m·∑(hθ(x(i))-y(i))·x(i)

正规方程组方法

多元线性回归

假设函数
hθ = θ0 + θ1x1 + θ2x2 + ... + θnxn
hθ = θ0x0 + θ1x1 + θ2x2 + ... + θnxn (x0 = 1)

x = [x0 x1 x2 ... xn]T
θ = [θ0 θ1 θ2 ... θn]T
hθ(x) = θTx

特征缩放

为了梯度下降更快,避免等高线畸形太严重,尽量为圆形。
特征缩放的目的是将特征的取值约束到-1到+1的范围内,-1<=xi<=1
如果一个特征在 -3到+3的范围内,这个范围是可以接收的
-1/3到+1/3还可以接受

均值归一化

举例:
xi卧室有1~5间卧室不等,平均每个xi占有2间,x2拥有#bedrooms间,则:
x2 = (#bedrooms -2 )/5
(x1 - u1) / s1
u1是训练集中特征x1的平均值
s1是该特征值的范围(标准差)

自动收敛测试

J(θ)如果一步迭代减小的数值小于ε,就判断函数已收敛。ε可以看作为10-3

学习率太小,收敛太慢,
学习率太大,有可能出现震荡收敛,或者发散

多项式回归

正规方程法

J(θ) = aθ2 + bθ + c

Octave

disp(a) 打印a
disp(sprintf('2 decimals:%0.2f',a))
format long 让字符串显示默认的位数
format short 让字符串显示较少的位数
A = [1 2;3 4;5 6] 3行2列的矩阵A
V = 1:0.1:2 1行11列的矩阵
V = 1:6 1行6列的矩阵
ones(2,3) 2行3列元素为1的矩阵
zeros(2,3) 2行3列元素为0的矩阵
2ones(2,3) 2行3列元素为2的矩阵
rand(1,3) 1行3列的元素为0-1的随机矩阵
rand(3) 3x3随机矩阵
randn(1,3) 3个元素服从高斯分布;均值为0;标准差或方差为1
w = -6 + sqrt(10) * randn(1,10000) 1个有10000个元素的向量,均值为6,方差为10,标准差是根号10
hist(w) 绘制w的直方图
hist(w,50) 绘制50个直方图
eye(4) 生成4x4单位矩阵
help eye 帮助
size(w) 返回行和列,1行2列
size(w,1) 返回行
size(w,2) 返回列
length(A) 最大维度的大小
pwd 打印当前路径
cd ‘C:\Users\11306\Desktop’ 切换路径到桌面
load filename/load('filename') 加载文件
who 显示所有变量
whos 显示所有变量更详细信息
clear x 删除x变量
clear 删除工作空间的所有变量
save hello.mat v 将v变量存储至文件hello.mat
save hello.txt v -ascii 存储为ascii形式
A(3,2) 返回A中索引为3,2的数值
A([1 3]😅 返回第1,3行元素
A(😃 把所有元素放入一个列向量
C = [A B] 合并,B在右侧C = [A , B]
C = [A ; B] 合并,B在下侧
A
B 矩阵相乘
A .* B 点乘,对应元素相乘
A .^ 2 每个元素平方
1 ./ A A中每个元素求倒数
log(A) A中每个元素求对数运算
exp(A) A中每个元素以e为底的幂运算
abs(A) 绝对值
-A 乘-1
A + ones(length(A),1) 将A中每个元素+1 ;A+1
A' A的转置
max(A) 返回每列最大元素
[val,ind] = max(A) 返回每列最大元素和所引值
A < 5 返回每个元素的0/1
find(A < 5) 返回序号;序号是从上向下,从左向右数过来的
[r,c] = find(A < 5) r存储行的索引,c存储列的索引
sum(A) 列求和
prod(A) 列求积
floor(A) 向下取整
ceil(A) 向上取整
magic(3) 幻方
max(rand(3),rand(3)) 相同索引位置取较大值组成3x3矩阵
max(A,[],1) 返回每列最大值;1代表从第1维度取值
max(A,[],2) 返回每列最大值;1代表从第2维度取值
max(max(A)) A中最大值;max(A(😃)
flipud(A) 矩阵A垂直翻转
pinv(A) A的逆矩阵

数据绘制

demo
t=[0:0.01:0.98];
y1 = sin(2pi4t);
plot(t,y1);
y2 = cos(2
pi4t);
hold on;
plot(t,y2,'r');
xlabel('time');
ylabel('value');
legend('sin','cos') %右上角线条标注
title('my plot')
print -dpng 'myplot.png' %保存图像
close

figure(1);plot(t,y1);	%为图像标号,打开多个图像
figure(2);plot(t,y2);

subplot(1,2,1);		%将图像框分成一个1x2的格子,现在使用第一个格子
plot(t,y1);
subplot(1,2,2);
plot(t,y2);

axis([0.5 1 -1 1])		%x刻度范围0.5-1,y刻度范围-1~1
clf						%清除一幅图像

imagesc(magic(3))		%画一幅3x3表格图像
imagesc(magic(3)),colorbar,colormap gray	

for

v = zeros(10,1);
for i = 1:10,
	v(i) = 2^i;
end;

indices = 1:10;
for i = indices,
	disp(i);
end;

while

i = 1;
while i <= 5,
	v(i) = 100;
	i = i + 1;
end;

i = 1;
while true,
	v(i) = 999;
	i = i + 1;
	if i == 6,
		break;
	end;
end;

if

if a == b,
	pass;
elseif a == c,
	pass;
else
	pass;
end;

func

filename: func.m
文件内容

function y = func(x)	
	y = x^2;

函数返回多个值

function [y1,y2] = func(x)	
	y1 = x^2;
	y2 = x^3;

添加路径

addpath('C:\Users\11306\Desktop')

K-means

1.簇分配
2.移动聚类中心
posted @ 2018-11-18 13:45  春雨冰河  阅读(276)  评论(0编辑  收藏  举报