不能让逻辑回归的成本函数工作
本文关键字:函数 工作 回归 不能 | 更新日期: 2023-09-27 18:14:00
我试图通过自己在c#中编写代码来实现逻辑回归。我找到了一个库(Accord.NET),我用它来最小化成本函数。但是我总是得到不同的最小值。因此,我认为我写的成本函数可能有问题。
static double costfunction(double[] thetas)
{
int i = 0;
double sum = 0;
double[][] theta_matrix_transposed = MatrixCreate(1, thetas.Length);
while(i!=thetas.Length) { theta_matrix_transposed[0][i] = thetas[i]; i++;}
i = 0;
while (i != m) // m is the number of examples
{
int z = 0;
double[][] x_matrix = MatrixCreate(thetas.Length, 1);
while (z != thetas.Length) { x_matrix[z][0] = x[z][i]; z++; } //Put values from the training set to the matrix
double p = MatrixProduct(theta_matrix_transposed, x_matrix)[0][0];
sum += y[i] * Math.Log(sigmoid(p)) + (1 - y[i]) * Math.Log(1 - sigmoid(p));
i++;
}
double value = (-1 / m) * sum;
return value;
}
static double sigmoid(double z)
{
return 1 / (1 + Math.Exp(-z));
}
x是代表训练集的列表的列表,每个特征一个列表。代码有什么问题?为什么每次运行L-BFGS都会得到不同的结果?谢谢你的耐心,我刚刚开始学习机器学习!
这在这些优化算法中是很常见的——你得到的最小值取决于你的权重初始化。你得到不同的最小值并不一定意味着你的实现出了问题。相反,使用有限差分方法检查你的梯度以确保它们是正确的,并查看你的训练/验证/测试准确性,看看它们是否也是可接受的。