안녕하세요 IT`s닝겐 입니다.
제가 보는 교재인 '혼자 공부하는 머신러닝 + 딥러닝' 책의 좋은점은 머신러닝 초기 학습시 많은 데이터를 가지고
코딩하는것은 상당히 부담스런 부분이며, 이 많은 데이터로 뭘하는지 ? 이런 궁금증이 풀리지않았습니다.
맞습니다. 기계학습으로 뭘하는데? 이런 궁금증이 있었고, 위 교재는 이러한 궁금증을 아주 작은 데이터부터 시작하여,
기존의 IT환경에서 머신러닝이 무엇을 할수 있는지에 대한 내용을 알려줍니다.
1. 생선분류의 대한 문제.
- 데이터 : www.kaggle.com/aungpyaeap/fish-market
- 위 생선 데이터는 'Pike', 'Smelt', 'Perch', 'Bream', 'Roach', 'Whitefish' 생선 종류에 대한 길이와 무게 데이터를 제공하고 있습니다. 자세하게 볼 필요는 없습니다.
2. 문제
- 그럼 위 와 같은 데이터가 제공된다면, 기존 방식의 코딩으론 어떻게 저 생선들을 분류하였는가.
- 제공된 데이터를 통해 길이와 무게를 IF문과, Case 문을 통해, 생선을 분류 하였을 것 입니다.
- 하지만 기존의 코딩으로 IF문과 Case문 등을 통해 생선 분류시 만약, 같은 길이 생선인데 무게가 틀리다면? 혹은 무게는 비슷한데 길이가 틀리다면? 어떻게 분류 할 수 있을까?
- 제공된 데이터 내에 고유의 ID값과 같은 것을 A = A 이런식의 코딩이 이루어저야 분류가 가능합니다.
- 즉, 고유의 ID값과 같은것이 없다면, 혹은 제공된 데이터가 지속적으로 늘어난다면, 정확하게 분류가 되지않고, 데이터가 지속적으로 늘어날때마다, 데이터를 추가해주는 작업이 동반되어야 합니다.
- 이런부분에 대해 머신러닝은 생선의 무게, 길이 등의 데이터를 통해 학습하고, 생선을 분류 하는것이 머신러닝의 기능입니다.
3. 테스트 데이터 준비.
- 두 생선 Bream, Smelt의 무게와 길이 데이터를 아래와 같이 준비하도록 하겠습니다.
- 박해선님의 github를 구글에서 검색하면, 교재에 사용된 코드와, 아래와같은 데이터셋 자료를 확인할 수 있습니다.
- 학습인 만큼, 코딩을 복사하기보단 직접 입력하고 경험하시는것을 추천드립니다.
1) bream
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]
2) smelt
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]
4. 생선 Bream에 대한 산점도 만들어보기.
- 산점도? 산점도란 무엇일까, 어렵게 생각할 필요가 없습니다. 점을 찍는다는 건데요, x, y 그래프에 길이가 어마일때 무게는 얼마인지에 대한 점을 찍어 보는것입니다.
- python 머신러닝에서 데이터 시각화를 위해 많이 사용되는 matplotlib를 사용하여, 아래와 같은 코드로 Bream에 대한 점을 찍어보도록 하겠습니다.
코드)
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]
import matplotlib.pyplot as plt
plt.scatter(bream_length, bream_weight)
plt.xlabel('length')
plt.ylabel('weight')
plt.show()
위 그림과 아래의 점을 길이가 x일때 무게가 y임을 점으로 표현하였습니다.
5. 생선 Smelt에 대한 산점 추가하기
- 위와 같은 방식으로 아래와 같은 코드로 Smelt생선에 대한 점을 찍어 보겠습니다.
코드)
## 생선 bream과 smelt의 length와 weight데이터 준비
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]
import matplotlib.pyplot as plt
plt.scatter(bream_length, bream_weight)
plt.scatter(smelt_length, smelt_weight)
plt.xlabel('length')
plt.ylabel('weight')
plt.show()
친절하게 색으로 구분까지 되어있습니다.
위 데이터를 코딩의결과를 보면 생선 Smelt가 상대적으로 가볍고, 길이가 짧다는것을 예측할 수 있습니다.
사람이 예측을 하는것은 무엇을 기반으로 할까요? 경험입니다. TV크기를 눈으로 보았을때, 작은 TV를 보면 몇인치 일것이다, 혹은 큰 TV를 보았을때 몇인치일 것이다. 물론 TV의 크기는 정형화 되어있지만, 만약 58인치 TV가나온다면 사람은 58인치 TV를 60인치 TV로 예측할 수 있습니다.
이것을 머신러닝으로 생각해본다면, 위와 같은 생선데이터를 기계가 학습하고, 다른 생선 데이터가 제공되었을때, 머신러닝은 해당생선이 어떤것인가를 예측 할 수 있게됩니다.
'Python ML, Deep Learning' 카테고리의 다른 글
Python 머신러닝 #분류하기 (K-최근접 이웃#2) (0) | 2021.04.21 |
---|---|
Python 머신러닝 #분류하기 (K-최근접 이웃#1) (0) | 2021.04.20 |
Python 머신러닝 #1 colab환경 준비 (1) | 2021.04.19 |
Python 머신러닝 시작하기 (1) | 2021.04.19 |