1. 인공지능과 머신러닝, 딥러닝
인공지능(artificial intelligence)
- 사람처럼 학습하고 추론할 수 있는 지능을 가진 컴퓨터 시스템을 만드는 기술
머신러닝(machine learning)
- 규칙을 일일이 프로그래밍하지 않아도 자동으로 데이터에서 규칙을 학습하는 알고리즘을 연구하는 분야
딥러닝(deep learning)
- 많은 머신러닝 알고리즘 중에서 인공 신경망(artificial neural network)을 기반으로 한 방법들을 통칭
2. 코랩과 주피터 노트북
구글 코랩(Colab)
- 클라우드 기반의 주피터 노트북 개발환경
- 머신러닝은 컴퓨터 사양이 중요한데, 구글 코랩을 사용하면 컴퓨터 성능과 상관없이 프로그램을 실습해 볼 수 있음
셀(cell)
- 코랩에서 실행할 수 있는 최소단위
3. 마켓과 머신러닝
1) 생선 분류 문제
분류(classification)
- 여러 개의 종류(클래스) 중 하나를 구별해 내는 문제
- 이진 분류(binaray clssification) : 2개의 클래스 중 하나를 고르는 문제
특성(feature)
- 데이터의 특징
도미데이터 준비하기
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]
- 도미 35마리를 2차원 그래프에 점으로 표시
- 생선의 길이가 길수록 무게가 많이 나감
-> 산점도 그래프가 일직선에 가까운 형태로 나타나는 선형적(linear)
import matplotlib.pyplot as plt #matplotlib의 pyplot 함수를 plt으로 줄여서 사용
plt.scatter(bream_length, bream_weight)
plt.xlabel('length') #x축은 길이
plt.ylabel('weight') #y축은 무게
plt.show()
빙어 데이터 준비하기
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]
plt.scatter(bream_length, bream_weight)
plt.scatter(smelt_length, smelt_weight)
plt.xlabel('length')
plt.ylabel('weight')
plt.show()
- 빙어도 도미와 비슷하게 길이와 무게가 비례하지만 늘어나는 정도가 조금 다름
- 빙어는 길이가 늘어나더라도 무게가 많이 늘지 않음
- 따라서 빙어의 산점도는 선형적이지만 무게가 길이에 영향을 덜 받는다고 볼 수 있음
2) 첫 번째 머신러닝 프로그램
- 도미와 빙어 데이터를 하나의 데이터로 합침
length = bream_length+smelt_length
weight = bream_weight+smelt_weight
- 사이킷런 패키지를 사용하려면 각 특성의 리스트를 세로 방향으로 늘어뜨린 2차원 리스트를 만들어야 함
- zip() 함수는 나열된 리스트 각각에서 하나씩 원소를 꺼내 반환
- for문은 zip() 함수로 length와 weight 리스트에서 원소를 하나씩 꺼내어 l과 w에 할당
fish_data =[[l,w] for l,w in zip(length,weight)]
- 정답 데이터 준비
- 도미는 1, 빙어는 0
fish_target=[1]*35 + [0]*14
print(fish_target)
- 사이킷런 패키지에서 k-최근접 이웃 알고리즘을 구현한 클래스인 KNeighborsClassifier를 임포트
- 특정 클래스만 임포트하려면 from ~ import 구문 사용
from sklearn.neighbors import KNeighborsClassifier
- 임포트한 KNeighborsClassifier 클래스의 객체를 먼저 만듬
kn=KNeighborsClassifier()
- 객체에 fish_data와 fish_target을 전달하여 도미를 찾기 위한 기준을 학습시킴
- 이런 과정을 훈련(training)이라고 부름
- 사이킷런에서의 fit() 메서드는 주어진 데이터로 알고리즘을 훈련
kn.fit(fish_data,fish_target)
- 객체 kn이 얼마나 잘 훈련되었는지를 평가
- 사이킷런에서의 score() 메서드는 모델을 평가함
-> 0에서 1사이의 값을 반환
kn.score(fish_data,fish_target)
정확도 : 정확한 답을 몇개 맞혔는지를 백분율로 나타낸 값. (정확히 맞힌 개수) / (전체 데이터 개수)
3) k-최근접 이웃 알고리즘
- 어떤 데이터에 대한 답을 구할 때 주위의 다른 데이터를 보고 다수를 차지하는 것을 정답으로 사용
- 새로운 데이터에 대해 예측할 때는 가장 가까운 직선거리에 어떤 데이터가 있는지를 살피기만 하면 됨
plt.scatter(bream_length, bream_weight)
plt.scatter(smelt_length, smelt_weight)
plt.scatter(30,600,marker='^')
plt.xlabel('length')
plt.ylabel('weight')
plt.show()
- predice() 메서드는 새로운 데이터의 정답을 예측
- 새로운 데이터는 도미
kn.predict([[30,600]])
- KNeighborsClassifier 클래스의 참고 데이터의 기본값은 5
- 기준은 n_neighbors 매개변수로 바꿀 수 있음
kn49 = KNeighborsClassifier(n_neighbors=49) #참고 데이터를 49개로 한 kn49 모델
kn49.fit(fish_data, fish_target)
kn49.score(fish_data, fish_target)
- fish_data의 데이터 49개 중에 도미가 35개로 다수를 차지하므로 어떤 데이터를 넣어도 무조건 도미로 예측
'데이터 > 머신러닝' 카테고리의 다른 글
[혼공] ch 6. 비지도 학습 (0) | 2024.06.28 |
---|---|
[혼공] ch 5. 트리 알고리즘 (0) | 2024.06.27 |
[혼공] ch 4. 다양한 분류 알고리즘 (0) | 2024.06.26 |
[혼공] ch 3. 회귀 알고리즘과 모델 규제 (1) | 2024.06.26 |
[혼공] ch 2. 데이터 다루기 (0) | 2023.12.25 |