새소식

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

[Day-3] 혼자 공부하는 머신러닝+딥러닝 - 4

  • -
728x90
반응형

# page 65 ~ 73

 

혼자 공부하는 머신러닝+딥러닝 - 박해선 지음

 

Chapter 02. 데이터 다루기:

핵심 키워드:

  • 지도 학습
  • 비지도 학습
  • 훈련 세트
  • 테스트 세트

 

지도 학습과 비지도 학습:

"머신러닝 알고리즘은 크게 지도 학습(supervised learning)과 비지도 학습(unsupervised learning)으로 나눌 수 있습니다."

 

"지도 학습에서는 데이터와 정답을 입력(input)과 타깃(target)이라고 하고, 이 둘을 합쳐 훈련 데이터(training data)라고 부릅니다."

"그리고 앞서 언급했듯이 입력으로 사용된 길이와 무게를 특성(feature)이라고 합니다."

 

"지도 학습정답(타깃)이 있으니 알고리즘이 정답을 맞히는 것을 학습합니다."

 

"반면 비지도 학습 알고리즘은 타깃 없이 입력 데이터만 사용합니다."

 

"머신러닝 알고리즘은 지도 학습, 비지도 학습 외에 강화 학습(reinforcement learning)을 또 다른 종류로 크게 분류합니다."

  • 강화 학습 알고리즘은 타깃이 아니라 알고리즘이 행동한 결과로 얻은 보상을 사용해 학습
  • 이 책에서 강화 학습을 다루지는 않습니다.

 

훈련 세트와 테스트 세트:

"평가를 위해 또 다른 데이터를 준비하거나 이미 준비된 데이터 중에서 일부를 떼어 내어 활용하는 것입니다."

"일반적으로 후자의 경우가 많습니다."

"평가에 사용하는 데이터테스트 세트(test set), 훈련에 사용되는 데이터훈련 세트(train set)라고 부릅니다."

 

"훈련할 때 사용하지 않은 데이터로 평가해야 합니다."

"이를 위해 훈련 데이터에서 일부를 떼어 내어 테스트 세트로 사용하겠습니다."

 

 

모두 코랩을 열어주시길 바랍니다 :)

 

 

"먼저 1장에서처럼 도미와 빙어의 데이터를 합쳐 하나의 파이썬 리스트로 준비합니다."

  • 각 코드 블록 부분을 새로운 코랩 노트북에 입력해주세요.
  • 숫자를 손으로 모두 입력하려면 번거롭습니다.

 

# 데이터를 리스트로 준비

fish_length = [25.4, 26.3, 26.5, 29.0, 29.0, 29.7, 29.7, 30.0, 30.0, 30.7, 31.0, 31.0, 
                31.5, 32.0, 32.0, 32.0, 33.0, 33.0, 33.5, 33.5, 34.0, 34.0, 34.5, 35.0, 
                35.0, 35.0, 35.0, 36.0, 36.0, 37.0, 38.5, 38.5, 39.5, 41.0, 41.0, 9.8, 
                10.5, 10.6, 11.0, 11.2, 11.3, 11.8, 11.8, 12.0, 12.2, 12.4, 13.0, 14.3, 15.0]
fish_weight = [242.0, 290.0, 340.0, 363.0, 430.0, 450.0, 500.0, 390.0, 450.0, 500.0, 475.0, 500.0, 
                500.0, 340.0, 600.0, 600.0, 700.0, 700.0, 610.0, 650.0, 575.0, 685.0, 620.0, 680.0, 
                700.0, 725.0, 720.0, 714.0, 850.0, 1000.0, 920.0, 955.0, 925.0, 975.0, 950.0, 6.7, 
                7.5, 7.0, 9.7, 9.8, 8.7, 10.0, 9.9, 9.8, 12.2, 13.4, 12.2, 19.7, 19.9]

 

"이제 두 파이썬 리스트 순회하면서 각 생선의 길이와 무게를 하나의 리스트로 담은 2차원 리스트를 만들겠습니다."

 

fish_data = [[l,w] for l, w in zip(fish_length, fish_weight)]
fish_target = [1] * 35 + [0] * 14

 

"이 때 하나의 생선 데이터샘플(sample)이라고 부릅니다."

 

위의 상황에선 총 49개의 샘플이 존재! + 사용하는 특성은 길이와 무게 2개!

 

"이 데이터의 처음 35개를 훈련 세트로, 나머지 14개를 테스트 세트로 사용하겠습니다."

 

"사이킷런KNeighborsClassifer 클래스임포트하고 모델 객체를 만듭니다."

 

from sklearn.neighbors import KNeighborsClassifier
kn = KNeighborsClassifier()

 

"이제 전체 데이터에서 처음 35개를 선택해야 합니다."

"일반적으로 리스트처럼 배열의 요소선택할 때는 배열의 위치, 즉 인덱스(index)를 지정합니다."

 

# 인덱스 활용
print(fish_data[4])

# 출력 결과물
[29.0, 430.0]

 

"파이썬 리스트 인덱스 외에도 슬라이싱(slicing)이라는 특별한 연산자를 제공합니다."

"슬라이싱은 콜론(:)을 가운데 두고 인덱스의 범위를 지정하여 여러 개의 원소를 선택할 수 있습니다."

 

# 슬라이싱 예시
print(fish_data[0:5])

# 출력 결과물
[[25.4, 242.0], [26.3, 290.0], [26.5, 340.0], [29.0, 363.0], [29.0, 430.0]]

 

"슬라이싱을 사용할 때는 마지막 인덱스의 원소는 포함되지 않는다는 점을 주의해야 합니다."

 

"이를 응용하면 생선 데이터에서 처음 35개와 나머지 14개를 선택하는 것을 간단하게 처리할 수 있습니다."

 

# 훈련 세트로 입력값 중 0부터 34번째 인덱스까지 사용
train_input = fish_data[:35]

# 훈련 세트로 타깃값 중 0부터 34번째 인덱스 까지 사용
train_target = fish_target[:35]

# 테스트 세트로 입력값 중 35번째부터 마지막 인덱스까지 사용
test_input = fish_data[35:]

# 테스트 세트로 타깃값 중 35번째부터 마지막 인덱스까지 사용
test_target = fish_target[35:]

 

"데이터를 준비했으니 훈련 세트fit() 메서드를 호출해 모델을 훈련하고, 테스트 세트score() 메서드를 호출해 평가해 보겠습니다."

 

kn = kn.fit(train_input, train_target)
kn.score(test_input, test_target)

# 출력 결과물
0.0

# 정확도가 0.0.....?!

 

 

샘플링 편향:

"이렇게 마지막 14개를 테스트 세트로 떼어 놓으면 훈련 세트에는 빙어가 하나도 들어 있지 않잖아요."

"빙어 없이 모델을 훈련하면 빙어를 올바르게 분류할 수가 없죠."

"훈련 세트와 테스트 세트를 나누려면 도미와 빙어가 골고루 섞이게 만들어야 해요."

 

"일반적으로 훈련 세트와 테스트 세트에 샘플이 골고루 섞여 있지 않으면 샘플링이 한쪽으로 치우쳤다는 의미로 샘플링 편향(sampling bias)이라고 부릅니다."

 

"훈련세트와 테스트 세트를 나누기 전에 데이터를 섞든지 아니면 골고루 샘플을 뽑아서 훈련 세트와 테스트 세트를 만들어야 합니다."

"이런 작업을 간편하게 처리할 수 있도록 새로운 파이썬 라이브러리인 넘파이에 대해 알아보겠습니다."

 

 

# To Be...

  • 넘파이(numpy)

 

 

728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.