在上一篇博文中,我们成功构建了logistic回归的数学模型,但是和的值应该如何确定呢?
那么我们就需要用到训练集,让模型进行监督学习,训练集中包含自变量和对应的正确的输出,我们需要做的就是不断调整和的取值,使得模型对于训练集中自变量的输出能最优地符合训练集中标定好的正确结果。下面我们具体来谈一谈如何实现对模型的训练。
为了完成上诉训练,我们需要知道模型的结果与正确结果的相差几何,基于此,我们很容易想到可以模仿概率论对方差的定义,构造一个损失函数用来衡量算法的运行效果,于是我们可以构造损失函数来表示对于单个训练样本的预测值和正确值的差距,那么此时我们只需要取得损失函数的最小值,便可以得到logistic模型最优的运行效果,但是这里又有另一个问题,即优化问题,我们应该如何取得损失函数的最小值?
这里需要引入一个凸优化的概念,如果一个函数是凸函数,那么我们很容易就可以取得它的最值(即最优值)。如图:
通过对函数的导数进行逼近,很容易找到导数为0的那个取值,因为凸函数的特性,这个导数为0的值便是最值,也就可以得到模型最优的取值了。
但是如果函数是非凸函数,如图:
此时导数为0的点不止一个,也就没办法仅仅通过梯度下降的方法得到最值,那么计算起来就会很复杂。
本着算法设计应该以优美、简洁、适用面广的原则,非凸函数显然不适合用来做损失函数的数学模型,那么理想的损失函数应该就是凸函数。显然前面提及的损失函数并不是一个凸函数,那么我们应该构造一个既能体现预测值与正确值差距、又有凸特性的函数。这个函数就是。
前面我们已经解决了对于单个训练样本预测效果的数学表达,并且已经知道,通过调整和的值使得损失函数取得最值(或接近最值)便可以得到模型的最优化,但是我们也知道,对于单个样本,预测再准也不具有统计意义上的可靠性,我们需要对大量的训练样本进行预测,并取整体上的最优值才行。于是进一步的,可以定义一个成本函数来表示整体的损失程度。然后通过使取得最值来优化模型。