선형 회귀
회귀 는 한 변수( y )와 다른 변수( x ) 간의 관계를 결정하는 방법 입니다.
통계에서 선형 회귀 는 y와 x 간의 선형 관계를 모델링하는 접근 방식입니다.
AI에서 선형 회귀는 지도 머신 러닝 알고리즘입니다.
산포도
이것은 (이전 장에서) 산점도 입니다.
예시
var xArray = [50,60,70,80,90,100,110,120,130,140,150];
var yArray = [7,8,8,9,9,9,10,11,14,14,15];
// Define Data
var data = [{
x:xArray,
y:yArray,
mode: "markers"
}];
// Define Layout
var layout = {
xaxis: {range: [40, 160], title: "Square Meters"},
yaxis: {range: [5, 16], title: "Price in Millions"},
title: "House Prices vs. Size"
};
Plotly.newPlot("myPlot", data, layout);
값 예측
위의 흩어진 데이터에서 미래 가격을 어떻게 예측할 수 있습니까?
- 손으로 그린 선형 그래프 사용
- 선형 관계 모델링
- 선형 회귀 모델링
선형 그래프
이것은 최저 가격과 최고 가격을 기반으로 가격을 예측하는 선형 그래프입니다.
예시
var xArray = [50,60,70,80,90,100,110,120,130,140,150];
var yArray = [7,8,8,9,9,9,9,10,11,14,14,15];
var data = [
{x:xArray, y:yArray, mode:"markers"},
{x:[50,150], y:[7,15], mode:"line"}
];
var layout = {
xaxis: {range: [40, 160], title: "Square Meters"},
yaxis: {range: [5, 16], title: "Price in Millions"},
title: "House Prices vs. Size"
};
Plotly.newPlot("myPlot", data, layout);
이전 장에서
선형 그래프는 y = ax + b 로 작성할 수 있습니다.
어디에:
- y 는 예측하려는 가격입니다.
- 는 선의 기울기입니다.
- x 는 입력 값입니다.
- b 는 절편
선형 관계
이 모델 은 가격과 크기 간의 선형 관계를 사용하여 가격을 예측합니다.
예시
var xArray = [50,60,70,80,90,100,110,120,130,140,150];
var yArray = [7,8,8,9,9,9,10,11,14,14,15];
// Calculate Slope
var xSum = xArray.reduce(function(a, b){return a + b;}, 0);
var ySum = yArray.reduce(function(a, b){return a + b;}, 0);
var slope = ySum / xSum;
// Generate values
var xValues = [];
var yValues = [];
for (var x = 50; x <= 150; x += 1) {
xValues.push(x);
yValues.push(x * slope);
}
위의 예에서 기울기는 계산된 평균이고 절편은 0입니다.
선형 회귀 함수 사용
이 모델 은 선형 회귀 함수를 사용하여 가격을 예측합니다.
예시
var xArray = [50,60,70,80,90,100,110,120,130,140,150];
var yArray = [7,8,8,9,9,9,10,11,14,14,15];
// Calculate Sums
var xSum=0, ySum=0 , xxSum=0, xySum=0;
var count = xArray.length;
for (var i = 0, len = count; i < count; i++) {
xSum += xArray[i];
ySum += yArray[i];
xxSum += xArray[i] * xArray[i];
xySum += xArray[i] * yArray[i];
}
// Calculate slope and intercept
var slope = (count * xySum - xSum * ySum) / (count * xxSum - xSum * xSum);
var intercept = (ySum / count) - (slope * xSum) / count;
// Generate values
var xValues = [];
var yValues = [];
for (var x = 50; x <= 150; x += 1) {
xValues.push(x);
yValues.push(x * slope + intercept);
}