课程地址:吴恩达机器学习 -- 网易云课堂
本笔记为自用笔记,因此只记录了自己觉得重要的部分,所以不建议想要系统学习的人阅读此笔记。
我们给算法一个数据集,其中包含了正确的答案,目的为给出更多的正确答案
“回归问题”:regression
“分类问题”:classification
只告诉算法这里有一堆数据,让算法自己找出数据中的结构
聚类算法:社交网络分析,市场细分,天文数据分析……
奇异值分解(SVD):鸡尾酒会问题
Octave:建立算法模型,之后迁移到C++或Java等中
训练集 training set
(x,y) 一个训练集的样例
向学习算法提供训练集,学习算法得到一个h(x)——假设函数
决定如何表示这个假设函数
h(x)=w0+w1*x : 一元线性回归,单变量线性回归
h(x)=wo+w1*x
如何选择w0以及w1
希望 (h(x)-y)^2 尽可能地小
J(w0,w1)=1/2m *(求和){h(xi)-yi}^2
也被称为平方误差代价函数
假设函数-参数-代价函数-目标(代价最小)
自动寻找使J最小的w0,w1
思路
以一个初始值(w0,w1)开始
保持改变w0,w1的值使J变小直到我们找到了(局部)最小值
需要同时更新w0,w1……wN,即同步更新
alpha:学习速率,步幅,过小会导致收敛过慢,过大会导致发散,算法运行过程中不需要改变alpha的大小
线性回归的梯度下降
线性回归函数总是一个凸函数,这个函数没有局部最优解,只有全局最优解
Batch梯度下降算法:每一步都遍历了训练集的训练算法
正规方程组法:较小的数据集可以直接算出J的最小值,但是梯度下降依然是大数据量的最优算法
矩阵的维度:行数×列数(rows*cols)
A(i,j):A矩阵中I行J列的矩阵
向量:只有一列的矩阵(n*1)
大写字母表示矩阵,小写字母表示向量
加法和标量乘法
加法:对应的每个元素逐个相加(行列数都相同的矩阵才能相加)
标量乘法:矩阵中所有元素逐一与标量相乘,得到的是与原始矩阵相同维度的矩阵
矩阵(向量)乘法
A*B=C 其中C_ij=A_ix * B_xj 其中A的列数必须等于B的行数,A的第i行与B的第j列分别相乘相加得到结果为A的行数,B的列数的一个矩阵
即m x n * n x o = m x o
特征
交换律不适应矩阵乘法
结合律依然适应矩阵乘法
单位矩阵:I_(n x n):对角线上全为1,其他位置全为0
A * I=I * A=A
逆和转置
A * A(-1)=A(-1) * A=I 其中A是方阵,A(-1)被称为A的逆,只有方阵才有逆
A的第x行作为第x列,得到的矩阵就是A的转置矩阵 B_ij=A_ji
h(x)=w0+w1x1+w2x2+……+wn*nx
多元:多变量
特征缩放
x1 = [0,2000],x2 = [1,5] => x1/2000,x2/5
另参数的取值范围在[-1,1]之间
均值归一化:使特征值的平均值为0
学习率
绘出运行时损失函数与迭代步数的函数,帮助判断是否已经收敛
选择学习率的时候尝试:……0.001,0.003,0.01,0.03,0.1,0.3,1,……取最大可能值以获得一个不错的学习率
通过定义新的特征来得到更好的结果
构建一个矩阵X[1,x0,x1,...,xn],向量y[y]
theta=(Xt * X)-1 * Xt *y
不需要特征缩放
n在上百上千的时候选择,因为时间复杂度是n的三次方,对于大数据选择梯度下降
针对线性回归模型适用
当矩阵不可逆时 :
可以删减特征(如线性相关的特征),特征太多,使用正则化的方法
是一种分类算法
对于分类问题使用线性回归不是一个好方法
sigmoid函数,确保h(x)在[0,1]之间,h(x)的含义变成了y=1的概率
决策边界:Wx = 0这条线,即这条线区分开了y=1及y=0.不是训练集的属性,是假设本身以及参数的属性
代价函数:尽可能的使代价函数为一个凸函数 Cost = -log(hx) if y ==1 or -log(1-hx) if y==0
尽可能的选择形状为凸函数的代价函数这样我们就可以很好地利用梯度下降算法来寻找最小值,如果代价函数为非凸函数,那么就说明其有着多个局部最优解,我们就很难用梯度下降算法来找到全局最优解
损失函数的简写:Cost = -ylog(hx)-(1-y)log(1-hx)
极大似然估计
hx是y=1的概率
共轭梯度,L-BGFS BFGS
转化为多个独立的二元分类问题(是/否分类)
对于N个类别的分类问题,得到n个识别函数
缩小每个参数的值,正则化参数:在更好的拟合参数以及更小的参数之间做抉择
避免过拟合
逻辑回归的正则化:同线性回归,加一个惩罚部分惩罚参数theta,一般不惩罚theta0
设计出模仿大脑的算法
第一层输入层,最后一层输出层,中间是隐藏层(多个)
处理非线性问题
多元分类问题:输出层有多个分类器来进行多元分类
代价函数
参数矩阵展开成一个长向量
梯度检测:计算近似梯度与Cost函数的结果进行比较,防止出现误差,确保反向传播的正确。进行神经网络训练时需要关掉梯度检验,因为梯度检验相当慢。
随机初始化:初始值需要随机生成(在某一个范围内)
每一层隐藏单元越多越好,但是会增大计算量
获取更多训练数据,尝试更多/更少的特征,增加多项式的数据,调整Lamda的大小
将数据分为训练集和测试集
训练集、验证集、测试集
偏差与方差
学习曲线(随着训练集的增大交叉验证集以及训练集误差的大小)
获得更多的训练集数据:高方差问题
减少特征集数量:高方差问题
增加特征集数量:高偏差问题
增加多项式特征数量:高偏差问题
减小 lambda:高偏差问题
增大 lambda:高方差问题
选用较小的神经网络:与较大的相反
选用较大的神经网络:会出现过拟合问题,计算量较大,效果较好
确定执行的优先级
挑选特征值
误差分析
列出所有产生误差的分类,然后针对错误率较高的分类进行具体分析,构造能满足这一类别的学习方法
不对称性分类的误差:正例和负例的比例过于悬殊
计算查准率(precision)以及召回率(recall)
权衡查准率以及召回率
通过对问题的实际分析来权衡查准率以及召回率来确定最合适的机器学习模型的参数以及结果
F-score
尝试不同的临界值