这个系列是为了应对找工作面试时面试官问的算法问题,所以只是也谢算法的简要介绍,后期会陆续补充关于此
算法的常见面问题。
一、Logistic回归
先说下logistic回归,它是根据现有数据对分类边界建立回归公式,以此进行分类。其计算代价不高,易于
实现与理解,但是容易欠拟合、分类精度不太高;
logistic回归可以看成是一种概率估计,使用的的是sigmioid函数,
通过训练数据训练出参数[w1, w2, ..., wn],根据训练出的参数就可以求出h(x)的值,比较其
与0.5的大小(大于则归为一个类别,小于则归于另一个类别)。现在的关键问题是如何根据
训练数据得到训练的参数?
1、使用梯度上升法
寻找某个函数的最大值,最好的方法是沿着函数的梯度方向寻找。
刚开始赋予一样的权重,然后根据结果与已知标号算出训练误差,再更新权值,不断地迭代
直到满足某些条件就停止。但是这个地方有一点需要注意——这种方法只试用与一些很小的
数据集,因为在更新权值的时候用到了整个数据集,这样会使速度慢很多。
2、 针对上面那个问题有一个改进的方法——随机 梯度上升法,不像梯度上升法使用整个
数据集更新数据,随机梯度上升法使用的是一个当前数据点来更新权值,这样的话基本
上不涉及向量的运算,前面的h(x) 和
误差error都是一个向量,但是随机梯度上升法
中这两个都由向量转化为一个数值,速度大幅度上升。但是,由于它是选用一个随机的样
本点来更新数据,所以有时这个方法会存在局部的波动,从而影响结果的精度。
3、针对上面波动的问题,可以通过两个步骤来改进:一是每次迭代的时候改变步长a,二是
使用随机样本来更新权值。
二、线性回归
回归的目的是预测数值型的目标值,最简单的方法是根据训练数据求出目标的计算公式,线性回归也就是用一条直线来拟合数据,从而实现目标值的预测。
目的是求出前面的回归系数
使用最小二乘法,得到结果
当然结果中有一个求逆的过程,需要验证逆是否存在!
三、局部线性加权回归
线性回归的一个比较严重的问题是欠拟合(因为它求的是最小均方误差的无偏估计),可以使用局部线性加权回归的方法来改善这个问题——给待预测点附近的每个点赋予一定的权重
求出的结果是:
这个做法可以增加拟合的精度,但是同时会增加大量的计算,每个测试样本都要与所有的训练样本求距离。
上面的二、三都是在逆存在的情况下才可以做,但是当数据的特征比样本点还多怎么办,因为此时逆是不存在的?可以使用岭回归的方法解决这个问题,也就是将转化为,其他的和前面的做法大同小异。
当然还有个做法叫做前向逐步回归,它是通过每一步对某个权值增加或则减小一个很小的值,再重新计算w和error,若是误差更小了,则更新w。
对回归的详细介绍可以参考:http://www.cnblogs.com/jerrylead/archive/2011/03/05/1971867.html
顺便吐槽下CSDN,编辑后一直看不到后面的,一行有时只能写一半的地方。。。
版权声明:本文为博主原创文章,未经博主允许不得转载。