본문 바로가기
프로그래밍/머신러닝

단순 선형 회귀(LinearRegression)_파이썬으로 머신러닝 배우기

by 조크리 2021. 4. 9.
반응형

파이썬으로 머신러닝 배우기!

 

오늘의 목표

 

1. 단순 선형 회귀에 대해 알아본다. 

 

 

 

1. 단순 선형 회귀 

 

단순 선형 회귀는 '독립변수'와 '종속변수'가 선형적인 관련성이 있다는 전제 하에

 

변수들간의 관계를 선형 함수식으로 모형화하기 위한 분석방법이다. 

 

컴퓨터는 데이터와 일차 방정식 선 사이의 차이를 가장 적게 하는 식을 계속 찾아 나가면서 최종적인 함수식을 찾는다. 

 

출처 https://walkingwithus.tistory.com/606
출처 https://walkingwithus.tistory.com/606

 

2. 단순 선형 회귀 모델

 

단순 선형 회귀 모델의 간단한 예시를 살펴보자!

 

Y = W * X + B

W는 Weight를 의미하고 B는 Bias를 의미한다. 

 

X와 Y 의 관계를 가지고 W와 B를 만들어가는 과정이다. 

 

 

키 = W * 몸무게 + B

한국 주식 = W * 미국주식 + B

자동차 수 = W * 국민소득 + B 

 

 

3. 단순 선형 회귀 예시 

아래의 코드를 보자면

import matplotlib.pyplot as plt
import numpy as np
x = np.random.rand(20, 1)
y = 5 * x + 2

plt.scatter(x, y, marker = '+')
print(x, y)
plt.show()

numpy 패키지 내의 random 모듈의 rand 함수를 활용하면 0이상 1미만

즉  [0, 1]의 난수를 생성할 수 있다. 

 

예를 들어, np.random.rand(2, 5)를 입력하면 0이상 1미만의 난수들을 요소로 하는 2 x 5 배열을 생성해준다. 

20 x 1 형태의 배열을 생성하고 싶다면, np.randmo.rand(20, 1)을 입력해주면 된다. 

 

따라서 x는 0부터 1미만의 20개의 난수을 가진 리스트가 만들어진다. 

만약 rand(20, 2) 라고 하면 40개의 항목이 만들어진다. 

 

y는 리스트에 속해 있는 값에 5를 곱한 뒤 2를 더한 값들이 저장된다. 

 

그 후에 print(x, y)를 했기 때문에 console창에 x리스트와 y리스트가 출력되고

 

plt.show()명령을 했기 때문에 그래프가 나온다. 

 

repl.it에서 실행한 결과
console창에 print(x, y)명령이 실행됨

 

4. 임의의 데이터 생성 단순 선형 회귀 예시 2 

 

x값 = 임의의 값 20개 * 5 = 100개

x값 범위 = 0과 10 사이의 임의의 수

 

y값 범위 = 5 * x + 10 

import matplotlib.pyplot as plt
import numpy as np
#x라는 리스트 생성, 리스트에는 0이상1미만 20*5배열 생성
x = np.random.rand(20, 5)
x = x * 10 
y = 5 * x + 10
#그래프에 + 모양으로 나타내기 
plt.scatter(x, y, marker = '+')

print(x, y)
plt.show()

 

 

repl.it에서 실행한 모습
x리스트와 y리스트가 출력된 모습

 

5. 학습 - 회귀식 만들기 

 

x값 - 100개 (0에서 10사이 값)

x값을 가지고 y 식을 만들어보자! 

만들고자 하는 식: y= 5 * x + 10 

 

from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plot
import numpy as np
import sklearn

x = np.random.rand(20,1)
x = x * 10 
y = 5 * x + 10

model = LinearRegression()
model.fit(x, y)

print('기울기 a : ', model.coef_)
print('y절편 b : ', model.intercept_)
print('\n')

 

6. y값에 오차를 추가

 

y값에 오차를 추가해보자! 오차는 3정도로 한다. 

from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plot
import numpy as np
import sklearn

x = np.random.rand(20,1)
x = x * 10 
y = 5 * x + 10
#y값에 오차 3정도를 추가함 
y = y + 3*np.random.rand(20, 1)

model = LinearRegression()
model.fit(x, y)
#y_p를 만들어서 예측함
y_p = model.predict(x)

print('기울기 a : ', model.coef_)
print('y절편 b : ', model.intercept_)
plot.scatter(x, y, marker = '+')
plot.scatter(x, y_p, marker = 'o')
plot.show()

결과는 아래와 같고 

y = 4.977 * x + 11.389

가 나오게 된다. 

 

 

7. 분석 방법(상관계수)

 

상관계수란? 두 변수 x, y 사이의 상관관계를 나타내는 수치이다. 

 

상관계수가 1에 가까울 수록 더욱 좋다고 볼 수 있다. 

 

6번의 경우 상관계수가 0.99가 넘게 나왔다. 

 

8. 수학 성적 데이터가 총점을 예측하는 회귀 식

 

수학 성적 데이터가 총점을 예측하는 회귀 식을 만들어보자!

 

from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plot
import numpy as np
import sklearn
import pandas as pd
import openpyxl

data = pd.read_excel("student.xlsx", header=0)
print(data)
newData = data[['kor', 'eng', 'math', 'social', 'science', 'total']]
print(newData)
print(newData.head())
print(newData.info())
print(newData.describe())
print('\n')
#단순 회귀 모델 생성
model = LinearRegression()
#속성(변수)선택
x = newData[['math']]
y = newData[['total']]
model.fit(x, y)
#예측 모델 생성
y_p = model.predict(x)

print(x)
print(y)
print('기울기 a : ', model.coef_)
print('y절편 : ', model.intercept_)
#결정계수
relation_square = model.score(x, y)
print('결정계수 : ', relation_square)

plot.scatter(x, y, marker = '+')
plot.scatter(x, y_p, marker = 'o')
plot.show()

 

replit 에서 확인해보았다!

 

엑셀 파일에 입력한 자료들로 회귀식을 만들어본 결과!

 

총점 = 2.246 * 수학 + 196.03 

 

이 나왔고

 

상관계수는 0.397로 딱히 연관성이 없다고 보여진다~

 

 

 

반응형