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

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

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

//测试数据(按列排的,使用期间对数据进行了中心化)
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 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀