티스토리 뷰
#train, test set 만들어서 학습하고 이웃 구하기
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
import numpy as np
import matplotlib.pyplot as plt
bream_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]
bream_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]
smelt_length = [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]
smelt_weight = [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]
fish_length = bream_length + smelt_length
fish_weight = bream_weight + smelt_weight
#train, test 데이터 셋 만들기
fish_data = np.column_stack((fish_length, fish_weight)) #n행 2열(length와 weight) 배열 생성
fish_target = np.concatenate((np.ones(35),np.zeros(14))) #target을 생성하기 위해 타겟 값을 하나의 리스트로 생성
train_input, test_input, train_target, test_target = train_test_split(fish_data, fish_target, random_state = 42)
#knn 알고리즘의 이웃 구하기
kn = KNeighborsClassifier()
kn.fit(train_input, train_target) #train set 훈련
kn.score(test_input, test_target) #test set 훈련
distance, indexes = kn.kneighbors([[25,150]]) #25,150의 주변 이웃을 distance와 indexes를 구함
plt.scatter(train_input[:,0], train_input[:,1]) #train_input 값 보이기
plt.scatter(25,150,marker="^")
plt.scatter(train_input[indexes,0],train_input[indexes,1], marker="D")
plt.show()
# kn.fit(train_input, train_target) #train set 훈련
# kn.score(test_input, test_target) #test set 훈련
# print(kn.predict([[25,150]])) #예측할 데이터 삽입
#표준편차 이용하기
mean = np.mean(train_input, axis = 0) #train_input의 평균 계산하기, 특성의 스케일이 다르므로 axis를 0으로 지정 -> 행을 따라 각 열의 통계 값을 계산, length와 weight의 평균
std = np.std(train_input, axis = 0) #train_input의 표준 편차 계산하기, length와 weight의 표준편차 계산
#train_input 샘플들 각각의 표준 점수를 알아서 계산해줌
train_scaled = (train_input - mean) / std #표준 점수
#그냥 25,150 샘플로 변환하면 이 샘플은 표준점수 계산이 적용되지 않는다.
plt.scatter(train_scaled[:,0], train_scaled[:,1])
plt.scatter(25,150, marker="^")
plt.xlabel('length')
plt.ylabel('weight')
plt.show()
# kn.fit(train_input, train_target) #train set 훈련
# kn.score(test_input, test_target) #test set 훈련
# print(kn.predict([[25,150]])) #예측할 데이터 삽입
#25,150 샘플도 표준 점수를 맞춰서 다시 그려준다.
new = ([25,150] - mean) / std
plt.scatter(train_scaled[:,0],train_scaled[:,1])
plt.scatter(new[0],new[1],marker="D")
plt.xlabel('length')
plt.ylabel('weight')
plt.show()
#바뀐 스케일로 다시 모델을 훈련하고 이웃 샘플을 잡는다.
kn.fit(train_scaled, train_target)
test_scaled = (test_input - mean) / std
kn.score(test_scaled, test_target)
print(kn.predict([new]))
distance, indexes = kn.kneighbors([new])
plt.scatter(train_scaled[:,0],train_scaled[:,1])
plt.scatter(new[0],new[1],marker = "D")
plt.scatter(train_scaled[indexes,0], train_scaled[indexes,1], marker = "^")
plt.xlabel('length')
plt.ylabel('weight')
plt.show()
'머신러닝 > 혼자공부하는머신러닝' 카테고리의 다른 글
확률적 경사 하강법 (0) | 2022.09.06 |
---|---|
proba, 로지스틱 회귀 (0) | 2022.08.25 |
pandas csv read, 다중 선형 회귀 (0) | 2022.08.23 |
혼공머_3 (0) | 2022.08.23 |
혼공머_1 (0) | 2022.08.06 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- SVM
- many-to-many
- many-to-one
- 논문 잘 쓰는법
- 머신러닝
- Ethernet
- json2html
- AE
- SOME/IP
- Python
- automotive ethernet
- HTML
- 단순선형회귀
- PCA
- 로지스틱회귀
- AVTP
- AVB
- 케라스
- automotive
- porks
- problem statement
- 차량용 이더넷
- 딥러닝
- CAN-FD
- 크로스 엔트로피
- 차량 네트워크
- one-to-many
- 이상탐지
- cuckoo
- 회귀
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함