# 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
"파란색이 훈련 세트이고 주황색이 테스트 세트입니다."
"의도한 대로 만들어진 것 같습니다."
"이제 모델을 다시 훈련시켜 보죠."
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/005.gif)
# To Be...
두 번째 머신러닝 프로그램
'IT > 혼자 공부하는 머신러닝+딥러닝' 카테고리의 다른 글
[Day-4] 혼자 공부하는 머신러닝+딥러닝 - 6 (0) | 2022.08.16 |
---|---|
[Day-3] 혼자 공부하는 머신러닝+딥러닝 - 4 (0) | 2022.08.13 |
[Day-2] 혼자 공부하는 머신러닝+딥러닝 - 3 (0) | 2022.08.13 |
[Day-1] 혼자 공부하는 머신러닝+딥러닝 - 2 (0) | 2022.08.08 |
[Day-1] 혼자 공부하는 머신러닝+딥러닝 - 1 (0) | 2022.08.07 |