Processing math: 100%

代价函数

定义代价函数用来拟合逻辑回归的参数,这便是监督学习问题中的逻辑回归模型的拟合问题。

线性回归模型的代价函数是所有模型误差的平方和。理论上来说,对逻辑回归模型也可以沿用这个定义,但是问题在于,当我们将hθ(x)=11+eθTX带入到这样的代价函数中时,得到的代价函数将是一个非凸函数(non-convex function)。

这意味着我们的代价函数有许多局部最小值,这将影响梯度下降算法寻找全局最小值。

线性回归的代价函数为:

J(θ)=1mmi=112(hθ(x(i))y(i))2

重新定义逻辑回归的代价函数为: J(θ)=1mmi=1Cost(hθ(x(i)),y(i)) ,其中

hθ(x)Cost(hθ(x),y)之间的关系如下图所示:

这样构建的Cost(hθ(x),y)函数的特点是:

当实际的 y=1 且hθ(x)也为1 时误差为 0,当 y=1 但hθ(x)不为 1 时误差随着hθ(x)的变小而变大;

当实际的 y=0 且hθ(x)也为 0 时代价为 0,当 y=0 但hθ(x)不为 0 时误差随着 hθ(x)的变大而变大。

将构建的Cost(hθ(x),y)简化如下:
Cost(hθ(x),y)=y×log(hθ(x))(1y)×log(1hθ(x)) 带入代价函数得到: J(θ)=1mmi=1[y(i)log(hθ(x(i)))(1y(i)log(1hθ(x(i)))] 即: J(θ)=1mmi=1[y(i)log(hθ(x(i)))+(1y(i)log(1hθ(x(i)))]

牛刀小试

Todo: 补全下方的 cost 逻辑回归的代价函数

# 逻辑回归代价函数的Python代码实现:
import numpy as np
def cost(theta, X, y):
    theta = np.matrix(theta)
    X = np.matrix(X)
    y = np.matrix(y)
    first = np.multiply(-y, np.log(sigmoid(X * theta.T)))
    # Todo: 补全  second  
    second = np.multiply((1 - y), np.log(1 - sigmoid(X * theta.T)))
    return np.sum(first - second) / (len(X))

Start interactive mode