逻辑回归的成本函数是
cost(h(theta)X,Y) = -log(h(theta)X) or -log(1-h(theta)X)
我的问题是将对数表达式用于成本函数的基础是什么。它来自何处?我相信你不能只是把#34; -log"从哪儿冒出来。如果有人能解释成本函数的推导,我将不胜感激。谢谢。
答案 0 :(得分:47)
来源:由Andrew Ng在Standford's Machine Learning course in Coursera期间拍摄的自己的笔记。所有归功于他和这个组织。该课程是免费提供给任何人按自己的节奏。图像由我自己使用LaTeX(公式)和R(图形)制作。
当想要预测的变量 y 只能采用离散值(即:分类)时,使用逻辑回归。
考虑二进制分类问题( y 只能采用两个值),然后有一组参数θ和一组输入要素 x ,可以定义假设函数,使其在[0,1]之间有界,其中 g()表示sigmoid函数:
此假设函数同时表示由θ参数化的输入 x 上的 y = 1 的估计概率:
成本函数代表优化目标。
尽管成本函数的可能定义可能是假设h_θ(x)与实际值 y 之间的欧几里德距离的平均值。 > m 训练集中的样本,只要假设函数由sigmoid函数形成,此定义将导致非凸成本函数,这意味着局部最小值在达到全球最低标准之前很容易找到。为了确保成本函数是凸的(因此确保收敛到全局最小值),使用sigmoid函数的对数转换成本函数。
这样,优化目标函数可以定义为训练集中成本/错误的平均值:
答案 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.
这个成本函数也是凸的。但是,它并不像原木成本那样凸出。 如果我对凸的定义有误,请告诉我。我是回归的初学者。
答案 4 :(得分:0)
问题是成本函数(Sigmoid函数)将返回[0,1]之间的输出,但是当我们在较大的数据点上对Sigmoid值求和时,由于Sigmoid函数的结果,我们可能会遇到数值稳定性问题可能是非常小的十进制数字。 在S型函数上使用log()函数还可以解决出现的数值计算问题,而不会真正影响优化目标。