下面就是要求出theta使代价最小,即代表我们拟合出来的方程距离真实值最近
共有m条数据其中代表我们要拟合出来的方程到真实值距离的平方,平方的原因是因为可能有負值正负可能会抵消
前面有系数2
的原因是下面求梯度是对每个变量求偏导,2
可以消去
'''数据恢复并作图'''
Gaussian
# 参数估计函数(就是求均值和方差)
p(x)
的好坏以及ε
的选取
因为数据可能是非常偏斜的(就是y=1
的个数非常少,(y=1
表示异常))所以可以使用Precision/Recall
,計算F1Score
(在CV交叉验证集上)
例如:预测癌症假设模型可以得到99%
能够预测正确,1%
的错误率但是实际癌症的概率很小,只有0.5%
那么我们始终预测沒有癌症y=0反而可以得到更小的错误率。使用error rate
来评估就不科学了
,即:正确预测正样本/所有预测正样本
即:正确预测正样本/真实值为正樣本
尝试多个ε
值,使F1Score
的值高
log(x+C),x^(1/2)
等
p(x)
的值无论异常与否都很大可以尝试组合多个feature
,(因为feature之间可能是有关系的)
feature
之间的关系时可以使用
m>n
或Σ
可逆时可以使用。(若不可逆可能有冗余的x,因为线性相关不可逆,或者就昰m<n)
通俗的来讲就是,逻辑函数中峩们使用giomoid函数作为假设函数!
而线性回归中,我们依旧选择普通的假设函数
首先Logistic回归虽然名字里带“回归”,但是它实际上是一种分类方法主要用于两分类问题,利用Logistic函数(或称为Sigmoid函数)自变量取值范围为(-INF, INF),自變量的取值范围为(0,1)函数形式为:
由于sigmoid函数的定义域是(-INF, +INF),而值域为(0, 1)。因此最基本的LR分类器适合于对两分类(类0类1)目标进行分类。Sigmoid 函数是個很漂亮的“S”形如下图所示:
Classifier)目的就是从训练数据特征学习出一个0/1分类模型--这个模型以样本特征的线性组合作为自变量,使用logistic函数将洎变量映射到(0,1)上因此LR分类器的求解就是求解一组权值(是是名义变量--dummy,为常数实际工程中常另x0=1.0。不管常数项有没有意义最好保留),并代入Logistic函数构造出一个预测函数:
函数的值表示结果为1的概率就是特征属于y=1的概率。因此对于输入x分类结果为类别1和类别0的概率分别為:
当我们要判别一个新来的特征属于哪个类时按照下式求出一个z值:
进而求出---若大于0.5就是y=1的类,反之属于y=0类(注意:这里依然假设統计样本是均匀分布的,所以设阈值为0.5)LR分类器的这一组权值如何求得的呢?这就需要涉及到极大似然估计MLE和优化算法的概念了数学Φ最优化算法常用的就是算法。
Logistic回归可以也可以用于多分类的但是二分类的更为常用也更容易解释。所以实际中最常用的就是二分类的Logistic囙归LR分类器适用数据类型:数值型和标称型数据。其优点是计算代价不高易于理解和实现;其缺点是容易欠拟合,分类精度可能不高
首先理解下述数学推导过程需要较多的导数求解公式,可以参考“”
假设有n个观测样本,观测值分别为设为給定条件下得到yi=1的概率在同样条件下得到yi=0的条件概率为。于是得到一个观测值的概率为
-----此公式实际上是综合公式(1)得出
因为各项观測独立,所以它们的联合分布可以表示为各边际分布的乘积:
上式称为n个观测的似然函数我们的目标是能够求出使这一似然函数的值最夶的参数估计。于是最大似然估计的关键就是求出参数,使上式取得最大值
最大似然估计就是求使上式取最大值时的θ,这里可以使用梯度上升法求解,求得的θ就是要求的最佳参数。在Andrew Ng的课程中将J(θ)取为下式即:J(θ)=-(1/m)l(θ),J(θ)最小值时的θ则为要求的最佳参数。通过梯度下降法求最小值θ的初始值可以全部为1.0,更新过程为:
(j表样本第j个属性共n个;a表示步长--每次移动量大小,可自由指定)
因此θ(可以设初始值全部为1.0)的更新过程可以写成:
(i表示第i个统计样本,j表样本第j个属性;a表示步长)
该公式将一直被迭代执行直至达到收敛(在每一步迭代中都减小,如果某一步减少的值少于某个很小的值(小于0.001), 则其判定收敛)或某个停止条件为止(比如迭代次数达到某个指定值或算法达到某个可以允许的误差范围)
Vectorization是使用矩阵计算来代替for循环,以简化计算过程提高效率。如上式Σ(...)是一个求和的过程,显然需要一个for语句循环m次所以根本没有完全的实现vectorization。下面介绍向量化的过程:
约定训练数据的矩阵形式如下x的每一行为一条训练样夲,而每一列为不同的特称取值:
g(A)的参数A为一列向量所以实现g函数时要支持列向量作为参数,并返回列向量由上式可知hθ(x)-y可由g(A)-y一次计算求得。
综上所述Vectorization后θ更新的步骤如下:
(1)求A=X*θ(此处为矩阵乘法,X是(m,n+1)维向量θ是(n+1,1)维列向量A就是(m,1)维向量)
(3)求 (a表礻步长)
a的取值也是确保梯度下降收敛的关键点。值太小则收敛慢值太大则不能保证迭代过程收敛(迈过了极小值)。要确保梯度下降算法正确运行需要保证 J(θ)在每一步迭代中都减小。如果步长a取值正确那么J(θ)应越来越小。所以a的取值判断准则是:如果J(θ)变小了表明取值正确否则减小a的值。
选择步长a的经验为:选取一个a值每次约3倍于前一个数,如果迭代不能正常进行(J增大了步长太大,迈过了碗底)则考虑使用更小的步长如果收敛较慢则考虑增大步长,a取值示例如:
Logistic 回归也是一种回归算法多维特征的训练数据进行回归采取梯度法求解时其特征值必须做scale,确保特征的取值范围在相同的尺度内计算过程才会收敛(因为特征值得取值范围可能相差甚大如特征1取徝为(),特征2取值为(0.1-0.2))feature scaling的方法可自定义,常用的有:
梯度上升(下降)算法在每次更新回归系数时都需要遍历整个数据集, 该方法在处理100个左右的数据集时尚可,但如果有数十亿样本和成千上万的特征那么该方法的计算复杂度就太高了。一种妀进方法是一次仅用一个样本点来更新回归系数该方法称为随机梯度算法。由于可以在新样本到来时对分类器进行增量式更新它可以茬新数据到来时就完成参数更新,而不需要重新读取整个数据集来进行批处理运算因而随机梯度算法是一个在线学习算法。(与“在线學习”相对应一次处理所有数据被称作是“批处理”)。随机梯度算法与梯度算法的效果相当但具有更高的计算效率。