1. 监督学习
监督学习是已经知道数据的label,例如预测房价问题,给出了房子的面积和价格。
-
回归问题是预测连续值的输出,例如预测房价。
-
分类问题是预测离散值输出,例如判断肿瘤是良性还是恶性
2. 无监督学习
无监督学习是不知道数据具体的含义,比如给定一些数据但不知道它们具体的信息,对于分类问题无监督学习可以得到多个不同的聚类,从而实现预测的功能。
3. 线性回归
线性回归是拟合一条线,将训练数据尽可能分布到线上。另外还有多变量的线性回归称为多元线性回归。
3.1 代价函数
cost function,一般使用最小均方差来评估参数的好坏。
3.2 梯度下降
梯度下降,首先为每个参数赋一个初值,通过代价函数的梯度,然后不断地调整参数,最终得到一个局部最优解。初值的不可能会得到两个不同的结果,即梯度下降不一定得到全局最优解。
梯度下降在具体的执行时,每一次更新需要同时更新所有的参数。
梯度下降公式中有两个部分,学习率和偏导数。
偏导数,用来计算当前参数对应代价函数的斜率,导数为正则θ\thetaθ减小,导数为负则θ增大,通过这样的方式可以使整体向θ=0收敛。
α用来描述学习率,即每次参数更新的步长。α的大小不好确定,如果太小则需要很多步才能收敛,如果太大最后可能不会收敛甚至可能发散。
当θ处于局部最优解时,θ的值将不再更新,因为偏导为0。
这也说明了如果学习率α不改变,参数也可能收敛,假设偏导>0,因为偏导一直在向在减小,所以每次的步长也会慢慢减小,所以α不需要额外的减小。
单元梯度下降
梯度下降每次更新的都需要进行偏导计算,这个偏导对应线性回归的代价函数。
对代价函数求导的结果为:
梯度下降的过程容易出现局部最优解:
但是线性回归的代价函数,往往是一个凸函数。它总能收敛到全局最优。
梯度下降过程的动图展示:
多元梯度下降
通常问题都会涉及到多个变量,例如房屋价格预测就包括,面积、房间个数、楼层、价格等
因此代价函数就不再只包含一个变量,为了统一可以对常量引入变量x0=1。
虽然参数的个数增多,但是对每个参数求偏导时和单个参数类似。
3.3 特征缩放
多个变量的度量不同,数字之间相差的大小也不同,如果可以将所有的特征变量缩放到大致相同范围,这样会减少梯度算法的迭代。特征缩放不一定非要落到[-1,1]之间,只要数据足够接近就可以。Xi=Xi-u/σ,μ表示平均值,σ表示标准差。
缩放后的还原
经过线性回归得到的参数θ,对应着缩放后的数据,如何得到缩放前的参数θ?
3.4 学习率
学习率α的大小会影响梯度算法的执行,太大可能会导致算法不收敛,太小会增加迭代的次数。可以画出每次迭代的J(θ)的变化,来判断当前算法执行的情况,然后选择合适的学习率。(调参开始…)
Batch梯度下降:每一步梯度下降,都需要遍历整个训练集样本。
4. 矩阵和向量、矢量
一些数学计算转化为矩阵的形式,可以简化代码书写、提高效率、代码更容易理解。
矩阵乘法不满足交换律:
矩阵乘法满足结合律:
单位矩阵:
矩阵的逆:
- 首先是方阵
- 不是所有的矩阵都有逆
转置矩阵:
向量化实现
左边非向量化实现方式使用for循环来计算h(x),右边使用向量化方式实现计算h(x),代码简单且运行更高效。
线性回归梯度下降算法的向量化实现方式
5. 正规方程
偏导等于0对应线性方程的最小值:
利用线性代数的方法直接求解θ
6. 逻辑回归
6.1 分类
例子(1. 是否是垃圾邮件 2. 网上交易是否是诈骗 3. 是否是良性或恶性肿瘤)
二分类:(0,1表示,通常0代表没有某种东西,1代表有某种东西)
多分类:(0,1,2.....)
逻辑回归用于解决分类的问题,如果使用线性回归可能会造成很大的误差;假如样本的标签值为0、1,线性回归输出值是连续的存在>1和小于0的情况,不符合实际。
第一张图中
如果对于一个均匀的数据,使用线性回归,选取0.5作为分界线,可能会得到一个比较准确的模型
第二张图中
但是如果数据不太均匀就会存在很大的误差,所以一般不推荐使用线性回归模型来预测分类问题
6.2 假设陈述
激活函数
激活函数的y值分布在[0,1]内,对于分类问题,我们可以使用激活函数的值来表示满足特征的概率。
逻辑回归的假设函数数学公式
假设函数输出模型解释
概率:在x给定参数θ下的y=0的概率
6.3 决策界限
决策边界:假设函数的一个属性,取决于假设本身及其参数的属性,而不是数据集的属性。
我们不是用训练集来定义的决策边界,而是用训练集来拟合参数θ
6.4 代价函数
non-convex:非凸函数 convex:凸函数
逻辑回归一般使用对数函数作为代价函数:
当评估模型参数对y=1(恶性肿瘤)进行预测的好坏时,如果实际为恶性,预测值也为1(恶性),此时的代价为0;如果实际为恶性,预测为0(良性),此时的代价为+∞,这时代价函数就很好的评估了参数θ的表现。
同样对于y=0(良性肿瘤)的代价函数为:
简化代价函数
y的取值只有0、1,可以将上面两个函数合成一个,评估当前参数的J(θ)为:
梯度下降
虽然求偏导之后,θ更新的形式和线性回归类似,但是他们本质不同,因为hθ(x)完全不一样。
高级优化
6.5 多元分类
对每个特征单独训练,在做预测的时候,取三个分类器结果最大的。
7. 过拟合与正则化
7.1 过拟合问题
存在多个特征,但是数据很少,或者模型函数不合理,都会出现过拟合的现象。过拟合可能对样本数能够很好的解释,但是无法正确的预测新数据。(线性回归和逻辑回归都会有现象)
7.2 正则化
解决过拟合的方法:
正则化处理过拟合问题:
在代价函数中加入正则项,通过lambda来平衡拟合程度和参数的大小,θ约大越容易出现过拟合的现象。
如果lambda过大,导致θ≈0,那么最终只剩下下θ0,图像将变成一个直线。
线性回归的正则化:
梯度下降法:对代价函数J()进行梯度下降,通过在代价函数后+/m*j ,然后j不断更新变小
正规方程法:
不可逆问题:
逻辑回归的正则化:
8. 神经网络
神经网络可以来学习复杂的非线性假设模型
8.1 非线性假设
大多数的机器学习所涉及到的特征非常多,不一定只有两个特征(X1,X2);对于非线性分类问题,往往需要构造多项式来表示数据之间的关系,多项式的组成方式千变万化(X1²,X2X3,X4X100),可能包含5000多二次项特征,运算量级达到o(n²)这对计算带来一定困扰。或者可以只包含类似平方项的二次式(X1²,X2².....X100²),减少到只有100个二次项,但是这样会忽略太多相关项,可能不会得到理想结果。再加上三次项,则运算量级达到o(n三次方)。总的来说特征数n都会很大,特征空间极具膨胀,神经网络可以来有效解决此类问题。
8.2 神经元与大脑
大脑中的神经元结构:一个计算单元
Dendrite(树突),类似输入通道(inut wises),接收来自其他神经元的信息;
Axon(轴突),输出通道(output wises),给其他神经元传送信息。
单个神经元模拟成一个逻辑单元:X0(偏置单元,总等于1),X1,X2,X3输入单元(input);中间节点黄色圈为神经元;输出为h(x);通常X和是参数向量,为模型参数(parameters)或模型权重(weights)都可以;以下是带有sigmoid或者logistic激活函数的人工神经元,在神经网络术语中,激活函数是指代非线性函数g(z)的另一个术语。
神经网络:是一组神经元连接在一起的集合
机器学习中的神经网络一般包括三部分:输入层(Layer 1),隐藏层(Layer 2),输出层(Layer 3)。
下图呈现上图神经网络图表的计算步骤:怎么用数学来定义或者计算神经网络的假设函数
表示第j层第i个神经元或单元的激活项,激活项是指由一个具体神经元计算并输出的值;
神经网络被这些矩阵参数化(权重矩阵):它控制从某一层到另一层的映射;
如果一个网络在第j层有个单元,在j+1层有+1个单元,那么矩阵即控制着第j层到第j+1层映射的矩阵,它的维度是 * ( + 1)。
向量化实现方式计算神经网络
利用*x向量化表示成向量z,然后g(z)表示a向量,这里的z和a都是三维向量,激活项g S型函数逐个元素地作用于z中的每个元素;因为输入项为x,为了和a表示一致,可以把x向量表示成向量,这样就等于 ;然后最终算出,这种计算的过程称为前向传播,这样命名是因为我们 从输入单元的激活项开始,然后进行前向传播给隐藏层,计算隐藏层的激活项,然后继续前向传播并计算输出层的激活项。
前向传播方法帮助了解神经网络作用和为什么能学习非线性假设函数
a1,a2,a3是学习得到的函数输入值,具体来说就是第一层映射到第二层的函数,这个函数由其它参数(1)决定;在神经网络中,它没有用输入特征X1,X2,X3来训练逻辑回归,而是自己训练逻辑回归的输入a1,a2,a3;然后把a1,a2,a3输入到最后的单元,这部分实际上是逻辑回归算法;也可以选择多项式(X1X2;X1X3)作为输入项。
还可以用其他类型图来表示神经网络
神经网络中神经元的连接方式称为神经网络的架构。了解一下神经网络是如何工作的,比如说从第二层开始,由3个隐藏单元,它们会计算比如说输入层(第一层)的复杂功能,然后第三层可以将第二层训练出的特征项作为输入,然后再第三层计算出更复杂的特征;这样在你到达输出层(第四层)时,就可以利用第三层训练出来的更复杂的特征作为输入,以此得到非常有趣的非线性假设函数。
前向传播在神经网络里的工作原理:数据从输入层的激活项开始,通过激活函数前向传播到第一隐藏层,然后传播到第二隐藏层,经过多个隐藏层,最后到达输出层,神经网络表示复杂的逻辑关系,主要是对隐藏层的构造。如何向量化这些计算,用 数学定义和计算神经网络的假设函数(参数和输入项计算直到h(x)。
8.3 逻辑运算
神经网络是怎样计算复杂非线性函数的输入的,弄懂神经网络如何学习复杂的非线性假设模型
XNOR是NOT(x1 XOR x2)的另一种写法,XNOR的分类问题:我们可以搭建出每种逻辑运算的神经网络,最终整合得到XNOR的神经网络模型。先介绍简单运算的网络模型(AND,OR,NOT)
8.4 多元分类
通过构建神经网络,每种输出就对应一个分类器。让神经网络解决多类别分类问题
8.5 代价函数
K表示输出层的单元数目,L为神经网络的层数。
在神经网络里使用的代价函数是逻辑回归中使用的代价函数的一般形式,对于逻辑回归而言,通常使代价函数J()最小化。
8.6 反向传播(前向传播)
前向传播
顶上偏置单元没有算进去:
反向传播:计算网络中所有代价函数的偏导数
代表第l层的第j个结点的误差,之前表示第i层第j个神经元或单元的激活项;
对于每一个单元,计算项等于这个单元的激活值(假设的输出值)减去训练样本里的真实值
然后逐次计算前面项的项,其中没有1,因为第一次对应输入层,那只是表示我们在训练集观察到的,所以不会存在误差。
8.6 梯度检测
在实现反向传播算法时,如何确保梯度计算正确呢?
在数学上可以使用拉格朗日中值定理来近似的表示曲线上某一点的导数,梯度检测正是使用的这种思想。
梯度检测的使用,可以对每个参数单独进行验证。
要实现这些东西,在Octave里为了估算导数所要实现的东西
假设通过中值定理得到的梯度为approx_grad,经过反向传播得到的梯度为grad,如果满足以下等式,则说明反向传播得到的梯度精度还行。
梯度计算正确的情况下,当算法进行学习的时候要关闭梯度检测,因为它非常耗时。
8.7 随机初始化
在对神经网络进行训练时,theta的取值要随机取值,如果都赋值为0,就会使得每一层的输出值、误差相同,从而存在大量冗余。
随机初始化解决对称性问题,防止权重相等
8.8 神经网络总结
神经网络模型选择
在多分类问题中,如果输出y有10个输出值,每个类别不要写成实数,写成向量最好。
构建神经网络的步骤
理解梯度下降法在神经网络中的应用
梯度下降算法原理:我们从某个随机的初始点开始,将会不停的向下降;
反向传播算法:目的是算出梯度下降的方向,然后梯度下降作用就是沿着这个方向下降
9 模型评估
9.1 评估假设-训练、测试集
将数据集分为训练集和测试集,训练集得到参数θ\thetaθ,然后使用测试集的数据对参数θ\thetaθ进行评估,即计算误差。
线性回归问题的评估:
1. 对训练集进行学习得到参数(最小化训练误差J())
2. 计算出测试误差
逻辑回归问题的评估:
Misclassification error 错误分类度量
9.2 模型选择-训练、验证、测试集
首先用训练集得到一个最优的参数θ,然后用测试集进行评估误差(测试误差最小)。通过这样的方式可以在众多模型中选择一个理想的模型。
但是这样做并不能评估模型的泛化能力,通过测试集评估选择的模型,可能刚好适合测试集的数据,并不能说明它对其他数据的预测能力,这时就引入了验证集。
将数据集分为:训练集、验证集、测试集。
对于每个集合都可以计算相应的误差。
这样在选择模型的时候,可以先使用测试集得到每个模型的θ,然后使用验证集评估得到误差最小的模型,最后使用测试集评估他的泛化能力。
9.3 偏差与方差(诊断)
当多项式次数增大时,训练集的误差慢慢减小,因为多项式次数越高,图像拟合的就越准确。但是验证集不同,它的趋势是先减少后增大,这分别对应着欠拟合和过拟合。
那么我们可以根据误差的不同表现来区分偏差和方差。
高偏差:训练误差和验证误差都很大。
高方差:训练误差小,验证误差大。
9.4 正则化与偏差方差(影响)
通过引入λ来平衡多形式的权重。
当λ太大,参数θ≈0,模型近似直线,即欠拟合。当λ太小,就会出现过拟合。
9.5 学习曲线
随着数据量的增加,Jtrain(θ)的误差慢慢增大,因为数据越少,模型越容易拟合;Jcv(θ)慢慢减少,因为数据越多,模型越精准,所以误差减小。
高偏差的模型的学习曲线:
因为参数很少,数据很多,所以随着数据的增多高偏差的模型的Jtrain(θ)和Jcv(θ)很接近。这时选择增加数据就不是很好的选择了,可以尝试增加数据的特征。
高方差的模型的学习曲线:
高方差的特点是训练误差和验证误差之间有很大的差距,这时可以选择增加数据,随着图像右移可以看出训练误差和验证误差会慢慢接近。
9.6 如何抉择
使用大型神经网络并使用正则化来修正过拟合问题比使用一个小型神经网络更好,注意问题就是计算量较大
9.7 精确度和召回率的权衡
查准率与召回率
例如对癌症的预测,相对于样本数据真实得癌症的人非常少,大概只有0.5%的概率,这样的问题称为偏斜类,一个类中的样本数比另一个类多得多。
对于偏斜类的问题,如何评估模型的精准度呢?这里引入了查准率和召回率
偏斜类不能通过总是预测y=1或y=0来欺骗我们,因为它不能够获得高查准率和召回率。
通常如果阈值设置的比较高,那么对应的查准率高、召回率低;相反如果阈值设置的低,那么查准率低、召回率高。
9.8 F1 socre
如何比较权衡不同的算法呢?
这里使用的F1score,即调和平均数(倒数的平均数)来衡量。
F1score会比较照顾数值小的一方,如果PR都为0,F1score=0;如果PR都为1,F1score=1
10. 支持向量机(SVM)
10.1 优化目标(代价函数)
逻辑回归模型的图像是一个曲线或复杂的曲线,SVM使用简单函数来近似这个曲线。
有了以上这些定义,就可以开始构建支持向量机SVM,SVM与逻辑回归的代价函数不一样,通常去掉1/m,因为这是一个常数,也可以得到最优解。
我们优先考虑的不是计算A+B,而是通过设定不同的正则化参数,以便能够权衡想在多大程度上去适应训练集,也就是最小化A还是更多地去保持正则化参数足够小(更多注重B);按照管理,对于SVM,我们不再用这里的来控制第一项与第二项的相对权重,而是用一个不同的参数,现在最小化CA+B。
在逻辑回归中,我们设置一个很大的,意味着B有很高的权重,SVM这里把C设为一个很小的值,这对应于给B比A大得多的权重,这样就得到了支持向量机的总体优化目标(数学定义),当最小化这个函数,就得到了SVM学习得到的参数。
10.2. 最大边界(大间隔)
SVM又叫做最大边界分类问题,观察代价函数可以得到:
最小化代价函数,(在C特别大的情况下)就是让左侧代价函数的和尽可能等于0,即对应,另外还有右侧的θ²的和最小,即向量的模尽可能小。最后得到一个关于参数的决策边界。
分类问题的界限有多种可能,SVM对于如下二分类的问题,往往会得到黑色的那条分界线,这条线恰好对应着最大的边界(距离两边样本远margin),因此也叫做最大边界分类问题。有时把SVM叫做大间距分类器。
代价函数中的C决定了边界的划分,如果C很大对应逻辑回归的λ\lambdaλ很小,模型过拟合,这样就会的到紫色的分界线,通过C的取值,我们可以决定边界的划分。
10.3 大间隔分类器的数学原理
向量的内积,等价于投影长度的乘积。
因此θTx可以写为p∣∣θ∣∣。
对于左侧的θ,每个x向量在θ上的投影距离很小,要满足条件那么∣∣θ∣∣就要增大,这样最小化代价函数的值就不是最优的,可能发生过拟合,所以SVM会得到类似右侧的边界,这样∣∣θ∣∣尽可能小些,因为投影距离都比左侧的要大,这也是最大边界的原因。
11. 核函数
对于一个非线性决策边界问题,我们可能使用高阶的函数进行拟合,但是是否存在比当前特征刚好的表达形式呢?
我们可以将每种特征Xi表示为新的 fi ,使用高斯核函数(Knernel)来做相似度分析。
随机选择三个点作为标记点,通过核函数可以得到x对应的新特征f。
使用高斯函数的特点:如果相似度很高,即对应的欧几里得距离≈0对应fi=1;如果相似度很低,则对应fi≈0。
假设我们已经训练好参数θ,就可以通过f≥0来进行预测y=1 or y=0,即对应红色的决策边界。
如何获取这些标记点?可以直接将训练集中的作为核函数中的。
这样对于训练中的数据,都可以得到对应的。
SVM在使用核函数的时候,对应代价函数就可以替换为:
和SVM中的参数C一样,可以表示偏差和方差,核函数的σ2决定了拟合的程度。
12. K-means算法(K均值-第一种无监督学习)
对于没有标签的数据来说,首先根据划分聚类的个数,随机设置聚类中心的位置,然后遍历所有的数据,把每个数据分配到离它最近的坐标,对于同一个簇的数据计算它们坐标的中心位置,并设置为新的聚类中心,以此不断的迭代。
12.1 K均值优化目标
表示当前样本所属的那个簇的索引或者序号,uk来表示第k个聚类中心的位置;表示所属的那个簇的聚类中心
大写K表示簇的数量,小写k表示聚类中心的下标(1-K);
k均值的目标函数(优化目标)是所有点到它所属聚类中心的距离和。
算法第一步:簇分配 ,把每一个点划分给各自所属的聚类中心;选择来最小化J
算法第二步:移动聚类中心,选择u值来最小化J(失真函数)
12.2 随机初始化
当聚类数量很少时,如果初始化的位置不够好,会得到一个局部最优解,解决方案是多次随机初始化,从而得到一个全局最优解。(如何初始化聚类中心)多次初始化,K值小,聚类结果好,K值大,聚类结果不是很好,但也可以了。
12.3 聚类数量的选择
得到聚类数量和代价的图像,根据肘部原则选取(一般不用,不会期待它每次都有效果);或者最好根据运行k均值聚类的目的是什么来做判断,比如做衣服尺寸的聚类分析,根据市场需求,3个聚类or5个聚类更适合市场营销等等。
13. 降维(第二种无监督学习)
13.1 目标
1. 数据压缩 2. 数据可视化
13.2 PCA主成分分析
问题规划
主成分分析法会选择像红色的直线(特征投影到该直线的距离平方和最小),而不是品红色直线
主成分分析(PCA)是一种数据压缩的算法,他将数据压缩到k维度,并使得所有数据投影到新维度的距离最小。如果是2维压缩到1 维,则找到一个向量(正负都行),沿着向量画出一条直线,使得数据特征距离投影到该条直线上的点的距离最小,最小化投影误差的平方;如果是n维压缩到k维,需要找到k个向量。
PCA不是线性回归,一个是投影距离(最短距离 右边),一个是点与直线上点的距离(数据点到预测点距离 左边)。
PCA执行过程,首先进行数据预处理(特征缩放/均值标准化),先求出数据集的均值,然后用每一个数据减去均值来替代原来的每一个数据。
首先对数据进行均值归一化,然后确定要压缩的目标维度,即对应向量的个数,PCA的目标是使得所有数据距离新维度的距离最小。
数据进行均值归一化后,然后计算协方差(covariance ,matrix),最后得到一个k维的矩阵。
主成分数量选择
如何确定维度K?
公式<=0.01可以用公式>=0.99来替换计算
一般选择K的方法,使用PCA进行压缩时,会在协方差矩阵上进行一次SVD(奇异值分解),然后利用>=0.99的公式来挑选k的最小值,使得k满足这个公式
压缩重现
如何得到压缩直线的近似坐标?从低纬表示z回到未压缩的数据表示,得到一个原来数据x的近似(又称原始数据的重构)
14. 异常检测
14.1 高斯分布
可以使用高斯分布来进行异常检测。
参数估计
参数估计问题就是给定数据集,希望找到能够估算出u和平方的值
14.2 异常检测算法
要用数据集建立起来概率模型p(x),我们要试图解决出哪些特征量出现的概率比较高(低),分布项p(x)的估计问题,有时称作密度估计问题。
异常检测算法:计算m个数据集在每一个维度上的uj和j²,然后根据p(x)得到一个概率,根据概率的大小来定义是否为异常行为。
1. 选择特征量或是相处一些特征量xi,能够帮助我们指出那些反常的样本;
2. 给出训练集,就是m个未做标记的样本,之后进行参数拟合(uj-特征量j的平均值,j²);
3. 给出新案例,计算p(x)的值,判断是否是很小的值(异常)。
异常检测算法特征选取
对于非高斯分布的特征,可以使用变量代换原始数据,调整其中不同C参数,使其接近高斯分布
如何得到异常检测算法的特征:通过误差分析步骤(类似监督学习时的步骤)
看哪里出了错(算法没有标记出来的异常样本),看它是否能够启发创造一些新特征,有了新特征能够更容易地将异常样本从正常样本中检测出来。
挑选特征意见:
14.3 异常检测vs监督学习
如果负样本多 (没有异常),正样本少,使用异常检测算法;
如果有相同量级的正样本和负样本,使用监督学习算法。
14.4 多变量高斯分布
异常检测算法,往往是把中心附近的数据认为是高频率出现的,表现在图像上类似一个圆形。在一些情况下数据并不是规则分布,单变量的高斯分布不能体现拟合椭圆形状。
为解决以上问题,使用多元高斯分布:为所有p(x)建立统一的模型
多变量高斯分布引入了协方差矩阵,通过修改矩阵的值来改变高斯分布的情况。
Sigma (协方差函数衡量的是方差或者是特征变量X1和X2的变化量)可以理解为每个特征的缩放比例,这样就可以拟合更多的数据分布。多元高斯分布的概率分布优势是能描述两个特征变量之间可能存在正相关或者是负相关的情况。
14.5 使用多元高斯分布的异常检测算法
参数拟合和参数估计问题:估计u(训练样本平均值)和,得到后就可以代入到异常检测算法中
异常检测算法:
1. 首先用数据集来拟合该模型;
2. 当有新样本x,用多元高斯分布公式来计算p(x);
3. 如果p(x)很小,就标记该样本为异常。
多元高斯模型和传统原始模型的区别?
传统的高斯分布实际上是多变量高斯分布的特殊形式,对应矩阵在非对角线上的数为0。
1. 传统模型需要手动构造异常特征的组合(创建新特征去捕捉异常),多元模型可以自动的捕捉。
2. 传统模型计算简单,多元的计算复杂度高一些。
3. 传统模型可以很小的样本集,多元必须数据集大于特征数量(否则矩阵是不可逆的)
如果发现协方差矩阵不可逆了,检查1 确保m>=n, 2 是否存在冗余特征(公式中的这项特征是线性相关的)
15. 推荐系统
15.1 基于内容的推荐算法
问题规划
例如一个电影推荐系统,一共有n个用户,m个电影,每部电影都有一定的特征,例如爱情片的比例、动作片的比例(X0默认为1,X1,X2)。n个用户对看过的电影进行评分,推荐系统做的给用户推荐新电影,预测用户对新电影的评分?
可以使用线性回归的方法进行训练,得到每个用户对于特征向量x(i)的参数,x(i)是特定电影的一个特征向量,之后就可以根据对电影进行打分。
优化目标函数为:
15.2 协同过滤
collaborative filtering(当执行算法时,要观察大量用户的实际行为来协同地得到更佳的每个人对电影的评分值),用于特征学习,自己学习得到数据的特征值。
我们无法得到每部电影中不同特征的比例,例如电影中爱情和动作的比例?除非人工审核每一部电影,但是太耗时。这里有一个思路,首先用户根据自己的喜好对特征打分,得到这些参数的值,通过计算大致确定已经打过分的电影它的特征值(X1,X2),根据已经确定的特征值,又可以计算出每个用户对这部电影的评分。
先有鸡还是先有蛋…
根据特征向量X可以通过线性回归得到用户的θ向量,通过用户提供的θ向量可以估计每部电影的特征数值。我们可以随机选取θ向量计算得到特征数值,然后再通过线性回归去更新θ,这样不停的迭代直到最后的收敛。
我们也可以将两种函数合并为一个目标函数:
15.3 矢量化:低秩矩阵分解
可以把n个用户对m部电影的评分结果表示为m×n的矩阵。
这个矩阵可以表示为X*θT
通过特征值之间的偏差,我们可以找到类型相近的电影。
15.4 均值规范化
之前无论是参数θ还是特征X,都基于每个用户都对多个电影进行的评分,每部电影也被多个用户评分。对于新用户,他可能还没有对任何一部电影进行评分,一种思路就是把所有用户对每部电影的评分的均值作为新用户的初始评分。
16. 随机梯度下降
线性回归模型使用梯度下降算法:(Batch gradient desent批量梯度下降)
Stochastic gradient descent:当我们的训练集很大时,梯度下降算法的计算量会很大,随机就不会考虑全部样本,而是考虑一个训练样本。
随机梯度下降算法对每个数据分开处理,对一个数据更新所有的参数。
梯度下降算法是在每次更新参数的时候,需要计算所有数据。
对比下来SGD的速度要快一些,不过收敛性可能没GD好。
16.1 随机梯度下降收敛
如何判断SGD的收敛?定义cost函数,然后每隔1000次迭代画出cost的图像,根据均值来判断。
如果曲线噪声太大或者图像上下震荡,可以选择更多的求均值的样本的数量。
如果误差在上升或者cost函数的值在上升,那么选择更小的α学习率。
SGD一般不能得到全局最优,他会一直在最优值附近徘徊。
学习率的大小一般保持不变,一个思路是可以动态的改变学习率α的大小来提高准确度,比如随着迭代次数的增加慢慢减小α的值。
17. Mini-Batch梯度下降
Mini-Batch gradient descent
将数据分为多份,对每一份执行GD,相当于GD和SGD的综合。
b可以取[10,100]。
18. 在线学习
例如一个大型网站有连续的用户流,在线学习算法就非常适用;如果只有少量的用户,最好把所有的数据保存在一个固定的数据集里,然后对这个数据集使用某种算法;在线学习算法可以根据用户偏好的变化进行调适。
19. Map-reduce
Map-reduce and data parallelism。(减少映射与数据并行)
Map-reduce利用了线性回归求和运算的特性,将GD对整个数据的求和处理,分摊到多个服务器上执行,最后各个服务器把结果汇总到一起进行合并。
Map-reduce示意图
逻辑回归也可以这样搞。
只要学习算法可以表示成一系列的求和形式或者表示成在训练集上对函数的求和形式,就可以用map-reduce来并行化学习算法,使得其可以应用于非常大的数据集。
把mapreduce看成是一台机器中不同核心的并行,而不是多台机器并行,这样的好处是可以不用担心网络延迟问题,因为通信传输接发变量temp_ j都在同一个机器里。
20. OCR.pipeline
照片OCR问题注重的问题是如何让计算机读出图片中的文字信息
20.1 pipeline(流水线):
文字检测 字符分割 字符分类
20.2 滑动窗口
1. 文本检测系统
2. 行人检测系统
首先在图片中选取一个矩形块(比如82×36的图块),把这个图块传递给我们的分类器来检测图块中是否有行人(返回y=0或1);然后将图块不断移动,每次移动的距离一般称之为步长,有时也称为滑动参数。
20.3 获取数据
人工数据合成
方法1:从零开始生成新数据,例如利用任意字体生成样本,下载字体,然后将它们放到一个随机背景图片上。
方法2:使用现有的样本生成数据,扩充一个已有的训练集;通过将现有的标注样本引入一些失真以生成额外的标注样本
对图像进行人工扭曲,引入一些失真
对语音文本加入不同的背景干扰。
首先确保算法已经有很低的偏差,整体的模型ok,然后在考虑加数据,否则只是徒劳。
然后考虑加数据的人工和时间成本。
21. 上限分析
对多个模块进行分析,让其中一个模块达到100%的准确率,然后判断它能提高整个系统多少准确率。