无法获得逻辑回归的成本函数

时间:2014-07-20 19:51:27

标签: 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.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都会得到不同的结果?感谢您的耐心等待,我刚刚开始学习机器!

1 个答案:

答案 0 :(得分:0)

这对于这些优化算法非常常见 - 您到达的最小值取决于您的重量初始化。您获得不同的最小值这一事实并不一定意味着您的实施有问题。相反,使用有限差分法检查您的渐变以确保它们是正确的,并查看您的火车/验证/测试准确度,看它们是否也可以接受。