KT AIVLE School 3기/머신러닝

KT Aivle DX트랙 23일차

Do잇 2023. 3. 6. 20:57

 

 

다시 돌아온 이장래 강사님 🤗 진심으로 환영합니당!! 그리웠어요ㅜㅜ

오늘 이장래 강사님께서 강의해주실 내용은 머신러닝!

 

 

 

지식백과 머신러닝 검색결과

머신러닝은 인간이 경험을 쌓아서 학습하듯 컴퓨터에 여러 경험 데이터를 주고 인공신경망에 학습시키는 것을 말한다.

머신 러닝, 즉 기계를 학습시킨다.

 

# 학습 방법에 따른 분류  

1. 지도 학습(Supervised Learning)  ←본 과정에서는 지도 학습에 대해 학습함.

   학습대상이 되는 데이터에 정답을 주어 규칙성, 즉 데이터의 패턴을 배우게 하는 학습 방법

2. 비지도 학습(Unsupervised Learning)

   정답이 없는 데이터 만으로 배우게 하는 학습 방법

3. 강화 학습(Reinforcement Learning)

   선택한 결과에 대해 보상을 받아 행동을 개선하면서 배우게 하는 학습 방법

 

# 과제에 따른 분류

1. 분류 문제(Classification)  ← 어떤 그룹에 속하게 될 것인지를 판단함.

  이미 적절히 분류된 데이터를 학습하여 분류 규칙을 찾고, 그 규칙을 기반으로 새롭게 주어진 데이터를 적절히 분류하는 것을 목적으로 함(지도 학습)

2. 회귀 문제(Regression) ← 어떤 이 될 것인지를 예측함.

  이미 결과값이 있는 데이터를 학습하여 입력 값과 결과 값의 연관성을 찾고, 그 연관성을 기반으로 새롭게 주어진 데이터에 대한 값을 예측하는 것을 목적으로 함(지도 학습)

3. 클러스터링(Clustering)

  주어진 데이터를 학습하여 적절한 분류 규칙을 찾아 데이터를 분류함을 목적으로 함. 정답이 없으니 성능을 평가하기 어려움.(비지도 학습)

 

# 분류  vs  회귀 ( 자주하는 실수❗ )

✔ 분류 문제(결과가 범주형) 가입여부 예측

 

 

✔ 회귀 문제(결과가 연속형) 판매가격 예측

:연속적인 숫자를 예측하는 것

ex) 두 값 사이에 중간값이 의미가 있는 숫자인지, 또는 두 값에 대한 연산 결과가 의미가 있는 숫자인지 등등

 

# 모델, 모델링

✔ 모델(Model) : 데이터로부터 패턴을 찾아 수학식으로 정리해 놓은 것

✔ 모델링(Modeling) : 모델을 선언하고 학습하고 평가하는 과정을 진행.

                                     오차가 적은 모델을 만드는 과정 (y = ax +b)

 

# 머신러닝의 행과 열

✔ 행(Row) : 관측치

✔ 열(Column)  = x : 변수, Feature

 

# 독립변수와 종속변수 ( ❗ 중요)

✔ 독립변수 = 원인 = x (Features)

: 다른 값에 영향을 미치지 않고 독립적으로 변할 수 있는 값.

x들끼리의 연관성을 제거해야한다. 가변수화로

ex) 비, 습도, 기온, 요일, 휴일

 

✔ 종속변수 = 결과 = y (Target)

: 스스로 값이 변하지 않고, 다른 변수가 변해야 변하는 값.

많은 독립변수들에 의해서 종속변수가 변하므로 독립변수들에 종속되어있다.

ex) 판매량

 

# 오차(Error)

- 통계학에서 사용되는 가장 단순한 모델 중 하나가 평균

- 평균도 기존의 모델.

- 관측값과 모델의 차이 = 이탈도(Deviance) → 오차

- 회귀모델은 평균과 계속 비교됨.

- 회귀모델의 목표 : 오차를 줄여라! 평균보다는 줄여라!

 

# 데이터 분리

# x, y 분리

target = 'Ozone'
x = data.drop(target, axis = 1)
y = data.loc[ : , target]
# 모듈 불러오기
from sklearn.model_selection import train_test_split
# 학습용, 평가용 데이터 분리 7:3
x_train, x_test, y_train, y_test = train_test_split(x, y, 
                                                                           test_size=0.3, 
# 30%를 의미 / 30이라고 쓰면 건수(정수는 건 수,소수는 퍼센트),0.25가 디폴트
                                                                            shuffle=True,  # 기본값은 shuffle = True : 섞은 후 나눈다.
                                                                            random_state=1)       
# 시드값 설정 / 강사님과 같은 결과를 보기 위해 1을 주었다.(일관된 학습을 위해)

 

# 과대 적합 vs 과소 적합

✔ 과대 적합(Overfitting) 

- 학습 데이터에서 점수가 매우 높았는데, 평가 데이터에서 점수가 매우 낮은 경우

- 학습 데이터에 대해서만 잘 맞는 모델 → 실전에서 예측 성능이 좋지 않음.

- 모델이 너무 깊이 있게 공부한 경우.

ex) 야구공을 주면서 이게 공이라고 가르쳤을 때, 너무 깊게 알면 다른 공들은 공이 아닌 것으로 인식.

 

✔ 과소 적합(Underfitting)

- 학습 데이터보다 평가 데이터 점수가 더 높거나 두 점수 모두 너무 낮은 경우

- 모델이 너무 단순하여 학습 데이터에 적절히 훈련되지 않은 경우

- 학습데이터가 너무 적어 공부량이 부족한 경우

ex) 야구공을 주면서 이게 공이라고 가르쳤을 때, 둥근 것만 인식하면 수박도 공으로 인식.

 

# 회귀문제

# 라이브러리 불러오기
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings

warnings.filterwarnings(action='ignore')
%config InlineBackend.figure_format = 'retina'    # 고해상도로 보기 레티나
# 데이터 읽어오기
path = '   '
data = pd.read_csv(path)
# 상관관계 확인
data.corr()
# 상관관계 시각화: Temp-->Ozone (산점도)
plt.scatter(x=data["Temp"],y=data["Ozone"])
plt.xlabel('Temp')
plt.ylabel('Ozone')
plt.show()
# 전체 변수 상관관계 시각화
sns.heatmap(data.corr(), 
            annot=True,      # annot=True 숫자를 넣어주기  annot은 annotaion 주석이라는 의미
            cmap='Blues',   # 히트맵 색상변경
            cbar=False,      # 옆에 있는 cbar 없애기
            square=True,   # 정사각형으로 예쁘게
            fmt='.3f',           # 소수점 세자리까지
            annot_kws={'size':8}) # 네모 안 글자 사이즈 줄이기  
plt.show()
# 결측치 확인
data.isnull().sum()
# 전날 값으로 결측치 채우기
data.fillna(method='ffill', inplace=True)

# 확인
data.isna().sum()
# 변수 제거
drop_cols = ['Month', 'Day']
data.drop(drop_cols, axis=1, inplace=True)

# 확인
data.head()
# target 확인
target='Ozone'

# 데이터 분리
x=data.drop(target, axis=1)
y=data.loc[:, target]
# 모듈 불러오기
from sklearn.model_selection import train_test_split

# 7:3으로 분리
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, # (정수는 건 수, 소수는 퍼센트를 의미) 
                                                    shuffle=True,      # 기본값은 shuffle = True : 섞은 후 나눈다.
                                                    random_state=1)  # 반복 실행시 동일한 결과를 얻기 위해
# 모델링(회귀문제인지 분류문제인지 명확히 구분)
# 1단계: 불러오기 (알고리즘과 평가방법)
from sklearn.linear_model import LinearRegression  # 알고리즘(=선형회귀)
from sklearn.metrics import mean_absolute_error     # 회귀 모델에서 평가방법 
                                             └ 절댓값을 더해서 오차의 평균내는 것.
# 2단계: 선언하기
model = LinearRegression()
# 3단계: 학습하기
model.fit(x_train, y_train)    # 가변수화하지 않으면 오류난다.
# 4단계: 예측하기
y_pred = model.predict(x_test)
# 실제값과 예측값 비교
print(y_test.values[:10]) # 시리즈 --> 배열
print(y_pred[:10])           # 배열
# 5단계: 평가하기
mean_absolute_error(y_test, y_pred)   # 정답과 예측값 순서로
# 실제값과 예측값의 시각화
mean_ozone = y_test.mean()

plt.plot(y_test.values, label='Actual')                 # 시리즈의 값 → 배열 형태로 가져오기
plt.plot(y_pred, label='Predicted')                     # 배열
plt.axhline(mean_ozone, color='r', linestyle='--') # 평균값을 그래프의 가로선으로 추가
plt.ylabel('Ozone')
plt.legend()
plt.grid()
plt.show()

 

# 분류문제

# 라이브러리 불러오기
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings

warnings.filterwarnings(action='ignore')
%config InlineBackend.figure_format = 'retina'
# 데이터 읽어오기
path = '   '
data = pd.read_csv(path)      
# 상관관계 확인
data.corr()              
# 상관관계 시각화
sns.heatmap(data.corr(), 
            annot=True,
           cmap='Blues',
           cbar=False,
           square=True,
           annot_kws={'size':8})

plt.show()
# target 확인
target = 'ADMIT'    # ADMIT 1은 PASS / 0은 FAIL

# 데이터 분리
x= data.drop(target, axis = 1)
y= data.loc[:,target]
# 모듈 불러오기
from sklearn.model_selection import train_test_split

# 7:3으로 분리
x_train, x_test, y_train, y_test = train_test_split(x,y,test_size=0.3,random_state=1)
# 1단계: 불러오기
from sklearn.neighbors import KNeighborsClassifier  # 알고리즘
from sklearn.metrics import accuracy_score  # 분류 모델에서의 평가방법
                                                                           # mean_absolute_error 쓰면 안된다고!!!
# 2단계: 선언하기
model = KNeighborsClassifier(n_neighbors=5) # K개의 이웃을 보겠다는 뜻
# 3단계: 학습하기
model.fit(x_train, y_train)    # 가변수화하지 않으면 오류난다.
# 4단계: 예측하기
y_pred = model.predict(x_test)
# 5단계: 평가하기
accuracy_score(y_test, y_pred)
# 확인
print(y_test.values[:10])
print(y_pred[:10])

오늘은 무작정 모델링 코드 익히기를 한 것,

우선 사용하고, 그 다음에 배우기!

 

 

 

 

 

설명과 예측에따라 알고리즘이바뀌는데 
예측이 높은것은 설명하지못하는 알고리즘이많고 
설명이높은것은 예측정확도가 떨어지는것이 많다

이에 적당한 알고리즘선택을 잘하기위해 목적성이 설명인지 예측인지 명확히 하고 다음단계로 진행하자.

 

 

 

 

 

'KT AIVLE School 3기 > 머신러닝' 카테고리의 다른 글

KT Ailvle DX트랙 29일차  (0) 2023.03.14
KT Aivle DX 트랙 27일차  (0) 2023.03.11
KT Aivle DX 트랙 26일차  (0) 2023.03.09
KT Avile DX트랙 25일차  (0) 2023.03.08
KT Avile DX트랙 24일차  (0) 2023.03.07