线性回归
线性回归方程参数求解有两种方式:
梯度下降法(gradient descent)
- 假设函数和代价函数:假设函数是我们选取的假设为最终求解到的函数曲线形式,而代价函数是一个评估现在的曲线和真实样本的差距(一般用平均方差表示)
- 梯度表明了一个函数变化最快方向的数值,用梯度下降法经过多次迭代可以使得代价函数趋于收敛状态,得到当前样本下最拟合的曲线
- 通过对代价函数求梯度,通过迭代得到:theta_new = theta_old - alpha * J(theta), 我们可以得到最理想化的theta
- Alpha为学习率,一般选取为0.001 - 0.003 - 0.01 - 0.03 -0.1,约为3倍
正规方程法
- 由于是线性的方程(如果不是,可以通过变量的代换转换为线性,如 x1 = (house_size) ^ 2)
- 如上图所示,我们对于theta0做了再添加一个全为1的特征列x0,使得可以通过矩阵进行快速的运算theta的结果
- 由线性代数的相关知识(以上图为例),设置未知参数theta为一个列向量theta,于是可以得到X * theta = y, 假设X都是可逆的,就可以得到,theta = X^(-1) * y,转换后可以得到图中的结果
两者的优缺点以及选择
- gradient descent:需要选择学习率alpha,需要不断调整参数;需要迭代多次,具体的次数取决于收敛的状况和学习率的取值
- 正规方程法:矩阵求逆运算对于计算的计算能力要求极高,所以特征不能太多
- 选择:当样本的某一特征的样本数大于10000时(特征列向量的维数),选择gradient descent,否则选择正规方程法
数据处理
- 如果两个特征的取值范围相差三倍以上,例如一个在(-1,1),另一个在(-100,100),则需要对第二个进行特征放缩处理
- 放缩处理一般采用归一化处理(mean normalization),特征值减去特征值的平均值除以区间范围或者标准差
- 如果代价曲线随迭代次数递增,则考虑学习率选择过大;如果代价曲线忽大忽小,则考虑学习率选择过大
Logistic 回归(regression)
逻辑回归算法,实际为分类算法。
假设函数的表达式以及方程的选取
- g(z) = 1 / (1 + e ^ (-z)):logistic function, sigmoid function:几率函数
- 假设函数h(x) = 1 / (1 + e ^ ( - thetaT* x))
- h(x) 的结果为此个特征向量为Positive的几率,比如是一个病人的肿瘤特征,代入计算后,得到的h(x) = 0.7:那么就是,这个病人有0.7(70%)的几率是阳性(malignant恶性肿瘤)
- h(x) = p(y = 1| x; theta):在给定假设theta和特征向量的条件下,y = 1 的概率
- 于是可以得到:p(y = 0| x; theta) = 1 - p(y = 1| x; theta)
决策边界(decision boundary)
- 我们选择了一个阈值为0.5,于是就有z>0时, y = 1
- 在给定theta后,只需要g(z)中的z > 0, 即thetaT * X > 0就可以确定y = 1;
- 现在,已知y = 1,theta也已知,假设特征向量是二维的,就可以通过thetaT * X > 0计算得出一个x_1 和x_2的不等式,满足不等式的区域就位y = 1的区域,而两个区域的交界就是决策边界;而这个边界也可以是各种曲线,取决于x_1和x_2的的次方(如 x_1^2 + x_2 ^ 2 >= 1 表示一个圆域);
- 决策边界是假设函数的属性而不是数据集的属性,就算没有特征向量,决策边界也依然存才
如何拟合逻辑回归的参数theta
- 代价函数: 如果按照线性回归中的代价函数来假设,就会使得代价函数是非凸函数,因为假设函数h(x)是非线性的,于是就有很多局部最优解。
- 于是我们需要寻找另一种代价函数:
- 为了使得讨论y的情况合二为一,进行数学上的处理得到(统计学得出,凸函数 ):
- 我们用梯度下降发求解theta,这个与线性回归不一样,因为这里的h(x) = 1 / (1 + e ^ (- theta^T ×X)),而之前线性回归中是theta ^ T × X,所以这两个不是同一个方法。
- 注意特征放缩也可以用于这个分类方法
高级优化
- J(theta)和其导数,会有其他的算法来优化他们,得到最小化代价函数,梯度下降法只是其中的一个较为简单的。
- 共轭梯度法(BFGS)、L-BFGS、Conjugate gradient、gradient descent等,前三种高级的算法的优点是:a) 不需要自己手动选择学习率alpha、b) 比梯度下降法更快。缺点是:算法更复杂!
- 采用matlab中的fmiunc(@costFunction, initialTheta, options),options是需要设置的参数,梯度方式,迭代次数,收敛标记,最终代价等。
1对多分类问题
- 如果是3分类,将一个为正样本,其余两个为负得到一个决策边界,以此类推可以得到三个边界以及3个分类器
- 针对给定的一个需要预测的值,可以分别代入三个分类器进行就按计算,得到不同的概率,于是就可以比较应该判定为哪一个!