当前位置: 首页 > 编程笔记 >

c# 模拟线性回归的示例

晏昀
2023-03-14
本文向大家介绍c# 模拟线性回归的示例,包括了c# 模拟线性回归的示例的使用技巧和注意事项,需要的朋友参考一下

最近刚开始接触机器学习,在这里使用c#模拟一元线性回归,先上图看效果

因为源码中有一些控件是自己封装的,所以就不上传可运行的程序集了,贴出核心代码,以供参考,如有不对,请多多给予建议

private void ryButtonX1_Click(object sender, EventArgs e)
    {
      string[] xnum = richTextBox1.Text.Trim().Split(',');//x值
      string[] ynum = richTextBox2.Text.Trim().Split(',');//y值
      if (xnum.Length != ynum.Length)
      {
        MessageBox.Show("输入数据有误!");
        return;
      }
      ryTextBoxX1.Text = xnum.Length+"";//个数
      decimal xsum = 0;//x值求和
      decimal ysum = 0;//y值求和
      for(int i = 0; i < xnum.Length; i++)
      {
        xsum = xsum + ConvertExtend.ToDecimal(xnum[i],0);
        ysum = ysum + ConvertExtend.ToDecimal(ynum[i], 0);
      }
      decimal xAve = ConvertExtend.ToDecimal(xsum / xnum.Length, 0);//x平均值
      decimal yAve = ConvertExtend.ToDecimal(ysum / xnum.Length, 0);//y平均值

      ryTextBoxX3.Text = string.Format("{0:N}", xAve);//保留两位小数
      ryTextBoxX4.Text = string.Format("{0:N}", yAve);

      decimal molecule = 0;//分子
      decimal Denominator = 0;//分母
      for (int i = 0; i < xnum.Length; i++)
      {
        molecule = molecule + (ConvertExtend.ToDecimal(xnum[i], 0) - xAve) * (ConvertExtend.ToDecimal(ynum[i], 0) - yAve);
        Denominator = Denominator+(ConvertExtend.ToDecimal(xnum[i], 0) - xAve) * (ConvertExtend.ToDecimal(xnum[i], 0) - xAve);
      }
      ryTextBoxX2.Text = string.Format("{0:N}", molecule / Denominator);//斜率
      ryTextBoxX5.Text = (yAve - (molecule / Denominator) * xAve)+"";//截距

      if (ConvertExtend.ToDecimal(ryTextBoxX5.Text, 0) < 0)
      {
        ryTextBoxX6.Text = ryTextBoxX2.Text + "X" + ryTextBoxX5.Text;
      }else
      {
        ryTextBoxX6.Text = ryTextBoxX2.Text + "X+" + ryTextBoxX5.Text;
      }

      #region 画点
      chartLabTrend.ChartAreas[0].AxisX.CustomLabels.Clear();
      List<decimal?> lx = new List<decimal?>();
      List<decimal?> l1 = new List<decimal?>();
      for (int i = 1; i <= xnum.Length; i++)
      {
        CustomLabel label1 = new CustomLabel();
        if (xnum[i - 1] != "")
        {
          label1.Text = ConvertExtend.ToDecimal(xnum[i - 1],0).ToString();
          label1.ToPosition = i * 2;
          chartLabTrend.ChartAreas[0].AxisX.CustomLabels.Add(label1);
          label1.GridTicks = GridTickTypes.Gridline;
          lx.Add(i);
          if (ynum[i - 1] == null)
          {
            l1.Add(null);
          }
          else
          {
            l1.Add(ConvertExtend.ToDecimal(ynum[i - 1],0));
          }
        }
      }
      chartLabTrend.Series[0].Points.DataBindXY(lx, l1);
      #endregion

      #region 画线
      chartLabTrend.ChartAreas[0].AxisX.CustomLabels.Clear();
      List<decimal?> lx1 = new List<decimal?>();
      List<decimal?> l11 = new List<decimal?>();
      for (int i = 1; i <= xnum.Length; i++)
      {
        CustomLabel label2 = new CustomLabel();
        if (xnum[i - 1] != "")
        {
          label2.Text = ConvertExtend.ToDecimal(xnum[i - 1], 0).ToString();
          label2.ToPosition = i * 2;
          chartLabTrend.ChartAreas[0].AxisX.CustomLabels.Add(label2);
          label2.GridTicks = GridTickTypes.Gridline;
          lx1.Add(i);
          if (ynum[i - 1] == null)
          {
            l11.Add(null);
          }
          else
          {
            l11.Add(ConvertExtend.ToDecimal(ConvertExtend.ToDecimal(xnum[i - 1],0)*molecule / Denominator
              + ConvertExtend.ToDecimal(ryTextBoxX5.Text,0), 0));
          }
        }
      }
      chartLabTrend.Series[1].Points.DataBindXY(lx1, l11);
      #endregion

    }

以上就是c# 模拟线性回归的示例的详细内容,更多关于c# 模拟线性回归的资料请关注小牛知识库其它相关文章!

 类似资料:
  •   回归问题的条件或者说前提是 1) 收集的数据 2) 假设的模型,即一个函数,这个函数里含有未知的参数,通过学习,可以估计出参数。然后利用这个模型去预测/分类新的数据。 1 线性回归的概念   线性回归假设特征和结果都满足线性。即不大于一次方。收集的数据中,每一个分量,就可以看做一个特征数据。每个特征至少对应一个未知的参数。这样就形成了一个线性模型函数,向量表示形式:   这个就是一个组合问题,

  • 线性回归模型(linear regression) 1.模型定义 给定数据集,$$T={(x{(1)},y{(1)}),(x{(2)},y{(2)}),...,(x{(m)},y{(m)})}$$,其中$$x{(i)}=(1, x_1, x_2, ..., x_n)T\in X= R{n+1}$$,$$y{(i)}\in Y=R$$,线性回归模型试图学到一个通过属性的线性组合来进行预测的函数,即

  • 1 普通线性模型   普通线性模型(ordinary linear model)可以用下式表示: Y = \beta0 + \beta_1 x_1 + \beta_2 x_2 + … + \beta{p-1} x_{p-1} + \epsilon   这里$\beta$是未知参数,$\epsilon$是误差项。普通线性模型主要有以下几点假设: 响应变量$Y$和误差项$\epsilon$均服从正太分

  • 线性回归是最简单的回归方法,它的目标是使用超平面拟合数据集,即学习一个线性模型以尽可能准确的预测实值输出标记。 单变量模型 模型 $$f(x)=w^Tx+b$$ 在线性回归问题中,一般使用最小二乘参数估计($$L_2$$损失),定义目标函数为 $$J={\arg min}{(w,b)}\sum{i=1}^{m}(y_i-wx_i-b)^2$$ 均方误差(MSE) $$MSE = \frac{1}{

  • 线性回归输出是一个连续值,因此适用于回归问题。回归问题在实际中很常见,如预测房屋价格、气温、销售额等连续值的问题。与回归问题不同,分类问题中模型的最终输出是一个离散值。我们所说的图像分类、垃圾邮件识别、疾病检测等输出为离散值的问题都属于分类问题的范畴。softmax回归则适用于分类问题。 由于线性回归和softmax回归都是单层神经网络,它们涉及的概念和技术同样适用于大多数的深度学习模型。我们首先

  • 本例仅使用糖尿病数据集的第一个特征,来展示线性回归在二维空间上的表现。下图中的直线, 即是线性回归所确定的一个界限,其目标是使得数据集中的实际值与线性回归所得的预测值之间的残差平方和最小。 同时也计算了回归系数、残差平方和以及解释方差得分,来判断该线性回归模型的质量。 原文解释和代码不符合: 实际上计算了回归系数, 均方误差(MSE),判定系数(r2_score) 判定系数和解释方差得分并不绝对相