4강. 훈련 세트와 테스트 세트로 나누어 사용하기
02-1. 훈련 세트와 테스트 세트
👀 완벽한 보고서
- k- 최근접 이웃 알고리즘은 규칙(패턴)을 찾는 것이라기보다는
단순히 훈련 데이터를 저장한 다음 가까운 이웃을 골라서 다수의 클래스를 따르는 방식
- 훈련 데이터를 가지고 있다면 사실상 정답을 가지고 있는 것
- 정답을 알고 있으니 답을 맞출 수 밖에 없는것
ex) 기출문제를 풀어서 시험을 대비했는데 시험에 기출문제와 완전히 동일한 문제가 나온 상황
- 풀이 방법과 상관 없이 답을 외워버리면 100점을 맞을 수 있다
- fit()메서드에 훈련한 데이터 말고 다른 데이터로 score()메서드에서 테스트해야 올바른 평가 방법
- 테스트 데이터를 따로 준비
👉🏻 지도학습과 비지도학습
🧩 지도학습
- 입력(input)과 타겟(target)이 있는 데이터(훈련 데이터)를 활용해서 학습
- Supervised Learning
- 가르침이 있는 것
- k-최근접 이웃 등...
🧩 비지도학습
- target 데이터 없이 입력(input)만 있음
- 특성의 갯수 줄이기, 비슷한 샘플끼리 모으기 ...
🧩 강화 학습
- 알파고
- 어떤 행동을 수행한 후 행동의 결과를 피드백 받아 개선해나감
- 환경이 주는 부산 값을 최대화하기 위해(?) 수행하는 방식
- 에이전트(agent)
👉🏻 훈련 세트와 테스트 세트
- 테스트를 위해서 데이터를 더 구하면 좋음
- 데이터는 다다익선
- 현실에서 그렇게 하기 어렵다면 훈련 데이터의 일부를 덜어내서 테스트 데이터로!
- 슬라이싱 연산자 활용해 여러개의 원소 한 번에 선택
- train으로는 0번부터 34번 원소를
- test로는 35번부터 마지막 원소를
👉🏻 테스트 세트에서 평가하기
- k-최근접 이웃 클래스
- 인스턴스 생성
- fit()메서드에 train
- socore()에 test를 전달
- test에 있는 14개를 전부 맞추지 못함
🧩 샘플링 편향
- length, weight 리스트를 만들 때 단순히 도미 + 빙어를 쭉 늘어놓고 붙이기만 함
- 훈련/테스트 세트를 나눌 때도 35개는 훈련, 14개는 테스트로 나눔
- 이렇게 되면 훈련 세트에는 빙어가 하나도 없고, 테스트 세트에는 도미가 하나도 없음
- 두 클래스가 잘 섞여 있어야 함
👉🏻 넘파이
- 파이썬의 대표적인 배열 라이브러리
- 싸이킷런, 맷플롯립, 텐서플로도 넘파이에 크게 의존
- 입력 데이터가 넘파이로 전달될거라 기대
- 싸이킷런의 predict()메서드는 반환값을 넘파이로 리턴 (입력값도)
- 서로 다른 타입의 데이터를 넣을 수 없다
넘파이(Numpy)는 파이썬의 라이브러리로, 숫자 데이터를 다루는 데 매우 효과적이며, 데이터 처리와 계산에 유용한 도구를 제공합니다. 초보자도 이해하기 쉽게 설명해드리겠습니다.
1. 배열(Array): 넘파이의 핵심 요소는 배열입니다. 배열은 숫자 데이터를 담는 그릇처럼 생각할 수 있습니다. 파이썬의 리스트와 비슷하게 보이지만, 넘파이 배열은 효율적인 연산을 수행하는 데 특화되어 있습니다.
2. 다차원 배열: 넘파이 배열은 1차원 배열, 2차원 배열(행렬), 3차원 배열 등 다양한 차원을 가질 수 있습니다. 이것은 표 데이터, 이미지, 음성, 시계열 데이터 등 다양한 유형의 숫자 데이터를 다루는 데 유용합니다.
3. 원소 접근: 배열 내의 개별 원소에 접근하려면 인덱스(위치)를 사용합니다. 예를 들어, `arr[0]`은 배열 `arr`의 첫 번째 원소를 나타냅니다.
4. 벡터화 연산: 넘파이는 배열 간의 산술 연산을 효율적으로 수행할 수 있는 기능을 제공합니다. 이를 통해 반복문을 사용하지 않고도 배열에 있는 모든 원소에 대해 한 번에 연산을 수행할 수 있습니다.
5. 브로드캐스팅: 넘파이에서는 서로 다른 모양(shape)을 가진 배열 간에도 연산이 가능한 경우가 있습니다. 이를 브로드캐스팅이라고 부릅니다.
6. 배열 생성: 넘파이를 사용하면 배열을 생성하고 초기화하는 다양한 방법이 있습니다. 예를 들어, `numpy.array()` 함수를 사용하여 리스트나 튜플에서 배열을 만들 수 있습니다.
7. 유용한 함수: 넘파이는 다양한 수학 함수와 통계 함수를 제공합니다. 평균, 표준편차, 최댓값, 최솟값 등을 쉽게 계산할 수 있습니다.
8. 데이터 조작: 데이터를 정렬, 필터링, 변환, 슬라이싱 및 조작하는 다양한 메서드와 기능이 제공됩니다.
9. 데이터 분석과 머신러닝: 넘파이는 데이터 과학 및 머신러닝 라이브러리와 함께 사용됩니다. 판다스, 사이킷런, 텐서플로우 등과 함께 넘파이를 사용하여 데이터 분석 및 모델 개발에 활용됩니다.
요약하면, 넘파이는 파이썬을 데이터 과학 및 수치 계산에 적합한 도구로 만들어줍니다. 숫자 데이터를 다루는 데 효과적이고 편리한 방법을 제공하며, 데이터 분석, 머신러닝, 과학 연구 등 다양한 분야에서 사용됩니다. 초보자에게도 익히기 쉬우며, 파이썬에서 숫자 데이터를 다루는 데 필수적인 라이브러리 중 하나입니다.
- 1차원 배열: 벡터
- 위의 예시의 경우 7차원 벡터
- 2차원 배열: 행렬 (행과 열)
- 텐서와 배열은 거의 동의어
- 스칼라: 0차원 텐서
- numpy를 import 해서 np로 줄여 쓴다
- 단순히 35 + 14로 합친 fish_data, fish_target을 np.array()메서드에 넣어 넘파이 배열로 만든다
- 겉으로 보기에는 리스트와 넘파이 배열의 구분이 크게 느껴지지는 않지만 사용하다보면 넘파이 배열이 편하다는 것을 알게 된다
👉🏻 데이터 섞기
- 입력과 타켓이 함께 섞여서 이동을 해야함
- 입력과 타겟이 쌍을 이루고 있는데 따로 섞게 되면 지도학습에서 정답을 제대로 주지 못함
- 위 그림으로 예를 들면 길이가 26.3cm이고 무게가 290.0g인 것은 도미인 1로 쌍을 잘 이루어야한다.
이것 마저 섞여버리면 안된다
-그렇게 하려면 인덱스를 섞어야
- 0~48까지 인덱스를 만들고, 섞음
- arange에 정수 하나를 주면 그것에 맞게 (1씩 증가하는)배열을 만들어준다
- numpy의 random모듈 밑에 있는 shuffle을 사용하면 섞어줄 수 있다
- 섞은 결과
- 섞은 인덱스대로 0 ~ 34까지는 train으로, 35 ~ 49까지는 test로 사용
- 인덱스 배열에 있는 0~34번까지 선택해 input_arr에서 원소를 선택한다
✅ 배열 슬라이싱
- 인덱스가 담긴 배열을 넣어 원소를 선택
a = np.array([5,6,7,8])
a[[1,3]]
- 6과 8을 선택함
✅ np.randomseed()
- ()안에 숫자만 동일하게 선택하면 그 뒤의 랜덤한 행동들이 유지된다
- 재현성을 위해
- 실제 머신러닝에서는 사용되지 않는다 (단순히 교육을 위해)
- scatter()함수를 연속해서 사용하면 색을 달리해서 한 곳에 그려줌
- 훈련 데이터: 파란색, 테스트 데이터: 주황색
- 2차원 배열 선택시 콤마(,)를 통해 행과 열을 선택할 수 있다 / 배열명[행, 열]
- a라는 배열이 있을 때 a[1,0]하면 두 번째 내부리스트의 첫 번째 원소를 선택함
- 슬라이싱 연산자 사용 + 시작점과 끝점을 생략함으로써 전처 선택
- 행은 전체, 첫 번째 열(length)를 선택하겠다 → x축 데이터
- 행은 전체, 두 번째 열(weight)를 선택하겠다 → y축 데이터
- 서로 잘 섞였음
👉🏻 두 번째 머신러닝 프로그램
- 데이터를 잘 섞고 나니 100%가 나왔다
출처: https://youtu.be/o9kGDpZbmx0?si=y4aajwETTjIFGhRH