■ 최소 제곱법을 사용해 회귀분석 수식 구하기 예제
------------------------------------------------------------------------------------------------------------------------
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
}
------------------------------------------------------------------------------------------------------------------------
'C# > Common' 카테고리의 다른 글
[C#/COMMON] 최대 공약수 구하기 (0) | 2014.11.30 |
---|---|
[C#/COMMON] 팩토리얼 구하기 (0) | 2014.11.30 |
[C#/COMMON] 네트워크 드라이브 연결 끊기 (0) | 2014.11.30 |
[C#/COMMON] 네트워크 드라이브 연결하기 (0) | 2014.11.30 |
[C#/COMMON] MethodBase 클래스 : GetCurrentMethod 정적 메소드를 사용해 현재 실행 중인 메소드명 구하기 (0) | 2014.11.30 |
[C#/COMMON] 최소 제곱법을 사용해 회귀분석 수식 구하기 (0) | 2014.11.30 |
[C#/COMMON] 다각형 내부 위치 여부 구하기 (0) | 2014.11.30 |
[C#/COMMON] 시작 애플리케이션 설정하기 (0) | 2014.11.30 |
[C#/COMMON] Process 클래스 : Start 메소드를 사용해 커맨드 창 실행하기 (0) | 2014.11.30 |
[C#/COMMON] Process 클래스 : Start 메소드를 사용해 인터넷 익스플로러 실행하기 (0) | 2014.11.30 |
[C#/COMMON] 조합 정렬하기 (0) | 2014.11.30 |
댓글을 달아 주세요