<jupyter_start><jupyter_text>Simple linear regression이 모델은 독립변수 **하나** 에 대해서 1차식의 cost가 가장 작게 나오는 선을 긋는 모델입니다.추가 설명은 같은 폴더 내의 linear_regression.pdf에서 하겠습니다.* pdf 자료주소: 모두의 머신러닝/딥러닝 웹페이지  Import library<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<jupyter_output><empty_output><jupyter_text>Load datampg data : 연료 효율성 예측 데이터mpg : miles per gallon  cylinders : (엔진의) 실린더  displacement : 이동거리  horsepower : 마력  weight : 무게  acceleration : 가속도  model year : 연식  origin : 엔진을 만든 국가name : 모델명<jupyter_code>df = pd.read_csv('./auto-mpg.csv', header=None)<jupyter_output><empty_output><jupyter_text>Exploratory Data Analysis<jupyter_code>df.head()<jupyter_output><empty_output><jupyter_text>데이터의 컬럼명이 없으므로 수정해줌<jupyter_code>df.columns = ['mpg','cylinders','displacement','horsepower','weight',
              'acceleration','model year','origin','name']<jupyter_output><empty_output><jupyter_text>데이터 자료형 확인<jupyter_code>df.info()<jupyter_output><class 'pandas.core.frame.DataFrame'>
RangeIndex: 398 entries, 0 to 397
Data columns (total 9 columns):
 #   Column        Non-Null Count  Dtype  
---  ------        --------------  -----  
 0   mpg           398 non-null    float64
 1   cylinders     398 non-null    int64  
 2   displacement  398 non-null    float64
 3   horsepower    398 non-null    object 
 4   weight        398 non-null    float64
 5   acceleration  398 non-null    float64
 6   model year    398 non-null    int64  
 7   origin        398 non-null    int64  
 8   name          398 non-null    object 
dtypes: float64(4), int64(3), object(2)
memory usage: 28.1+ KB<jupyter_text>데이터 결측치 확인<jupyter_code>df.isna().sum()<jupyter_output><empty_output><jupyter_text>데이터 통계 요약정보 확인<jupyter_code>df.describe()<jupyter_output><empty_output><jupyter_text>컬럼 전체의 고유값 확인<jupyter_code>for i in range(len(df.columns.values)):
    print(df.columns.values[i])
    print(df[df.columns.values[i]].unique())
    print()<jupyter_output>mpg
[18.  15.  16.  17.  14.  24.  22.  21.  27.  26.  25.  10.  11.   9.
 28.  19.  12.  13.  23.  30.  31.  35.  20.  29.  32.  33.  17.5 15.5
 14.5 22.5 24.5 18.5 29.5 26.5 16.5 31.5 36.  25.5 33.5 20.5 30.5 21.5
 43.1 36.1 32.8 39.4 19.9 19.4 20.2 19.2 25.1 20.6 20.8 18.6 18.1 17.7
 27.5 27.2 30.9 21.1 23.2 23.8 23.9 20.3 21.6 16.2 19.8 22.3 17.6 18.2
 16.9 31.9 34.1 35.7 27.4 25.4 34.2 34.5 31.8 37.3 28.4 28.8 26.8 41.5
 38.1 32.1 37.2 26.4 24.3 19.1 34.3 29.8 31.3 37.  32.2 46.6 27.9 40.8
 44.3 43.4 36.4 44.6 40.9 33.8 32.7 23.7 23.6 32.4 26.6 25.8 23.5 39.1
 39.  35.1 32.3 37.7 34.7 34.4 29.9 33.7 32.9 31.6 28.1 30.7 24.2 22.4
 34.  38.  44. ]

cylinders
[8 4 6 3 5]

displacement
[307.  350.  318.  304.  302.  429.  454.  440.  455.  390.  383.  340.
 400.  113.  198.  199.  200.   97.  110.  107.  104.  121.  360.  140.
  98.  232.  225.  250.  351.  258.  122.  116.   79.   88.   71.   72.
  91.   97.5  70.  120.   96.  108.  155.   68.  114.  156.   76.   83.
  90.  231.  262[...]<jupyter_text>'?'을 np.nan으로 변경horsepower 컬럼에서 ?라는 값이 포함되어있다이를 누락된 데이터라는 의미의 nan이라는 값으로 변경해준 후에 누락 데이터가 포함된 행을 지워주도록 하자<jupyter_code>df['horsepower'].replace('?', np.nan, inplace=True)
df['horsepower'].unique()<jupyter_output><empty_output><jupyter_text>누락데이터 행을 삭제<jupyter_code>df.dropna(subset=['horsepower'], axis=0, inplace=True)
df['horsepower'].unique()<jupyter_output><empty_output><jupyter_text>문자열을 실수형으로 변환<jupyter_code>df['horsepower'] = df['horsepower'].astype('float')
df.info()
df.describe()<jupyter_output><empty_output><jupyter_text>시각화  종속 변수 Y인 "연비(mpg)"와 다른 변수 간의 선형관계를 그래프(산점도)로 확인   중량 대비 연비 산점도  Matplotlib 사용<jupyter_code>features.plot(kind='scatter', x='weight', y='mpg',  c='coral', s=10, figsize=(10, 5))
plt.show()
features.plot(kind='scatter', x='horsepower', y='mpg',  c='coral', s=10, figsize=(10, 5))
plt.show()
features.plot(kind='scatter', x='cylinders', y='mpg',  c='coral', s=10, figsize=(10, 5))
plt.show()<jupyter_output><empty_output><jupyter_text>Seaborn 사용<jupyter_code>fig = plt.figure(figsize=(10, 5))   
ax1 = fig.add_subplot(1, 2, 1)
ax2 = fig.add_subplot(1, 2, 2)
sns.regplot(x='weight', y='mpg', data=features, ax=ax1)                 # 회귀선 표시
sns.regplot(x='weight', y='mpg', data=features, ax=ax2, fit_reg=False)  #회귀선 미표시
plt.show()
plt.close()<jupyter_output><empty_output><jupyter_text>seaborn 조인트 그래프 - 산점도, 히스토그램<jupyter_code>sns.jointplot(x='weight', y='mpg', data=features)              # 회귀선 없음
sns.jointplot(x='weight', y='mpg', kind='reg', data=features)  # 회귀선 표시
plt.show()
plt.close()<jupyter_output><empty_output><jupyter_text>seaborn pariplot - 두 변수 간의 모든 경우의 수 그리기<jupyter_code>sns.pairplot(features)  
plt.show()
plt.close()<jupyter_output><empty_output><jupyter_text>Modeling<jupyter_code>df
X=df[['weight']]  #독립 변수 X
y=df['mpg']       #종속 변수 Y
X
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,   #검증 30%
                                                    random_state=10) #랜덤 추출 값 
print('train data 개수: ', len(X_train))
print('test data 개수: ', len(X_test))<jupyter_output>train data 개수:  278
test data 개수:  120<jupyter_text>단순회귀분석 모형 객체 생성<jupyter_code>lr = LinearRegression()
lr<jupyter_output><empty_output><jupyter_text>train data를 가지고 모형 학습<jupyter_code>lr.fit(X_train, y_train)<jupyter_output><empty_output><jupyter_text>학습을 마친 모형에 test data를 적용하여 결정계수(R-제곱) 계산<jupyter_code>r_square = lr.score(X_test, y_test)
print(r_square)
print('기울기 W: ', lr.coef_)
print('y절편 b', lr.intercept_)<jupyter_output>y절편 b 46.710366257280086
{'fraction_non_alphanumeric': 0.146391400784849, 'fraction_numerical': 0.10714895069100835, 'mean_word_length': 3.211206896551724, 'pattern_counts': {'":': 0, '<': 78, '<?xml version=': 0, '>': 78, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 15, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '20', 'dir': 'jupyter-structured-clean-dedup', 'id': '309123', 'license': 'MIT', 'n_tokens_mistral': 3244, 'n_tokens_neox': 3149, 'n_words': 561, 'path': 'AI_Class/002/Simple_linear_regression.ipynb', 'repo_name': 'easycastle/Cpprhtn-s_Deep_Learning', 'size': '5861'}