1. 머신러닝 vs 딥러닝
AI - 인간처럼 생각하고 학습하는, 판단하는 기술
(전문가 규칙기반 시스템) -> 일반적인 문제는 규칙을 세워서 판단하기에 너무 많은 경우의 수가 있음, 복잡한 문제 해결 X
머신러닝 - 데이터를 학습시켜서 모델이 스스로 규칙과 패턴을 찾고, 새로운 데이터가 들어왔을 때 예측하는 기술(법)
ex) iris, titanic, mushroom, breast cancer, price
=> 2차원 데이터, 수치데이터
* 머신러닝의 하위분야 개념
딥러닝 - 2차원 데이터, 수치 데이터, 3차원 데이터, 사진, 영상(image), 음성 데이터, 시계열 데이터
ex) 음악 - 현악기 중주음악 파일 -> 구분, 악보를 만들기
ex) 목소리 - 발음 교정, 사투리 -> 표준어로 변화
ex) 영상(이미지) - 체형교정(거북목 예방, 몸의 운동 자세 교정, 유아의 행동패턴, 수면장애 교정)
ex) 사진(이미지) - 음식사진분류, 농산품 양품 분류, 바이러스 탐지, 필체검사를 통한 성격 판별
* 전처리 중요!
지도학습 - 교사학습, 문제와 답(교사) 데이터를 가지고 학습시키는 것
- 분류 : 0, 1 -> 0, 1 (iris 붓꽃 0/1/2, mushroom e/p)
*class : 범주값, category, 분류 답데이터의 범주의 개수
- 회귀 : 연속적인 수치값 예측
ex) 주택가격 예측, 부동산가격 예측, 주식 예측, 미세먼지 지수(수치) 예측
비지도학습 - 답(교사) 데이터가 X, 문제 데이터를 가지고 학습 -> 비슷한 데이터를 찾음
데이터끼리의 규칙 파악 -> 묶음(군집화, clustering)
- 일상 데이터는 비지도가 많음 -> (준지도학습) 비지도용 데이터 군집
0-학생, 1-교사, 2-40대 직장인 남성(라벨링)
-> 문제, 답(지도학습) 직장인 판별, 예측
-> 서비스화(아이템 추천, 채널 추천)
강화학습 - 행위의 주체자가 환경에 대해 적응하면서 보상과 패널티를 받으며 학습하는 것
ex) 알파고 로봇
머신러닝할 때 배운 모델
모델 : ada, knn, tree, rf(randomforest), gbm, xgboost, catboost, linear, lasso, ridge, logistic, svm
딥러닝과 연관된 모델 : linear model(선형 모델) -> 데이터를 선형 함수로 구분하겠음
> 입력한 데이터를 잘 포함하는 선형 함수를 찾자(학습)
> 새로운 데이터는 학습에서 찾아진 선형 함수로 예측하자
: 학습에서 나온 선형함수를 잘 구해보자
> 어떤 선형함수가 잘 나온 선형함수인가?
> 선형함수 위에서 보여지는 예측값과 실제값의 오차를 계산해서 오차가 작은 or 낮은 선형함수가 좋은 함수
- 오차계산은 어떻게? 공식 : ((예측-실제)**2).mean() => mse(mean squared error)
=> 평균 제곱 오차
=> 실제값과 예측값 사이의 관계
> 선을 여러 개 그어본다 => 여러 개의 선형 함수의 가설을 세운다
> 오차가 가장 낮은 선형 함수를 찾으려고 갱신
=> 경사하강법, 최적의 w,b를 찾는 것!
=> y = wx + b
# 실행
# shift + enter : 현재 셀을 실행하고 아래로 커서 이동
# (아래 셀이 없다면 생성하고 이동)
# ctrl + enter : 현재 셀 실행
# 셀 생성
# 위에 셀 생성 : ctrl + m + a
# 밑에 셀 생성 : ctrl + m + b
# 마크다운 변환 : ctrl + m + m (m을 꾹 누르면 mm이라고 인식)
# 코드 모드로 되돌리기 : ctrl + m + y
# 셀 삭제 : ctrl + m + d
# 하나의 셀 안에 있는 동일 단어 한꺼번에 접근하기 : ctrl + shift + l(엘)
# 데이터를 연결하는 방법
# drive 연동해서 사용해야함
# 데이터 접근 machineLearning 폴더의 data > 파일 접근(상대 경로)
# 딥러닝 폴더 쪽으로 경로 이동 > 상대경로 값으로 활용
# /content/drive/MyDrive/Colab Notebooks/DeepLearning/data/student-mat.csv
%cd /content/drive/MyDrive/Colab Notebooks/DeepLearning
# 현재 커서 경로 확인
%pwd
### 목표
- 학생 수학 성적 예측하는 회귀 모델을 만들어보자
- keras를 이용하여 딥러닝 신경망을 구성해보자
# 환경셋팅
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 훈련셋, 테스트셋 분리하는 도구 가져오기
from sklearn.model_selection import train_test_split
# csv, 구분자 : ';'
# delimiter = ';'
data = pd.read_csv('data/student-mat.csv', delimiter=';')
data.head()
# 하나의 행 - 학생 데이터
# 컬럼 - 성적에 영향을 미쳤을 것 같은 특성 데이터
# 컬럼명 확인
data.columns
# 특성 데이터 : studytime(공부 시간), 특성 1개로 학습 진행
# 답 데이터 : G3 (수학 성적 데이터)
data.keys()
# 답 데이터 확인
# G3
data['G3'].unique()
# data.loc[:, 'G3']
# 문제, 답 분리
X = data['studytime'] # 공부시간 1차원 배열 인덱싱
y = data['G3'] # G3 1차원 배열 인덱싱
X.shape, y.shape
# train, test 분리 7:3, 고정값 3
# sklearn 도구 활용(이미 위에 불러 import X)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3,
random_state=3)
# 크기확인
X_train.shape, X_test.shape, y_train.shape, y_test.shape
#### 신경망 모델 만들기
- 1. 신경망 구조 설계 : 뼈대구축, 층내용 정의
- 2. 신경망 학습/평가 방법 설정
- 분류, 회귀에 따라 작성
- 3. 신경망 모델 학습 및 정확도 결과 시각화
- 4. 모델 평가 및 예측
# 1. 신경망 구조 설계
# 필요한 도구 임포트
from tensorflow.keras import Sequential # 뼈대 구축 기능
from tensorflow.keras.layers import Dense, Activation # 층쌓기
# 모델 정의
model = Sequential() # 뼈대 구축
# 층 쌓기 시작!
# 입력층 + 중간층
# 입력층 : input_dim=특성 데이터의 크기 알려줌 -> studytime 1개
# 중간층 : units=뉴런 개수 설정, Activation 붙음
# model.add(Dense(units=뉴런 개수 설정, input_dim=입력 내용))
model.add(Dense(units=4, input_dim=1))
model.add(Activation('sigmoid')) # 활성화 함수 : 반응 결과 정리하는 기능
# 출력층
# 회귀 - 연속적인 숫자값 출력
# 뉴런개수 - 1, 활성화함수 Activation='linear' (y=wx+b)생략
# 뉴런 y=wx+b
model.add(Dense(units=1))
# 모델 정보 요약
model.summary()
# Param : w, b개수 - 모델의 복잡도 확인 가능(표현)
# 2. 신경망 학습/평가 방법 설정
# 번역 - compile
# 모델의 설계를 pc가 이해할 수 있도록 번역하는 과정
# + 오차 계산 공식, 경사하강법 종류, 평가 지표(척도) 설정
# 분류 / 회귀
model.compile(loss='mse', # 손실함수(비용함수) : mse -> 회귀
optimizer='sgd') # 최적화함수 : 경사하강법 종류
# metrics 평가지표 설정 - 회귀 시 mse값을 평가 값으로 활용
# 3. 학습
# h 라는 변수에 학습된 현황 저장
# 여러 번 반복하면서 성능 개선 epochs=사람이 횟수 설정
h = model.fit(X_train, y_train, epochs=200)
plt.figure(figsize=(10,3))
plt.plot(range(1, 201), h.history['loss'])
# 초반에 w, b가 서로 다르게 셋팅되어 시작점의 오차가 다를 수 있음
# 딥러닝은 몇 번 반복되기만 해도 빠르게 성능이 개선됨을 확인할 수 있음
# 모델의 오차를 줄이고 더 성능을 높이려면, 반복횟수의 영향 O, 데이터에 영향 O, 층 내용(설계)에 따른 영향 O
'Computer Engineering > 딥러닝' 카테고리의 다른 글
OpenCV01_이미지로드 (0) | 2023.07.03 |
---|---|
mlp_손글씨숫자 이미지_다중분류 (0) | 2023.06.29 |
mlp_활성화, 최적화함수 비교_패션데이터(ing)_다중분류 (0) | 2023.06.29 |
iris 데이터_다중분류 (0) | 2023.06.27 |
페암데이터 이진분류 (0) | 2023.06.27 |
댓글