새소식

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

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

  • -
728x90
반응형

# page 73 ~ 78

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

 

넘파이:

"넘파이(numpy)는 파이썬의 대표적인 배열(array) 라이브러리입니다.

  • 파이썬의 리스트로 2차원 리스트를 표현할 수 있지만 고차원 리스트를 표현하려면 매우 번거롭습니다.
  • 넘파이는 고차원의 배열손쉽게 만들고 조작할 수 있는 간편한 도구를 많이 제공합니다.
    • 차원(dimension)이란 말은 조금씩 다른 의미로 쓰일 수 있습니다.
    • 배열에서 차원은 좌표계의 축과 같습니다.
    • 1차원 배열은 선, 2차원 배열은 면, 3차원 배열은 공간을 나타냅니다.
    • 보통의 xy 좌표계와는 달리 시작점이 왼쪽 아래가 아니고 왼쪽 위에서부터 시작합니다.

 

"먼저 넘파이 라이브러리를 임포트합니다."

 

"넘파이 array() 함수에 파이썬 리스트를 전달하면 끝입니다."

 

import numpy as np

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

print(input_arr)

# 출력 결과물
[[  25.4  242. ]
 [  26.3  290. ]
 [  26.5  340. ]
 [  29.   363. ]
 [  29.   430. ]
 [  29.7  450. ]
 [  29.7  500. ]
 [  30.   390. ]
 [  30.   450. ]
 [  30.7  500. ]
 [  31.   475. ]
 [  31.   500. ]
 [  31.5  500. ]
 [  32.   340. ]
 [  32.   600. ]
 [  32.   600. ]
 [  33.   700. ]
 [  33.   700. ]
 [  33.5  610. ]
 [  33.5  650. ]
 [  34.   575. ]
 [  34.   685. ]
 [  34.5  620. ]
 [  35.   680. ]
 [  35.   700. ]
 [  35.   725. ]
 [  35.   720. ]
 [  36.   714. ]
 [  36.   850. ]
 [  37.  1000. ]
 [  38.5  920. ]
 [  38.5  955. ]
 [  39.5  925. ]
 [  41.   975. ]
 [  41.   950. ]
 [   9.8    6.7]
 [  10.5    7.5]
 [  10.6    7. ]
 [  11.     9.7]
 [  11.2    9.8]
 [  11.3    8.7]
 [  11.8   10. ]
 [  11.8    9.9]
 [  12.     9.8]
 [  12.2   12.2]
 [  12.4   13.4]
 [  13.    12.2]
 [  14.3   19.7]
 [  15.    19.9]]

 

"눈으로 확인하는 것 외에도 넘파이 배열 객체는 배열의 크기를 알려주는 shape 속성을 제공합니다."

 

# shape 속성 사용
## 해당 속성을 사용하면 (샘플 수, 특성 수)를 출력합니다
print(input_arr.shape)

# 출력 결과물
(49, 2)

 

"이제 생선 데이터를 넘파이 배열로 준비했으므로 이 배열에서 랜덤하게 샘플을 선택훈련 세트테스트 세트로 만들 차례입니다."

"여기에서는 배열을 섞은 후에 나누는 방식 대신에 무작위로 샘플을 고르는 방법을 사용하겠습니다."

"한 가지 주의할 점은 input_arr와 target_arr에서 같은 위치는 함께 선택되어야 한다는 점입니다."

 

"이렇게 하려면 훈련 세트와 테스트 세트로 나눌 인덱스값을 잘 기억해야겠군요."

"항상 인덱스값을 기억할 수는 없으니 다른 방법이 필요합니다."

 

"넘파이 arange() 함수를 사용하면 0에서부터 48까지 1씩 증가하는 인덱스를 간단히 만들 수 있습니다."

  • 넘파이에서 무작위 결과를 만드는 함수들은 실행할 때마다 다른 결과를 만듭니다.
  • 일정한 결과를 얻으려면 초기에 랜덤 시드(random seed)를 지정하면 됩니다.
  • 책과 동일한 실습 결과를 얻을 수 있도록 랜덤 시드를 42로 지정
np.random.seed(42)
index = np.arange(49)
np.random.shuffle(index)

 

"넘파이 arange() 함수에 정수 N을 전달하면 0에서부터 N-1까지 1씩 증가하는 배열을 만듭니다."

"넘파이 random 패키지 아래에 있는 shuffle() 함수는 주어진 배열을 무작위로 섞습니다."

 

print(index)

# 출력 결과물
[13 45 47 44 17 27 26 25 31 19 12  4 34  8  3  6 40 41 46 15  9 16 24 33
 30  0 43 32  5 29 11 36  1 21  2 37 35 23 39 10 22 18 48 20  7 42 14 28
 38]

 

"랜덤하게 섞인 인덱스를 사용해 전체 데이터를 훈련 세트와 테스트 세트로 나누어 보죠."

"넘파이는 슬라이싱 외에 배열 인덱싱(array indexing)이란 기능을 제공합니다."

"배열 인덱싱은 1개의 인덱스가 아닌 여러 개의 인덱스로 한 번에 여러 개의 원소를 선택할 수 있습니다."

"예를 들면 다음처럼 input_arr에서 두 번째와 네 번째 샘플을 선택하여 출력할 수 있습니다."

 

print(input_arr[[1,3]])

# 출력 결과물
[[ 26.3 290. ]
 [ 29.  363. ]]

 

"비슷한 방식으로 리스트 대신 넘파이 배열을 인덱스로 전달할 수도 있습니다."

"앞서 만든 index 배열의 처음 35개를 input_arr와 target_arr에 전달하여 랜덤하게 35개의 샘플을 훈련 세트로 만들겠습니다."

 

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

 

"나머지 14개를 테스트 세트로 만들어 보겠습니다."

 

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

 

 

"파란색이 훈련 세트이고 주황색이 테스트 세트입니다."

"의도한 대로 만들어진 것 같습니다."

 

"이제 모델을 다시 훈련시켜 보죠."

 

 

 

# To Be...

두 번째 머신러닝 프로그램

 

 

728x90
반응형
Contents

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

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