본문 바로가기

IT/혼자 공부하는 머신러닝+딥러닝

<혼자 공부하는 머신러닝+딥러닝> Chapter 01~02

Ch.01-1

# 인공지능(Artificial Intelligence)이란?

- 사람처럼 학습하고 추론할 수 있는 지능을 가진 시스템을 만드는 기술

# 머신러닝(Machine Learning)이란?

- 데이터에서 규칙을 학습하는 알고리즘을 연구하는 분야 (프로그래밍X, 규칙을 학습)

# 딥러닝(Deep Learning)이란?

- 인공 신경망(artificial neural network)을 기반으로 한 방법들

 

Ch.01-2

# 구글 코랩(Google Colab)

 

Ch.01-3

# k-최근접 이웃 알고리즘(K-Nearest Neighbors Algorithm)

 

1. 데이터 준비 - 지도 학습 알고리즘이므로, 데이터 포인트와 라벨(클래스)을 포함하는 학습 데이터셋이 필요

2. 거리 측정 - 예측하려는 새로운 데이터 포인트와 학습 데이터셋의 모든 포인트간의 거리를 계산

3. 이웃 선택 - k개의 가장 가까운 데이터 포인트를 선택

4. 결정 - 선택된 k개의 이웃 중 가장 많은 클래스를 가진 클래스로 분류(다수결 원칙)

 

주황색은 0, 파란색은 1이라고 가정!

 

length가 30이고, weight가 600이라면 class1에 속한다고 예측함!

 

cf) scikit-learn 메서드 종류

 

fit() -> 사이킷런 모델을 훈련할 때 사용하는 메서드

predict() -> 사이킷런 모델을 훈련하고 예측할 때 사용하는 메서드

score() -> 훈련된 사이킷런 모델의 성능을 측정 

 

Ch.02-1

# 머신러닝 알고리즘

- 지도 학습: 입력(데이터)과 타깃(정답)으로 이뤄진 훈련 데이터로 학습

- 비지도 학습: 정답이 없는 훈련 데이터로 학습 -> 예측하는 것이 아닌 입력 데이터에서 어떤 특징을 찾는 데 활용

 

# 훈련 세트와 테스트 세트

샘플링 편향 방지를 위해 numpy 이용
랜덤하게 train set과 test set으로 나누어 사용
파란색이 train set, 주황색이 test set

 

샘플링 편향(sampling bias) 문제에서 벗어나 훈련 세트와 테스트 세트에 클래스0과 1이 잘 섞여 있는 것을 확인할 수 있음!

 

Ch.02-2

# scikit-learn을 이용해 train set과 test set으로 나누기

무작위로 데이터를 나누었을 때 샘플이 골고루 섞이지 않아 샘플링 편향 문제가 발생할 수 있음

-> stratify 매개변수를 이용해보자!

이 부분만 train_test_split() 안에 추가해주면 클래스 비율에 맞게 데이터를 나누게 됨.

 

# 데이터 전처리가 필요한 이유?

- length가 25, weight가 150인 class0에 속하는가 class 1에 속하는가?

오른쪽 위로 뻗어 있는 class1에 더 가깝게 보임. class1로 예측할 가능성 높다고 생각!
모델의 예측은 class0

 

- 왜 이런 문제가 발생하는가? x축과 y축의 범위가 다르기 떄문이다. -> 스케일(scale)을 같도록 하자!

<표준점수>로 변환해서 모델을 다시 훈련시키면...

표준점수 = (값 - 평균) / 표준편차

 

x축과 y축의 범위가 -1.5~1.5 사이로 바뀌게 됨.
스케일을 같게 했더니 최종적으로 class1로 분류하게 됨.