반응형
SMALL
거의 일주일만에 다시 학습을 진행하게되었네요-_-(게을러 터져가지고..)
어찌되었든 이번 학습 주제는 지난 번에 이어 회귀분석 중 다항회귀분석(Polynomial Regression)입니다
지난 학습에서 살펴본 단순회귀분석은 일차식(y = ax + b) 즉, 두 변수 간의 관계를 직선 형태로 설명하는 알고리즘이었습니다
이번에 볼 다항회귀분석은 일차가 아닌 다차원 즉, 곡선 형태로 설명하는 알고리즘입니다
뭐 제 스타일은 일단 이해가 안되도 직진하고 모르는 부분을 계속해서 보는 것이기 때문에 바로 진행하도록 하겠습니다
# 판다스(Pandas)
import pandas
import numpy
import matplotlib.pyplot as mp
import matplotlib
import seaborn
# Prepare Data
filepath = "/Users/dennis_sa/Documents/"
# 0번 로우를 header로 설정
read_data = pandas.read_csv(filepath+"auto-mpg.data-original", header = None, sep = '\s+')
read_data.columns = ['연비(mpg)', '실린더 수(cylinders)', '배기량(displacement)', '출력(horsepower)',
'차중(weight)', '가속능력(acceleration)', '출시년도(model_year)', '제조국(origin)', '모델명(name)']
matplotlib.rc('font', family = 'AppleGothic') # MAC OS 일 경우 한글 폰트 오류 해결
pandas.set_option('display.max_columns', 10)
# Explore Data
print(read_data.info(), end = '\n')
print(read_data.describe(), end = '\n')
print(read_data['연비(mpg)'], end = '\n')
print(read_data['출력(horsepower)'], end = '\n')
read_data.dropna(subset = ['연비(mpg)'], axis = 0, inplace = True)
read_data.dropna(subset = ['출력(horsepower)'], axis = 0, inplace = True)
print(read_data.info(), end = '\n')
# Choose Variables
choose_data = read_data[['연비(mpg)', '실린더 수(cylinders)', '출력(horsepower)', '차중(weight)']]
print(choose_data, end = '\n')
x = choose_data[['차중(weight)']]
y = choose_data[['연비(mpg)']]
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3, random_state = 10)
# 학습 및 검증
from sklearn.linear_model import LinearRegression # 선형회귀분석
from sklearn.preprocessing import PolynomialFeatures # 다항식 변환
poly = PolynomialFeatures(degree = 2) # 2차항
x_poly_train = poly.fit_transform(x_train) # 2차항으로 변형
pr = LinearRegression()
pr.fit(x_poly_train, y_train)
x_poly_test = poly.fit_transform(x_test)
r_square = pr.score(x_poly_test, y_test)
y_test_hat = pr.predict(x_poly_test)
fig = mp.figure(figsize = (10, 5))
ax = fig.add_subplot(1, 1, 1)
ax.plot(x_train, y_train, 'o', label = 'Train Data')
ax.plot(x_test, y_test_hat, 'r+', label = 'Predicted Value')
ax.legend(loc = 'best')
mp.xlabel('차중(weight)')
mp.ylabel('연비(mpg)')
mp.show()
mp.close()
x_ploy = poly.fit_transform(x)
y_hat = pr.predict(x_ploy)
mp.figure(figsize = (10, 5))
ax1 = seaborn.distplot(y, hist = False, label = 'y')
ax2 = seaborn.distplot(y_hat, hist = False, label = 'y_hat', ax = ax1)
mp.show()
mp.close()
학습을 하면 할수록 자꾸 결과를 캡처해서 같이 올려놔야할 것 같은 느낌이 들지만..
늦은 시간에 빠르게 진행하고 자야 또 일을 나가기 때문에 캡처까지 올리기는 귀찮네요..
오늘은 여기까지 하겠습니다-_-
반응형
LIST
'Machine Learning' 카테고리의 다른 글
[Machine Learning] 분류(Classification)_3 (0) | 2019.11.23 |
---|---|
[Machine Learning] 분류(Classification)_2 (0) | 2019.11.23 |
[Machine Learning] 분류(Classification)_1 (0) | 2019.11.11 |
[Machine Learning] 회귀분석(Regression)_3 (0) | 2019.11.07 |
[Machine Learning] 회귀분석(Regression)_1 (0) | 2019.10.20 |