[ 혼공머신 ] 1주차 인증 : 코랩 사용화면
본문 바로가기

혼공 스터디/혼자 공부하는 머신러닝+딥러닝

[ 혼공머신 ] 1주차 인증 : 코랩 사용화면

728x90
반응형

 

Chap 1 나의 첫 머신러닝

Them 1. 인공지능과 머신러닝

  1. 인공지능
    사람처럼 학습하고 추론할 수 있는 지능을 가진 시스템을 만드는 기술
    • 강인공지능 : 스스로 판단
    • 약인공지능 : 사람을 보조하는 기능
  2. 머신러닝
    규칙을 프로그래밍하지 않아도 자동으로 데이터에서 규칙을 학습하는 알고리즘을 연구하는 분야
    [ 라이브러리 ] 사이킷런

  3. 딥러닝
    인공 신경망
    [ 라이브러리 ] 텐서플로(구글), 파이토치(페이스북)

 

Them 2. 코랩과 주피터 

[ 생선 분류 문제 ]

1. 도미 데이터 

  • 특성(feature) : 데이터의 특징
    ex ) 도미의 길이, 도미의 무게
  • 파이썬 과학계산용 패키지 : 맷플롯립 (matplotlib)

 

 

 

2. 빙어 데이터 준비하기

 

 

 

[ 첫 번째 머신러닝 프로그램 ]

<< k-최근접 이웃 알고리즘 사용  feat 사이킷런(scikit-learn) >>

  1. 리스트 합치기
  2. 한 개체를 하나의 리스트로 만들어주기
  3. 빙어인지 도미인지 구분하기
    빙어 0, 도미 1
  4. 훈련시키기 ( feat. fit() )
  5. 정확도 확인 ( feat. score() ) 

정확도 100%

 

 

predict()함수 : 새로운 데이터의 정답을 예측

길이가 30이고 무게가 600인 생선은 도미

 

 

 

 

K-NN (K-최근접이웃알고리즘)

  • 판별하고 싶은 데이터와 인접한 K개의 데이터를 찾아,
    해당 데이터의 라벨이 다수인 범주로 데이터를 분류하는 방식
  • 따라서 사이킷런의 매개변수를 49(기본값 5)로 바꾸면 무조건 다수인 분류가 도미라서
    어떤 데이터를 넣어도 도미라고 분류할 것

4번 문제 정답

 

 

 

Chap 2 데이터 다루기

Them 1. 훈련 세트와 데이터 세트

[ 지도 학습 vs 비지도 학습 ]

  1. 지도 학습
    • 훈련 데이터 = 입력(데이터) + 타킷(정답)

[ 훈련 세트 vs 테스트 세트 ]

  1. 테스트 세트 : 평가에 사용하는 데이터
  2. 훈련 세트 : 훈련에 사용하는 데이터
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]
# 이때 하나의 생선 데이터를 샘플이라고 부른다.
# 도미와 빙어는 각각 35마리, 14마리가 있으므로
# 전체 데이터는 49개의 샘플이 있고 사용하는 특성은 길이와 무게 2개이다.

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


# 이 데이터의 처음 35개를 훈련 세트로, 나머지 14개를 테스트 세트로 사용해보자.
# 그런데 이렇게하면 훈련 세트가 모두 도미라서 빙어로 분류를 할 수가 있나??? 

train_input = fish_data[:35]
train_target = fish_target[:35]
test_input = fish_data[35:]
test_target = fish_target[35:]

kn = kn.fit(train_input, train_target)
kn.score(test_input, test_target)
# 정확도가 역시나 0이 나옴!

 

 

[ 샘플링 편향 ]

상식적으로 훈련 데이터와 테스트 데이터에는 도미와 빙어가 골고루 섞여 있어야한다.

골고루 섞여 있지 않으면 샘플링이 한쪼긍로 지우쳤다는 의미로 샘플링 편향이라고 부른다.

 

훈련 세트에 도미만 있기 때문에 테스트 세트가 무엇이든 무조건 도미라고 분류한다.

 

따라서 훈련 세트와 테스트 세트를 나누기 전에

1) 데이터를 섞든지 2) 골고루 샘플을 뽑아서 훈련 세트와 테스트 세트를 만들어야 한다.

 

이 작업을 도와줄 수 있는 라이브러리 => 넘파이

import numpy as np

input_arr = np.array(fish_data)
target_arr = np.array(fish_target)

print(input_arr.shape)      # (샘플 수, 특성 수) 출력


# 여기서 주의할 점은 input_arr와 target_arr에서 같은 위치는 함께 선택되어야 함
# 넘파이의 arrange() 함수는 0에서 48까지 1씩 증가하는 인덱스를 간단히 만들 수 있음

np.random.seed(42)
index = np.arange(49)
np.random.shuffle(index)
print(index)

train_input = input_arr[index[:35]]
train_target = target_arr[index[:35]]
test_input = input_arr[index[35:]]
test_target = target_arr[index[35:]]

import matplotlib.pyplot as plt
plt.scatter(train_input[:,0], train_input[:,1])
plt.scatter(test_input[:,0], test_input[:,1])
plt.xlabel('length')
plt.ylabel('weight')
plt.show()

 

파란색 : 훈련세트, 주황색 : 테스트 세트

 

 

 

 

[ 추가 숙제 ]

728x90
반응형