본문 바로가기

머신러닝/혼자 공부하는 머신러닝

3강 마켓과 머신러닝

이 글은 https://www.youtube.com/watch?v=GOCVVSMeIf8&list=PLJN246lAkhQjoU0C4v8FgtbjOIXxSs_4Q&index=3 보고 공부한 글 입니다.

 

 

 

전체 로드맵이다.

 

머신러닝 모델을 만든다는 것은 무엇인가?

머신러닝 프로그램을 만든다는 것이다.

 

 

머신러닝의 샘플 종류를 뜻할 때 클래스라고한다.

 

뭔가 구분하는 작업을 분류라고 한다.

 

2개를 분류한다면 이진분류라고 한다.

 

각각의 데이터샘플, 특성, 속성, 관측이라고 부른다.

 

 

산점도(scatter plot)

 

위와 같은 그래프를 산점도라고 한다.

 

파이썬에서 그래프를 그리는 가장 대표적인 라이프러리 matplotlib

 

import matplotlib.pyplot as plt

 

라고  plt 로 대부분쓴다.

 

plt.scatter(bream_length, bream_weight)
plt.xlabel('length')
plt.ylabel('weight')
plt.show()

하면 위 처럼 그림이 나온다.

 

 

각 점이 도미(생선) 데이터 하나를 의미한다.

 

 

plt.scatter(bream_length, bream_weight)
plt.scatter(smelt_length, smelt_weight)
plt.xlabel('length')
plt.ylabel('weight')
plt.show()

scatter에 2개의 데이터를 넣으면 1개의 그래프에 2개의 데이터가나온다.

 

둘이 색깔도 다르다.

 

 

 

 

 

 

도미와 빙어의 길이를 하나의 리스트로 합쳐야 한다.

 

합치긴 했는데 오른쪽과 같이 변경해야 한다.

 

리스트 안에 리스트가 있도록 각 샘플을 변경해야 한다.

 

사이킷런은 저런 형태로만 데이터를 다룬다.

 

길이를 1개의 열을 무게를 1개의 열로

 

각 데이터를 하나의 행으로 만든다.

 

 

 

 

일일이 넣으면 힘들다!

 

리스트 컴프리핸션을 사용한다.

바로 머신러닝을 돌릴 수 있는 것은 아니다.

 

 

정답을 준비해야 한다.

이렇게 정답을 만들어 놓는 것을 지도학습이라고 한다.

 

1 리스트에 35개를 만들고 0 리스트에 14개를 만들고 더하면

 

+ 연산자 오버로딩으로 하나의 리스트가 된다.

 

이진 분리면 거의 대부분 0, 1로 구분한다. 도미를 1로 놓고 빙어를 0으로 놨다.

반대로 빙어를 찾으려면 빙어를1, 도미를0으로 둔다.

 

 

K - 최근접 이웃

우리가 k-최근접이웃 알고리즘을 써보자.

 

KNeighborsClassifier로 class가 만들어져 있다.

 

class의 ()를 붙혀 객체를 만든다.

 

fit() 매소드로 데이터를 전달한다.

 

kn을 모델이라고 부른다

 

알고리즘을 객체화 시킨것을 모델이라고 부르기도 한다.

 

score()메서드는 0~1까지의 값을 출력한다. 1.0이면 100% 다 맞췄다는 의미이다.

 

예시)

길이 30cm, 무게 600g 인 데이터를 예측해보자.

우리가 생각하기에는 당연히 도미일 것이다.

 

kn객체로 predict() 메서드로 예측을 할 수 있다. 

이 때도 2차원 배열을 줘야 한다.

 

결과값은 1이라고 출력한다. 사이킷런이 array() 타입으로 반환하기 때문이다.

 

k-최근접이 예측하는 방식

주위에 있는 클래스 5개를 보고 선택을 한다.

 

"주위에 도미가 5개 있으니 도미라고 생각"

도미가 정답을 삼아서 반환 한다. 

 

 

만약 5개만 바라보지 말고 더 많은것을 바라보면 어떨까?

객체를 만들때 매개변수로 값을 줘서 49개로 줘봤다.

 

근데 총 데이터가 49개이니 전체 샘플을 보는 것이다.

이러면 무조건 도미가 나올 것이다

도미가 더 많으니 

 

빙어는 도미와 다르니 14개는 틀렸다고 나올 것이다.

 

 

 

 

주위에 바라보는게 많을 수록 정답에 가깝지 못하다 = 도미가 0.97 확률로 있다.

728x90