吴恩达机器学习笔记 001

吴恩达机器学习笔记

文章目录

  • 吴恩达机器学习笔记
    • 基础概览
      • 当前分类
      • 基本模型
      • 确定参数方法1 梯度下降法
      • 确定参数方法2 正规方程法
      • 多元线性回归
      • 先看我 : 一些技巧
        • feature scaling 特征放缩
        • mean normalization 均值归一
        • 确保学习率alpha
    • octave操作
      • 系统命令
      • 运算符
      • 矩阵命令
      • 绘图函数
      • 玩耍矩阵
        • 移动数据
      • 控制语句(if for while 函数)
        • if for while
        • 函数

基础概览

当前分类

  1. 监督学习 supervised
    1. 回归 regression
    2. 分类 classification
  2. 非监督学习unsupervised
    1. cluster
  3. 强化学习 reinforcement
  4. 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() 的函数,

  1. 建立一个文件,名为 two_test.m

  2. 写入如下

    function [y1,y2] = two_test(x);
    y1 = x^2
    y2 = x^3
    
  3. addpath 或者 cd到函数文件的目录 ,直接使用函数。

你可能感兴趣的:(通向人工智能)