我正在尝试通过自己在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都会得到不同的结果?感谢您的耐心等待,我刚刚开始学习机器!
答案 0 :(得分:0)
这对于这些优化算法非常常见 - 您到达的最小值取决于您的重量初始化。您获得不同的最小值这一事实并不一定意味着您的实施有问题。相反,使用有限差分法检查您的渐变以确保它们是正确的,并查看您的火车/验证/测试准确度,看它们是否也可以接受。