C# Can';t获取逻辑回归的成本函数

C# Can';t获取逻辑回归的成本函数,c#,machine-learning,logistic-regression,C#,Machine Learning,Logistic Regression,我试图通过自己用C#编写代码来实现逻辑回归。我找到了一个库(Accord.NET),我用它来最小化成本函数。然而,我总是得到不同的最小值。因此,我认为我写的成本函数可能有问题 static double costfunction(double[] thetas) { int i = 0; double sum = 0; double[][] theta_matrix_transposed = MatrixCreate(1, thetas.L

我试图通过自己用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都会得到不同的结果?谢谢你的耐心,我才刚刚开始机器学习

这在这些优化算法中非常常见-您达到的最小值取决于您的权重初始化。得到不同的最小值并不一定意味着实现出了问题。相反,使用有限差分法检查梯度以确保其正确,并查看训练/验证/测试精度以确定其是否也可接受。

什么时候逻辑回归有多个最小值?当然,它可以有多个最小值,这取决于您的问题和权重初始化。例如,如果您在每次运行程序时随机初始化权重并绘制逻辑回归的决策函数,您将看到每次都略有不同(除非问题/数据极其琐碎)。这是在成本函数中得到不同的最小值的结果。凸函数(逻辑回归误差函数)的定义必须与当时世界上其他函数的定义不同。像成本函数这样的凸函数必须具有全局最小值。我已经运行了进一步的测试,似乎对于某些初始值,它返回正确的结果,但对于其他值,它不会返回正确的结果,从而产生错误。事实上,在成本函数中,软件可能需要计算log(0)。在这些情况下,最小化不起作用。