-
[Python] 혼공 머신러닝 + 딥러닝 샘플링 편향데이터 분석 2022. 4. 11. 22:28
출처 : 혼자 공부하는 머신러닝 + 딥러닝
생선의 무게, 길이 데이터를 이용해 k-최근접 이웃 알고리즘으로 빙어와 도미를 분류합니다.
import
더보기
import matplotlib.pyplot as plt
import numpy as np
데이터 입력 및 데이터 구조 처리_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] # zip 함수를 이용하여 두 리스트의 데이터 값에 대한 반복문을 진행 # 두 리스트의 데이터 값을 리스트로 만들어 하나의 리스트로 통합 # 분류 결과 데이터 생성 fish_data = [[l, w] for l, w in zip(fish_length, fish_weight)] fish_target = [1]*35 + [0]*14 # 데이터 구조 확인 ## fish_data의 요소로 길이 값과 무게 값의 리스트를 가진다는 것을 확인 print(fish_data[4]) # [29.0, 430.0] ## fish_data 0~4까지 데이터 호출 print(fish_data[0:5]) ### 시작 인덱스가 0일 경우 인덱스를 생략 가능 print(fish_data[:5]) ### 종료 인덱스가 데이터의 마지막일 경우 생략 가능 print(fish_data[44:]) # 훈련 세트로 입력값 중 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:]
K-최근접 이웃 모델링_1
# 사이킷런의 KNeighborsClassifier(K - 최근접 이웃)의 객체 생성 from sklearn.neighbors import KNeighborsClassifier kn= KNeighborsClassifier() # 모델링 및 모델 평가 kn= kn.fit(train_input, train_target) kn.score(test_input, test_target) # 0.0
- 샘플링 편향 : train을 진행할 때 훈련 데이터로 도미의 데이터만 사용되었고, test를 진행할 때는 빙어의 데이터만 사용되어서 평가 점수가 0점이 나왔다.
샘플링 편향 해결
# 데이터형 numpy array로 변경 input_arr = np.array(fish_data) target_arr = np.array(fish_target) print(input_arr.shape) # 이 명령을 사용하면 (샘플 수, 특성 수)를 출력함, (49, 2) np.random.seed(42) # random으로 출력되는 수를 동일하게 함 index = np.arange(49) # 0부터 48까지 49개의 수를 출력 np.random.shuffle(index) # index의 원소들을 섞음 # 섞은 index list에서 0~34번째 수를 뽑고 input_arr에서 뽑힌 수에 해당하는 원소를 train_input에 할당 train_input = input_arr[index[:35]] # 섞은 index list에서 0~34번째 수를 뽑고 target_arr에서 뽑힌 수에 해당하는 원소를 train_target에 할당 train_target = target_arr[index[:35]] # 섞은 index list에서 35~마지막째 수를 뽑고 input_arr에서 뽑힌 수에 해당하는 원소를 test_input에 할당 test_input = input_arr[index[35:]] # 섞은 index list에서 35~마지막째 수를 뽑고 target_arr에서 뽑힌 수에 해당하는 원소를 test_target에 할당 test_target = target_arr[index[35:]]
'데이터 분석' 카테고리의 다른 글
[Python] Study on non-linear-regression (0) 2022.04.13 [Python] 혼공 머신러닝 + 딥러닝 데이터 표준화의 중요성 (0) 2022.04.11 [python][ubuntu]'데이터 분석을 위한 Python, 3E' _ 1 (0) 2022.04.06