파이썬으로 머신러닝 배우기!
오늘의 목표
1. 단순 선형 회귀에 대해 알아본다.
1. 단순 선형 회귀
단순 선형 회귀는 '독립변수'와 '종속변수'가 선형적인 관련성이 있다는 전제 하에
변수들간의 관계를 선형 함수식으로 모형화하기 위한 분석방법이다.
컴퓨터는 데이터와 일차 방정식 선 사이의 차이를 가장 적게 하는 식을 계속 찾아 나가면서 최종적인 함수식을 찾는다.
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()명령을 했기 때문에 그래프가 나온다.
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()
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()
엑셀 파일에 입력한 자료들로 회귀식을 만들어본 결과!
총점 = 2.246 * 수학 + 196.03
이 나왔고
상관계수는 0.397로 딱히 연관성이 없다고 보여진다~
'프로그래밍 > 머신러닝' 카테고리의 다른 글
집값과 경기종합지수의 상관관계_파이썬으로 머신러닝 배우기 (0) | 2021.04.19 |
---|---|
삼성전자, 현대자동차, LG화학 주가와 KOSPI 주가의 상관 관계 분석_파이썬으로 머신러닝 배우기 (0) | 2021.04.16 |
다중 선형 회귀_파이썬으로 머신러닝 배우기 (0) | 2021.04.14 |
단순 선형 회귀 2차식, 3차식, n차식까지 만들기(PolynomialFeatures)_파이썬으로 머신러닝 배우기 (0) | 2021.04.12 |
Machine Learning이란? pip install 모듈 설치하기_파이썬으로 머신러닝 배우기 (0) | 2021.04.07 |