<jupyter_start><jupyter_text>다항회귀분석  앞에서 살펴본 단순회귀분석은 두 변수간의 관계를 직선 형태로 설명하는 알고리즘  다항 함수를 사용하면 보다 복잡한 곡선 형태의 회귀선을 표현할 수 있음<jupyter_code>import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression      #선형회귀분석
from sklearn.preprocessing import PolynomialFeatures   #다항식 변환
df = pd.read_csv('../002/auto-mpg.csv', header=None)
df.columns = ['mpg','cylinders','displacement','horsepower','weight',
              'acceleration','model year','origin','name'] 
df['horsepower'].replace('?', np.nan, inplace=True)
df.dropna(subset=['horsepower'], axis=0, inplace=True)
df['horsepower'] = df['horsepower'].astype('float')
features = df[['mpg', 'cylinders', 'horsepower', 'weight']]
X=features[['weight']]  #독립 변수 X
y=features['mpg']       #종속 변수 Y<jupyter_output><empty_output><jupyter_text>train data 와 test data로 구분(7:3 비율)<jupyter_code>X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=10) 
print('훈련 데이터: ', X_train.shape)
print('검증 데이터: ', X_test.shape)<jupyter_output>훈련 데이터:  (274, 1)
검증 데이터:  (118, 1)<jupyter_text>다항식 변환다항회귀분석은 2차함수 이상의 다함함수를 이용하여 두 변수간의 선형관계를 설명하는 알고리즘  예를 들어 2차함수는 y = aX^2 + bX + c로 표시할 수 있으며, 학습을 통해 3개의 계수 a, b, c를 찾아서 모델을 완성함  2차항 적용<jupyter_code>poly = PolynomialFeatures(degree=2)<jupyter_output><empty_output><jupyter_text>X_train 데이터를 2차항으로 변형<jupyter_code>X_train_poly=poly.fit_transform(X_train)         
print('기존 데이터: ', X_train.shape)
print('2차항 변환 데이터: ', X_train_poly.shape)  
X_train
X_train_poly<jupyter_output><empty_output><jupyter_text>train data를 가지고 모델 학습<jupyter_code>pr = LinearRegression()
pr.fit(X_train_poly, y_train)
X_test_poly = poly.fit_transform(X_test)       #X_test 데이터를 2차항으로 변형
r_square = pr.score(X_test_poly,y_test)
print(r_square)<jupyter_output>0.7189613756311704<jupyter_text>train data의 산점도와 test data로 예측한 회귀선을 그래프로 출력<jupyter_code>y_hat_test = pr.predict(X_test_poly)
fig = plt.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_hat_test, 'r+', label='Predicted Value') # 모형이 학습한 회귀선
ax.legend(loc='best')
plt.xlabel('weight')
plt.ylabel('mpg')
plt.show()<jupyter_output><empty_output><jupyter_text>모형에 전체 X 데이터를 입력하여 예측한 값 y_hat을 실제 값 y와 비교<jupyter_code>X_ploy = poly.fit_transform(X)
y_hat = pr.predict(X_ploy)
plt.figure(figsize=(10, 5))
ax1 = sns.distplot(y, hist=False, label="y")
ax2 = sns.distplot(y_hat, hist=False, label="y_hat", ax=ax1)
plt.show()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.13896353166986564, 'fraction_numerical': 0.021497120921305183, 'mean_word_length': 6.467048710601719, 'pattern_counts': {'":': 0, '<': 27, '<?xml version=': 0, '>': 27, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '7', 'dir': 'jupyter-structured-clean-dedup', 'id': '214669', 'license': 'MIT', 'n_tokens_mistral': 1372, 'n_tokens_neox': 1552, 'n_words': 228, 'path': 'AI_Class/003/.ipynb_checkpoints/Polynomial_regression-checkpoint.ipynb', 'repo_name': 'CodmingOut/AI_Mentoring', 'size': '2605'}