附录:
“.*”和“*”的区别:
在进行数之间的运算时“.*”和“*”是没有区别的,都是表示普通的乘法运算。例:m = 2,n = 3,m.*n = 6, m*n = 6。
在进行矩阵之间的运算时“.*”和“*”的意义就有所不同了。假设a,b表示两个矩阵,a*b表示矩阵a与矩阵b进行矩阵相乘,a.*b表示矩阵a中的元素与矩阵b中的元素按位置依次相乘,得到的结果将作为新矩阵中相同位置的元素。
1.向量叉乘公式
两个向量的叉乘,又叫向量积、外积、叉积,叉乘的运算结果是一个向量而不是一个标量。并且两个向量的叉积与这两个向量组成的坐标平面垂直。
对于向量a和向量b:
a和b的叉乘公式为:
a = (x1, y1, z1), b = (x2, y2, z2), c = (x3, y3, z3)
[abc] = (a x b) · c = (y2·z3 - y3·z2) · x1 - (x2·z3 - x3·z2) · y1 + (x2·y3 - x3·y2) · z1
2.导数、偏导数、方向导数、梯度、梯度下降法:
https://blog.csdn.net/walilk/article/details/50978864
3.AI算法分为两个大类:
(1)回归分析:解决一类需要获取任意x对应的y值得问题;(2)离散分析:问题在一些情况下获取对应的离散的数值情况,例如:true Or false。
4.线性回归:
一元线性回归:y = ax + b;有一组实际的数据(x0, y0), (x1, y1),...,(xn, yn)
需要找到最好的a,b值,使得直线最逼近真实值。
多元线性回归:h(x) =
需要找到最好的向量,使得函数得到的值最逼近真实值。
那么,这将转化为另一个问题——代价函数:
找到代价函数最小值的点,对应的a,b或者向量就是线性拟合最好的参数。
5.数值归一化:
(1)线性归一化:
线性函数将原始数据线性化的方法转换到[0 1]的范围,归一化公式如下:
缺点是抗干扰能力弱,受离群值影响比较大,中间容易没有数据。
(2)0均值归一化:
其中,μ、σ分别为原始数据集的均值和方差。该种归一化方式要求原始数据的分布可以近似为高斯分布,否则归一化的效果会变得很糟糕。
方差归一化抗干扰能力强,和所有数据有关,求标准差需要所有的值介入,若有离群值,会被抑制下来。但是归一化后的数据最终的结果不一定落在0到1之间。
注意:理论上一个模型算法如果拿到训练集所有的特征一起训练模型就要归一化数据。决策树算法可以不归一化数据。
比较:
1、在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,第二种方法(Z-score standardization)表现更好。
2、在不涉及距离度量、协方差计算、数据不符合正态分布的时候,可以使用第一种方法或其他归一化方法。比如图像处理中,将RGB图像转换为灰度图像后将其值限定在[0 255]的范围。
6.正规方程法:
octave: pinv(transpose(x) * x) * transpose(x) * y 或者 pinv(x' * x) * x' * y
以正规方程来求解,不需要将特征变量进行缩放。
注意:X如果是奇异矩阵(即X矩阵不满秩),那么X'*X的逆实际上是不存在的,会导致上面算式无法计算。但是!可以求“伪逆”,算式依然成立,pinv函数可以求矩阵的伪逆(inv不能求伪逆,但是如果X不是奇异矩阵,inv方法要比pinv速度要快),因此X不管是否是奇异矩阵,上面算式依然成立。(当然X是不满秩的情况,可说明该模型并不是一个很好的模型,因此尽量避免产生此模型)
7.正规方程法、梯度下降法:
梯度下降法:
优点:无论特征变量有多少,该方法都是有效的;
缺点:需要适当的选择学习率,当学习率过低时,选取最优解太慢;当学习率过高时,可能错过最优解。
正规方程法:
优点:可以直接计算出最优解,不需要进行多次迭代;
缺点:当特征变量很多的时候,计算变得很慢很复杂,一般在特征变量大于10000个时选取梯度下降法。
8.Logistic回归:
其中,g(z)为sigmoid函数,和x都是向量。
Logistic回归的代价函数:
不适合线性回归的代价函数,因为将h(x)函数代入线性回归的代价函数中,函数不是一个凸函数,会在多个局部区域出现多个极值,不利于寻找最优解,因此需要重新寻找代价函数。
合适的代价函数:
h(x)为Logistic回归函数,y为真实值(取值范围true or false,即0或1)
由于h(x)的取值范围为(0, 1),因此代价函数图像:
对于图像,横坐标的取值在(0, 1)之间才有意义。代价函数告诉我们:当y = 0时,h(x)趋于0时获得最优解,h(x)趋于1时付出代价越来越大;当y = 1时,h(x)趋于1时获得最优解,h(x)趋于0时付出代价越来越大。因此这个函数正好符合我们的需求,可作为合格的代价函数。(个人理解:当有真实值使得代价函数付出较大代价的时候,会强烈驱使往最优解方向靠拢,因此该函数是一个优秀的代价函数)
该代价函数的梯度下降法的数学表达式:
拓展:当我们的样本中有多个类别,需要表达式来预测输入为哪一个类别,这就是“多元分类问题”
多元分类问题可以分解为若干个Logistic回归问题,比如有A,B,C三种类别的样本,需要求解A类别分类器时,可将样本分为两大类:A类和非A类(B、C类),那么问题将变成Logistic回归问题。对B、C进行分类就依葫芦画瓢。
那么分类函数形式:
9.使用octave求解代价函数最优解--Theta数组:
例子:可以先将右上方关于方程的代码单独写在一个.m文件中,然后再octave中cd到此文件所在的路径,然后输入下方的代码即可:
.m文件中方程的模板:
对于方法optimset的Api链接:Optimset 该方法用于设置配置
对于方法fminunc的Api链接:Fminunc 该方法用于计算最小值
上面例子中的输出结果中:
optTheta:为经函数计算得出的theta值,也就是损失函数最小时theta的取值
functionVal:为costFunction函数中jVal的值
exitflag:方法退出原因,当返回1时,表示在theta点定义的损失函数收敛,具体定义可以参照Api文档。
10.正则化:
(1)过拟合问题:
在求解符合真实数据的函数时,过度要求获得的函数满足所有真实数据样本,导致函数对应的图形起伏不定,不能作为一个好的预测函数,因此需要降低多项式中一些高阶的项对结果的影响:
如上图将x^3 和 x^4项的参数theta(3) 和 theta(4)减小,使其x^3 和 x^4项的影响几乎为零,那么曲线就接近了2次多项式。
(2)线性回归的正则化:
梯度下降法:
正规方程法:
由于需要惩罚除了theta(0)以外的theta项,因此正规方程法:
其中:一定是可逆矩阵。因此这个方法也可以使用octave库的inv函数来求解。
(3)逻辑回归的正则化:
逻辑回归正则化函数:
逻辑回归正则化后梯度下降法:
代价函数.m文件的写法:
11.神经网络:
神经网络以Logistic回归作为基础,神经树突到下一个神经元可作为一个Logistic回归,多个神经元即组成神经网络。
二元分类:以Logistic回归为基础,二元分类只需要训练出一组theta(1 * n+1),其中n+1为特征数量 + 一个偏置,对于m组用于预测的数据X(m * n),通过训练出来的函数,可得出一组预测值y(1 * m),那么y如果大于0.5则归类于1类,小于0.5则归类于0类;
多元分类:以Logistic回归为基础,假设类别分为K类,那么多元分类需要训练出K组theta(k * n+1),其中n+1为特征数量 + 一个偏置,对于m组用于预测的数据X(m * n),通过训练出来的函数,可得出k组预测值y(k * m),那么对于同一组用于预测的数据Xm(1 * n),通过训练出来的函数可得到一组预测值ym(k * 1),对于k个数据中数值最大的值的索引 i,i 类作为数据Xm预测最成功的分类。
反向传播法:拜读一下大神之作:https://www.cnblogs.com/charlotte77/p/5629865.html
梯度检测:用于检测反向传播中各theta对应的梯度是否正确,如果通过下面方式计算出来的梯度和反向传播时的梯度的差值很小,那么则认为此时的theta是正确的,否则是错误的。(注意:梯度检测是在训练和检测时用的,预测的时候不要使用梯度检测。梯度检测是一个非常耗时的过程)
随机初始化:在神经网络中如果theta初始化都是0,会导致在反向传播来更新theta的时候导致theta都是一模一样的值,因此不能得出正确的、优秀的theta值。因此在对theta初始化时,需要对其进行随机初始化(注意:这些值都是很接近于0的值)。
神经网络拟合的步骤:在已经选定好神经网络模型和每一层隐藏层的单元数的情况下,神经网络求出theta的步骤如下:
1.随机初始化theta值,注意这里的theta是很接近于0的值;
2.根据向前传播算法,将函数的结果输出h(x);
3.根据每一组训练数据的标签计算出它们的输出误差值;
4.利用反向传播算法,求出每一层隐藏层的每一个theta的梯度;
5.通过梯度检测,判断反向传播计算的theta的梯度是否正确;
6.不断的更新theta,使损失函数的值达到局部最小(一般神经网路的函数不是但一个凹函数或凸函数,求得theta最优解一般是局部最优解,不过尽管是局部最优解,也是一个很优秀的解)
12.机器学习应用的建议:
1.将数据分为三组:训练数据集(用于训练theta)、检验数据集(用于检验theta是否使得函数能够比较好的拟合真是数据)、预测数据集(用于最终的数据预测)。注意:如果绝大部分的数据用于训练theta,可能会导致过拟合。
2.如何区分高偏差和高方差:
高偏差:训练时的误差会随着训练数据个数增加而增大;
高方差:训练时误差会随着训练数据个数增加而越来越小,但是交叉验证的时候误差会随着验证数据个数增加而增大。
3.高偏差和高方差修正:
减小lamada修正高偏差;
增大lamada修正高方差。
13.机器学习系统设计:
1.在解决问题时,不要一味的先想出特别多的特征,而是先快速的找出一部分特征,然后找出这些特征最优拟合的函数。通过交叉验证,找出经常出错的例子,思考它们的共同特性,从而琢磨出一些新的特征,然后继续找出最优拟合,周而复始,直到函数在交叉验证的时候表现得很好。
2.问题描述:如果一个二分类的交叉验证集中”0“占有5%,预测函数的错误率是6%,那么会出现这么一个情况,假设预测函数为”h(x)恒为1“,即不受特征变量影响,一直是”1“,那么该函数错误率是5%,要比之前的预测函数的错误率低,看似当前的非机器学习函数的准确率要高,但是却不是一个好的函数。
问题解决:为了区分出这类问题,可以使用数字来表达。
P = 查准率(准确率) = True positive / (True positive + False positive)
R= 召回率 = True positive / (True positive + False negative)
True positive:预测为1时,预测正确的个数;
False positive:预测为1时,预测错误的个数;
False negative:预测为0时,预测错误的个数;
True negative:预测为0时,预测正确的个数。
通俗的讲,准确率:预测为1确实是1的概率;召回率:预测为0确实为0的概率。
如果一个预测函数没有 高查准率和召回率,那么则认为这个预测函数不是一个优秀的预测函数。
但是往往一个预测函数在高查准率和召回率中,不能鱼与熊掌不可兼得,如果一味的追求高查准率或者高召回率,就导致预测函数出现非机器学习函数的问题,这是不可取的。那么如何选择查准率和召回率?
F = 2 * P * R / (P + R) F的值在0-1之间,F越高说明预测函数越优秀。