첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
유용한 소스 코드가 있으면 icodebroker@naver.com으로 보내주시면 감사합니다.
블로그 자료는 자유롭게 사용하세요.

■ 최소 제곱법을 사용해 회귀분석 수식 구하기 예제

------------------------------------------------------------------------------------------------------------------------

using System;

using System.Collections.Generic;

 

List<Item> itemList = new List<Item>();

 

itemList.Add(new Item(1d  , 2.1d));

itemList.Add(new Item(3d  , 3.7d));

itemList.Add(new Item(2.5d, 3.4d));

itemList.Add(new Item(3.9d, 3.1d));

 

LeastSquaresMethod lsm = new LeastSquaresMethod(itemList);

 

Console.WriteLine(lsm.FactorA0);

Console.WriteLine(lsm.FactorA1);

------------------------------------------------------------------------------------------------------------------------

 

■ 최소 제곱법을 사용해 회귀분석 수식 구하기

------------------------------------------------------------------------------------------------------------------------

using System;

using System.Collections.Generic;

 

/// <summary>

/// 항목

/// </summary>

public struct Item

{

    //////////////////////////////////////////////////////////////////////////////////////////////////// Field

    ////////////////////////////////////////////////////////////////////////////////////////// Private

 

    #region Field

 

    /// <summary>

    /// X 값

    /// </summary>

    private double xValue;

 

    /// <summary>

    /// Y 값

    /// </summary>

    private double yValue;

 

    #endregion

 

    //////////////////////////////////////////////////////////////////////////////////////////////////// Property

    ////////////////////////////////////////////////////////////////////////////////////////// Public

 

    #region X 값 - XValue

 

    /// <summary>

    /// X 값

    /// </summary>

    public double XValue

    {

        get

        {

            return this.xValue;

        }

        set

        {

            this.xValue = value;

        }

    }

 

    #endregion

 

    #region Y 값 - YValue

 

    /// <summary>

    /// Y 값

    /// </summary>

    public double YValue

    {

        get

        {

            return this.yValue;

        }

        set

        {

            this.yValue = value;

        }

    }

 

    #endregion

 

    //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor

    ////////////////////////////////////////////////////////////////////////////////////////// Public

 

    #region 생성자 - Item(xValue, yValue)

 

    /// <summary>

    /// 생성자

    /// </summary>

    /// <param name="xValue">X 값</param>

    /// <param name="yValue">Y 값</param>

    public Item(double xValue, double yValue)

    {

        this.xValue = xValue;

        this.yValue = yValue;

    }

 

    #endregion

}

 

/// <summary>

/// 최소 제곱법

/// </summary>

public class LeastSquaresMethod

{

    //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor

    ////////////////////////////////////////////////////////////////////////////////////////// Private

 

    #region Field

 

    /// <summary>

    /// 항목 리스트

    /// </summary>

    private List<Item> itemList = new List<Item>();

 

    /// <summary>

    /// 계수 A0

    /// </summary>

    private double factorA0 = 0d;

 

    /// <summary>

    /// 계수 A1

    /// </summary>

    private double factorA1 = 0d;

 

    #endregion

 

    //////////////////////////////////////////////////////////////////////////////////////////////////// Property

    ////////////////////////////////////////////////////////////////////////////////////////// Public

 

    #region 계수 A0 - FactorA0

 

    /// <summary>

    /// 계수 A0

    /// </summary>

    public double FactorA0

    {

        get

        {

            return this.factorA0;

        }

    }

 

    #endregion

 

    #region 계수 A1 - FactorA1

 

    /// <summary>

    /// 계수 A1

    /// </summary>

    public double FactorA1

    {

        get

        {

            return this.factorA1;

        }

    }

 

    #endregion

 

    //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor

    ////////////////////////////////////////////////////////////////////////////////////////// Public

 

    #region 생성자 - LeastSquaresMethod(itemList)

 

    /// <summary>

    /// 생성자

    /// </summary>

    /// <param name="itemList">항목 리스트</param>

    public LeastSquaresMethod(List<Item> itemList)

    {

        this.itemList = itemList;

 

        Calculate();

    }

 

    #endregion

 

    //////////////////////////////////////////////////////////////////////////////////////////////////// Method

    ////////////////////////////////////////////////////////////////////////////////////////// Private

 

    #region 계산하기 - Calculate()

 

    /// <summary>

    /// 계산하기

    /// </summary>

    private void Calculate()

    {

        double sigmaX  = 0d;

        double sigmaY  = 0d;

        double sigmaXY = 0d;

        double sigmaX2 = 0d;

 

        for(int i = 0; i < this.itemList.Count; i++)

        {

            Item item = this.itemList[i];

 

            sigmaX  += item.XValue;

            sigmaY  += item.YValue;

            sigmaXY += item.XValue * item.YValue;

            sigmaX2 += item.XValue * item.XValue;

        }

 

        if(this.itemList.Count > 1)

        {

            this.factorA0 = (sigmaX2 * sigmaY - sigmaXY * sigmaX) / (this.itemList.Count * sigmaX2 - sigmaX * sigmaX);

            this.factorA1 = (this.itemList.Count * sigmaXY - sigmaX * sigmaY) / (this.itemList.Count * sigmaX2 - sigmaX * sigmaX);

        }

    }

 

    #endregion

}

------------------------------------------------------------------------------------------------------------------------

Posted by 사용자 icodebroker
TAG , ,

댓글을 달아 주세요