为什么逻辑回归的成本函数具有对数表达式?

时间:2015-10-07 07:23:35

标签: machine-learning logistic-regression logarithm

逻辑回归的成本函数是

cost(h(theta)X,Y) = -log(h(theta)X) or -log(1-h(theta)X)

我的问题是将对数表达式用于成本函数的基础是什么。它来自何处?我相信你不能只是把#34; -log"从哪儿冒出来。如果有人能解释成本函数的推导,我将不胜感激。谢谢。

5 个答案:

答案 0 :(得分:47)

  

来源:由Andrew Ng在Standford's Machine Learning course in Coursera期间拍摄的自己的笔记。所有归功于他和这个组织。该课程是免费提供给任何人按自己的节奏。图像由我自己使用LaTeX(公式)和R(图形)制作。

假设函数

当想要预测的变量 y 只能采用离散值(即:分类)时,使用逻辑回归。

考虑二进制分类问题( y 只能采用两个值),然后有一组参数θ和一组输入要素 x ,可以定义假设函数,使其在[0,1]之间有界,其中 g()表示sigmoid函数:

enter image description here

此假设函数同时表示由θ参数化的输入 x 上的 y = 1 的估计概率:

enter image description here

成本函数

成本函数代表优化目标。

enter image description here

尽管成本函数的可能定义可能是假设h_θ(x)与实际值 y 之间的欧几里德距离的平均值。 > m 训练集中的样本,只要假设函数由sigmoid函数形成,此定义将导致非凸成本函数,这意味着局部最小值在达到全球最低标准之前很容易找到。为了确保成本函数是凸的(因此确保收敛到全局最小值),使用sigmoid函数的对数转换成本函数。

enter image description here

这样,优化目标函数可以定义为训练集中成本/错误的平均值:

enter image description here

答案 1 :(得分:12)

这个成本函数只是最大 - (对数)可能性标准的重新制定。

逻辑回归的模型是:

P(y=1 | x) = logistic(θ x)
P(y=0 | x) = 1 - P(y=1 | x) = 1 - logistic(θ x)

可能性写为:

L = P(y_0, ..., y_n | x_0, ..., x_n) = \prod_i P(y_i | x_i)

对数似然是:

l = log L = \sum_i log P(y_i | x_i)

我们希望找到最大化可能性的θ:

max_θ \prod_i P(y_i | x_i)

这与最大化对数似然相同:

max_θ \sum_i log P(y_i | x_i)

我们可以将其重写为成本C = -l:

的最小化
min_θ \sum_i - log P(y_i | x_i)
  P(y_i | x_i) = logistic(θ x_i)      when y_i = 1
  P(y_i | x_i) = 1 - logistic(θ x_i)  when y_i = 0

答案 2 :(得分:7)

我的理解(这里不是100%的专家,我可能错了)是 char *p = horiz; for (cc = 0; cc < width; cc++) { int len; sscanf(p, "%f%n", &array[ii][cc], &len); p += len; } 可以大致解释为取消$.each(delschboxloglist , function (idx, idv) { //idx is the index, idv is the object at that index var description = idv.Description; //do the same for the remaining properties here... } public class ProductTypeAssign { public string ProductLineTypeID { get; set; } public bool SelectProductLine { get; set; } public string Description { get; set; } public List<ProductTypeAssign> dataList { get; set; } public ProductTypeAssign data = null; public string UId { get; set; } } public ActionResult Index() { var test ="[" + "{\"Description\":\"Avantis\",\"ProductLineTypeID\":\"1\",\"SelectProductLine\":true,\"uid\":0}," + "{\"Description\":\"Customer FIRST Support\",\"ProductLineTypeID\":\"2\",\"SelectProductLine\":true,\"uid\":1}," + "{\"Description\":\"Eurotherm\",\"ProductLineTypeID\":\"3\",\"SelectProductLine\":false,\"uid\":2}," + "{\"Description\":\"Foxboro IA\",\"ProductLineTypeID\":\"18\",\"SelectProductLine\":false,\"uid\":3}," + "{\"Description\":\"Foxboro & Eckardt Measurement and Instrument\",\"ProductLineTypeID\":\"4\",\"SelectProductLine\":false,\"uid\":4}," + "{\"Description\":\"Foxboro SCADA\",\"ProductLineTypeID\":\"19\",\"SelectProductLine\":false,\"uid\":5}," + "{\"Description\":\"IMServ\",\"ProductLineTypeID\":\"5\",\"SelectProductLine\":false,\"uid\":6}," + "{\"Description\":\"InFusion\",\"ProductLineTypeID\":\"6\",\"SelectProductLine\":false,\"uid\":7}," + "{\"Description\":\"SimSci\",\"ProductLineTypeID\":\"7\",\"SelectProductLine\":false,\"uid\":8}," + "{\"Description\":\"Skelta\",\"ProductLineTypeID\":\"20\",\"SelectProductLine\":false,\"uid\":9}," + "{\"Description\":\"Triconex\",\"ProductLineTypeID\":\"8\",\"SelectProductLine\":false,\"uid\":10}," + "{\"Description\":\"Wonderware\",\"ProductLineTypeID\":\"9\",\"SelectProductLine\":false,\"uid\":11}" + "]"; var products = new JavaScriptSerializer().Deserialize<List<ProductTypeAssign>>(test); } 的公式中出现log概率密度。 (请记住exp。)

如果我正确理解Bishop [1]:当我们假设我们的正负训练样本来自两个不同的高斯聚类(不同的位置但相同的协方差)时,我们就可以开发出一个完美的分类器。而且这个分类器看起来就像逻辑回归(例如线性决策边界)。

当然,接下来的问题是,当我们的训练数据经常看起来不同时,为什么我们应该使用最适合分离高斯群的分类器呢?

[1]模式识别和机器学习,Christopher M. Bishop,第4.2章(概率生成模型)

答案 3 :(得分:1)

我无法确定“凸”点的答案。相反,我更喜欢对刑罚程度的解释。对数成本函数会严重惩罚自信和错误的预测。 如果我使用MSE的成本函数,如下所示。

If y=1 cost=(1-yhat)^2; if y=0 cost=yhat^2.

here

这个成本函数也是凸的。但是,它并不像原木成本那样凸出。 如果我对凸的定义有误,请告诉我。我是回归的初学者。

答案 4 :(得分:0)

问题是成本函数(Sigmoid函数)将返回[0,1]之间的输出,但是当我们在较大的数据点上对Sigmoid值求和时,由于Sigmoid函数的结果,我们可能会遇到数值稳定性问题可能是非常小的十进制数字。 在S型函数上使用log()函数还可以解决出现的数值计算问题,而不会真正影响优化目标。