吴恩达机器学习笔记
文章目录
基础概览
当前分类
- 监督学习 supervised
- 回归 regression
- 分类 classification
- 非监督学习unsupervised
- cluster
- 强化学习 reinforcement
- recommender systems
基本模型
- 假设函数
- 欲求参数
- 代价函数:常用的这个叫 square error cost function
- 目标:通过逐步确定参数,使得代价最小

=================================================
怎么确定参数呢?
确定参数方法1 梯度下降法
gradient descent : 适合大多数情况

- alpha 是 学习率,就是逐步靠近代价函数最小值时,那个”逐步“的步子长度。
- 注意两种编程 求参数的方法,右边那个是错的。

确定参数方法2 正规方程法
normal equation
既然是求代价函数的最小值,求导为0就好啊!
- 中间要求矩阵的逆,不适合特征值太多的情况,一般大于10000特征值,就不能用这个。
- 不需要特征放缩之类的。
推导过程省略,最优参数求解方程如下

多元线性回归
线性回归 = 平方差代价函数 + 梯度下降
多元线性回归的模型


先看我 : 一些技巧
feature scaling 特征放缩
x1 = size 范围是0-2000
x2 = num 范围是0-5
这种情况下画的图是 瘦长 的,回归可能很慢
可以这样处理
x1 = x1/2000
x2 = x2/5
mean normalization 均值归一
x1 = size 范围是0-2000
x2 = num 范围是0-5
减去均值,再除以总数
x1 = (x1 - mean(x1))/2000
x2 = (x2 - mean(x2))/5
然后再处理
确保学习率alpha
- 太大,就会震荡,甚至发散
- 太小,收敛速度太慢
octave操作
系统命令
| 代码 | 功能 |
|---|---|
| ps1(‘>> ’) | 更改命令行提示符 |
| disp() | disp(pi) :显示一个东西 |
| format long/short | 定义全局显示方式,默认是short |
| pwd | 当前所在目录 |
| cd | 切换目录 |
| ls | 看看当前目录有啥 |
| who | 当前内存中的变量 |
| whos | 查看内存中变量的详细信息 |
| clear | 清空内存中所有变量 |
| load | load aa.txt , aa = load(‘aa.txt’),加载文件 |
| save | save xxx.mat V :把矩阵V保存到xxx.mat,使用二进制格式。 |
| save | save xxx.txt V --ascii :把矩阵V保存到xxx.txt,人类可直接阅读 |
| addpath(‘c:\users’) | 添加搜索路径 |
运算符
| 代码 | 功能 |
|---|---|
| + - * / | 四则运算 |
| ^ | 2^4 == 16 |
| == | 判断是否相等 |
| ~= | 判断是否不等 |
| && || | 与 或 |
| xor() | 异或 |
矩阵命令
| 代码 | 功能 |
|---|---|
| ones(2,3) | 2x3 的矩阵, 全是1 |
| zeros(2,3) | 2x3 的矩阵, 全是0 |
| rand(2,3) | 2x3 的矩阵, 0-1之间的随机数 |
| randn(2,3) | 2x3 的矩阵, 0-1之间正态分布的随机数 |
| size() | 查看 行x列 |
| size(A,1) | 查看第一维度,也就是行数 |
| size(A,2) | 查看第二维度,也就是列数 |
| length([向量V]) | 长度 |
| magic(8) | 生成一个8x8的魔幻方阵,魔幻方阵的行列对角之和 均相等。 |
| * | A*B表示 矩阵乘法 |
| .* | .表示对应的每个元素,A.*B表示 对应元素相乘 |
| A,^2 | 矩阵每个元素都都平方 |
| 1./A | 矩阵每个元素都倒数 |
| log() | 求log |
| exp(n) | 求e^n |
| abs() | 绝对值 |
| A’ | 求转置 |
| pinv(A) | 求逆 |
| max(A) | 每列的最大值,和max(A,[],1) 效果一样 |
| max(A,[],2) | 每行的最大值 |
| sum() | sum(A,1)表示按列求和,sum(A,2)表示按行求和,默认按列 |
| prod() | prod(A,1)表示按列求积,prod(A,2)表示按行求积,默认按列 |
| floor() | 向上取整 |
| ceil() | 向下取整 |
| [r,c] = find(A>=5);[r,c] | [r,c]会返回每个查找出来的元素的索引 |
| flipud() | 矩阵垂直翻转 |
for example:
求对角线之和:sum(sum(A.*eye(5)))
求副对角线之和:sum(sum(flipud(eye(5))))
绘图函数
| 代码 | 功能 |
|---|---|
| plot(x,y) | 绘制曲线 |
| hist(object,hist_num) | hist(randn(1,1000),100) : 用一百个hist绘图正态分布 |
| subplot(1,2,1) | 创建1x2的图像,使用第一个 |
| figure(n) | 画出一张图,编号为n |
| imagesc(V);colorbar;colormap grey; | 方块灰度图像 |
| title | 设置标题 |
| xlabel(‘xx’) | 设置x轴文字 |
| ylabel(‘yy’) | 设置Y轴文字 |
| legend(‘tips’) | 给每个图形打上标签 |
| axis([0 1 -1 1]) | 制定x轴范围是(0,1),y轴的范围是(-1,1) |
| print -dpng ‘mytest.png’ | 在当前目录生成图像 |
| close | 关闭所有图像 |
for example:
常常把一些列操作放在一行,直接处理好一张图片
逗号和分好都能用。分号会屏蔽即时显示。
plot(xxxx);hold on;plot(yyyy); %把两张图绘到一起
figure(1),plot(x,y),legend('hello')
玩耍矩阵
移动数据
# 矩阵基本操作
行内用 空格或者逗号 隔开,行间用;隔开
A = [1 2 ; 3 6 ; 87 14]
取出第二列
A = [:,2]
第三行第一个
A(3)
第三行
A(3,:)
第一行 和 第三行
A([1,3],:)
修改第二列
A(:,2) = [10,11,12]
加行
A = [A;[3,4]]
加列
A = [A,[12,54,6]]
合并两个矩阵
C = [A,B]
C = [A;B]
控制语句(if for while 函数)
if for while
for i=1:10; disp(i); end;
if V(1)==1; xxx;
elseif v(2)==2; xxxx;
else xxxx;
end;
while true; xxxx; end;
函数
octave函数得写到文件里面
比如想要一个名为 two_test() 的函数,
-
建立一个文件,名为 two_test.m
-
写入如下
function [y1,y2] = two_test(x); y1 = x^2 y2 = x^3 -
addpath 或者 cd到函数文件的目录 ,直接使用函数。
这篇博客是吴恩达机器学习课程的基础概览,涵盖了监督学习的回归和分类,以及非监督学习和强化学习。文章详细讲解了基本模型的假设函数和代价函数,并重点介绍了两种确定参数的方法:梯度下降法和正规方程法。梯度下降通常适用于大多数情况,而正规方程法在特征值过多时效率较低。此外,还提到了特征放缩、学习率调整等实际操作技巧以及Octave编程中的一些基本操作和函数定义。
5653

被折叠的 条评论
为什么被折叠?



