좌충우돌 개발자의 길

3강 : 마켓과 머신러닝 본문

STUDYING/머신러닝&딥러닝

3강 : 마켓과 머신러닝

sustronaut 2021. 7. 14. 22:17

기본 용어

  • 샘플 : 각각의 데이터들 (ex/ 25.4cm, 500g)
  • 특성 : 데이터의 속성 (ex/길이, 무게)

scatter 연속 사용

  • scatter 연속 사용시, 하나의 산점도에 중첩하여 나타나게 되어 있음
  • 즉, 하나의 그래프에 두개의 데이터가 동시에 들어간다
  • 각 데이터마다 색깔을 달리해서 보여준다
smelt_length = [9.8, 10.5, 10.6]
smelt_weight = [9.7, 9.5, 7.2]

plt.scatter(bream_length, bream_weight)
plt.scatter(smelt_length, smelt_weight)
plt.xlabel('length')
plt.ylabel('weight')
plt.show()
  • 출력결과

도미와 빙어 데이터 합치기

  • 사이킷런이 기대하는 데이터 형태로 바꿔줘야한다.

리스트 내포

  • 리스트 안에 for 문이 있는 형태를 리스트 내포라고 한다.
fish_data = [[l, w] for l, w in zip(length, weight)]

→ length와 weight을 zip으로 묶은 다음. length는 l로 weight은 w로 하나씩 꺼낸고 [l, w]의 형태로 만들어줌

정답 준비

  • 어떤게 도미이고 어떤게 빙어인지 안알려주면 머신러닝이 제대로 처리 못하기 때문에 뭐가 뭔지 알려주는 코드가 필요하다
fish_target = [1]*35 + [0]*14

찾으려는 데이터를 1로 두고 안찾으려는 데이터는 0으로 둔다 ⇒ 이진분류

→ 여기선 도미가 1 빙어가 0

 

k-최근접 이웃

  • k-최근접 이웃을 구현한 알고리즘을 만들어낼 수도 있지만 이미 구현되어 있는 라이브러리를 사용하자
# k-최근접 이웃을 구현한 것을 import함 
from sklearn.neighbors import KNeightborsClassifier

#클래스 객체를 kn으로 저장 (kn을 머신러닝 모델이라고 함)
kn = KNeightborsClassifier()

#fit으로 두 데이터를 머신러닝으로 분간하게 함 
kn.fit(fish_data, fish_target)

#얼마만큼 잘 학습되었는지 확인(어느 정도 정확한지)하기 위해 score 사용함
kn.score(fish_data, fish_target)
  • fit 메소드 : 사이킷런에 있는 다른 클래스에서도 있어서 다른 클래스 사용할 때 사용 가능
  • socre 메소드 결과로 1.0나오면 백퍼센트 다 맞춘 거임

 

새로운 생선 예측하기

#predict 메소드를 사용하여 예측하기
kn.predict([[30,600]]

#결과값으로 1일 출력됨 -> 1은 도미
array([1])
  • 주의점 : kn.fit이 2차원으로 리스트가 작성되어 있기 때문에 predict도 2차원 리스트로 작성해야한다
  • K-최근접 이웃은 주위에 바라볼 샘플 5개들(이웃)을 보고 예측하는 방식이다.

주위에 바라볼 샘플의 개수 늘리기

  • 무조건 도미
#샘플개수 늘리는 방법 (n_neighbors라는 매개변수를 이용해서 늘리기)
#49개는 샘플의 전체 개수와 동일하므로 전체 샘플을 다 바라보게 된다
#그래서 전체 샘플의 다수는 다 도미이기에 무조건 도미가 나올 수 밖에 없음
kn49 = KNeightborsClassifier(n_neighbors=49)

kn49.fit(fish_data, fish_target_
kn49.score(fish_data, fish_target)

#결과값
0.7142857142857143

#도미의 수를 전체로 나눈 경우
print(35/49)

#결과값
0.7142857142857143