JAYLEE900 2023-07-25 21:11 采纳率: 37.5%
浏览 11

采用梯度下降的逻辑回归效果差,求分析

逻辑回归采用对数据二分类结果很差,找不到原因,是我的梯度下降有问题吗?求各位给分析分析

//测试数据(按列排的,使用期间对数据进行了中心化)
double[,] xTraMat = {{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}
                                ,{18,21,23,23,28,31,36,42,46,48,55,56,58,18,20,25,27,28,30,32,33,33,38,41,45,48,52,56}
                                ,{850,1200,850,950,1200,850,1500,1000,950,1200,1800,2100,1800,850,1000,1200,1300,1500,950,1000,1800,1000,1200,1500,1800,1000,1500,1800}
                                 };
//测试标签
double[,] yDatas = {{0,0,1,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,1}};

double[,] rBeta = Regression.FGDInLogisticRegression(csx, yMat, 0.05, 10000);
            string[] strs = new string[(int)n];
            for (int i = 0; i < n; i++)
            {
                double verf = Regression.Sigmoid(Matrix.MultiplyMatrix(Matrix.VectorGenerate(Matrix.MatrixGetVector(csx, i, true), true), rBeta)[0, 0]);
                strs[i]= $"Real:{yMat[i, 0]}" + "," + $"Verf:{verf}";
            }

public static double[,] FGDInLogisticRegression(double[,] x, double[,] y,double alpha,int iterations)
        {
            int n = x.GetLength(0);
            int p = x.GetLength(1);
            double[,] xTran= Matrix.Transpose(x);
            double epsilon = 1e-8;
            double[,] beta = new double[p, 1];
            for(int t = 0; t < iterations; t++)
            {
                double[,] error = new double[n, 1];
                //计算当前beta系数下,损失函数对未知参数梯度(在此选择全部样本)
                for (int i = 0; i < n; i++)
                {
                    double[,] currRow = Matrix.VectorGenerate(Matrix.MatrixGetVector(x, i, true), true);
                    error[i, 0] = y[i, 0] - Sigmoid(Matrix.MultiplyMatrix(currRow, beta)[0, 0]);
                }
                double[,] dl = new double[p, 1];
                dl = Matrix.MultiplyConst(Matrix.MultiplyMatrix(xTran, error),1.0/(double)n);//梯度值
                if (Matrix.Norm(dl, 1) < epsilon)
                {
                    break;
                }
                beta = Matrix.AddMatrix(beta, Matrix.MultiplyConst(dl, alpha));//梯度递减迭代
            }
            return beta;
        }

验证结果

img

img

img

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-07-26 08:52
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 7月25日

悬赏问题

  • ¥15 c#如何使用scottplot给已画好的自定义热度图,增加一个一定的colorbar
  • ¥15 信贷平台.用户信用评估和风险评估怎么做,希望来个做过的Java.有合作的机会
  • ¥15 IMageEN获得图形顶点坐标的问题
  • ¥50 软件PC客户端抓包,获取http请求和响应
  • ¥15 手机被安装黑客软件怎么办?
  • ¥15 Windows C++ PaddleOcr 中文模型的训练方法
  • ¥15 c# 用scottplot画 以时间为纵坐标,数值为横坐标画曲线图
  • ¥15 手机应用程序安装异常
  • ¥15 grbl的G92修改MPos的问题。
  • ¥15 vue2中,Ant Design Pro s-table中,使用服务端排序怎么做