




종속변수 = 예측값
독립변수 = 입력특성
기울기 = 가중치(weight)
-> y=wx+b라고 표현 많이 한다

import pandas as pd
sample_data = pd.DataFrame([[9,90],[8,80],[4,40],[2,20]],
columns=['공부시간','성적'],
index=['해도','영화','자연','병관'])
sample_data

# 입력특성(문제)
x = sample_data['공부시간']
# 정답
y = sample_data['성적']
# 전통적인 선형회귀 모델을 구현한 클래스
from sklearn.linear_model import LinearRegression
모델링 순서
1. 모델객체 생성
2. 문제/정답 학습
3. 모델평가
4. 모델예측
score_model = LinearRegression() # 선현회귀모델 객체 생성
# 문제와 정답 입력
score_model.fit(X.values.reshape(-1,1), # 1차원 데이터를 2차원으로 변경 # -1 넣으면 자동으로 최적화해서 계산해줌
y)
score_model.predict([[7],[5]]) # 에측하고 싶은 입력데이터만 작성

# 학습된 가중치와 절편 확인
print("가중치 : ", score_model.coef_)
print("절편 : ", score_model.intercept_)
-> 실제 절편 -0.000000000000071054..
-> y = 10x + 0
sample_data['게임시간'] = [2, 5, 8, 15]
sample_data

# 입력특성(문제)
X = sample_data[['공부시간','게임시간']]
# 정답
y = sample_data['성적']
X 출력

# 모델생성
score_model2 = LinearRegression()
# 모델학습
score_model2.fit(X, y)
# 모델예측
score_model2.predict([[10,2],[3,5]])
print("가중치 : ", score_model2.coef_)
print("절편 : ", score_model2.intercept_)
MSE(Mean Squared Error)
1. 양수와 음수 오차 상쇄 방지
2. 오차 확대해석하여 모델 안정성 확보, 오차 큰 모델에게 패널티 줄 근거




[실습] MSE 구하기
1) Blue
H(x) = 1x+0
cost = 0
2) Red
H(x) = 0.5x+0
cost = (0.25+1+2.25)/ 3
= 1.166666666666667
# 선형회귀 가설함수 만들기
def H(X, w):
'''
X : 가설함수로 입력되는 데이터(문제)
w : 가설함수에서 지정하는 가중치
return 값 : 입력데이터와 가중치의 곱셈 값
'''
return X*w
y_pre = H(sample_data['공부시간'], 1)
y_pre

# 평균제곱 오차함수 만들기
def MSE(X,y,w):
'''
X : MSE 오차를 계산하기 위한 입력데이터(문제)
y : 실제정답 값
w : 가설함수에 적용한 가중치 값
'''
# 예측값
y_pre = H(X,w)
# 오차 구하기
error = y_pre - y
# 제곱오차
squared_error = error**2
# 평균값 반환
return squared_error.mean()
MSE(sample_data['공부시간'], sample_data['성적'], 10)


# 최적의 가중치 10을 중심으로 양쪽에 10개씩 가중치 생성
w_list = range(0,21)
cost_list = [MSE(sample_data['공부시간'], sample_data['성적'], w) for w in w_list]
cost_list

import matplotlib.pyplot as plt
plt.figure(figsize=(5,5)) # 그림 사이즈 설정
plt.plot(range(0,21), # x축 데이터
cost_list, # y축 데이터
marker='^') # 라인 그래프 마커 표시
plt.xlabel('weight')
plt.ylabel('cost')
plt.show()
