Chapter 1. 나의 첫 머신러닝

김영빈·2022년 8월 25일
0

혼공머신

목록 보기
1/7
post-thumbnail

1-1 인공지능과 머신러닝, 딥러닝

📕 키워드 정리

인공지능이란?
- 사람처럼 학습하고 추론할 수 있는 지능을 가진 시스템을 만드는 기술로,
강인공지능과 약인공지능으로 나눌 수 있다.

머신러닝이란?
- 규칙을 프로그래밍하지 않아도 자동으로 데이터에서 규칙을 학습하는 알고리즘을 연구하는 분야.

딥러닝이란?
- 머신러닝 알고리즘 중에서 인공 신경망을 기반으로 한 방법을 통칭한다.

1-3 마켓과 머신러닝

생선 데이터를 활용한 머신러닝 실습

1) 데이터 확인

📕 도미 데이터 입력

# 생선의 길이
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]

📕 scatter plot

  • matplotlib 활용 scatter plot 그리기
import matplotlib.pyplot as plt

plt.figure(figsize=(8,6))
plt.scatter(x=bream_length, y=bream_weight)
plt.xlabel('length')
plt.ylabel('weight')
plt.show();
  • 결과 이미지

❗ discussion
생선의 길이가 길수록 무게가 많이 나간다
--> 산점도 그래프가 일직선 형태로 나타나는 것을 선형적(linear)이라고 한다.

📕 빙어 데이터 입력

# 길이
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]

📕 scatter plot

plt.figure(figsize=(8,6))
plt.scatter(x=bream_length, y=bream_weight)
plt.scatter(x=smelt_length, y=smelt_weight)
plt.xlabel('length')
plt.ylabel('weight')
plt.show();
  • 결과 이미지

❗ discussion
빙어가 도미에 비해 무게가 길이에 영향을 덜 받는다
-> 빙어가 도미에 비해 특성 간 영향을 덜 받는다.

2. k-최근접 이웃 알고리즘(k-Nearest Neighbors)

📕 데이터 병합

# 두 데이터 합치기
length = bream_length + smelt_length
weight = bream_weight + smelt_weight

# 데이터 2차원 배열
fish_data = [[l,w] for l,w in zip(length,weight)]
  • 결과
print(fish_data)
[[25.4, 242.0],
 [26.3, 290.0],
 [26.5, 340.0],
 [29.0, 363.0],
 [29.0, 430.0],
 [29.7, 450.0],
 [29.7, 500.0],
 ....

📕 타겟 데이터 생성

# 도미 = 1. 빙어 = 0
fish_target = [1]*35 + [0]*14

📕 사이킷런 k-최근접 이웃 알고리즘

# 함수 import
from sklearn.neighbors import KNeighborsClassifier
kn = KNeighborsClassifier()

# import한 KNeighborClassifier 클래스의 객체 생성
kn.fit(fish_data, fish_target)

# 훈련
kn.fit(fish_data, fish_target)

# 평가
kn.score(fish_data, fish_target)

# 예측 [l,w] = [30,600] (도미 데이터 인근 데이터)
kn.predict([[30,600]])

❗ discussion
k-최근접 이웃 알고리즘 활용시 주위에 많이 있는 데이터를 활용하여 예측을 진행한다.
새로운 데이터에 대해 예측 시 가장 가까운 직선거리에 어떤 데이터가 있는지를 살피기에,
데이터가 많은 경우 시간,공간 복잡도가 커진다.

📕 객체 속성 확인

kn 클래스는 _fit_X 속성에 fish_data를, _y 속성에 fish_target을 가지고 있다.

print(kn._fit_X)
[[  25.4  242. ]
 [  26.3  290. ]
 [  26.5  340. ]
 [  29.   363. ]
 .....
 
print(kn._y)
[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0
 0 0 0 0 0 0 0 0 0 0 0 0]

❗ discussion
실제로 k - 최근접 이웃 알고리즘은 훈련을 하는 것이 아니라,
fit() 메서드에 전달받은 데이터를 모두 저장하고 있다가
새로운 데이터에 대해 가장 가까운 데이머틀 참고하여 반환한다.

📕 참고하는 데이터 개수 변경

49개의 데이터를 확인해보자.(기본값 = 5)

kn49 = KNeighborsClassifier(n_neighbors=49)
kn49.fit(fish_data, fish_target)
kn49.score(fish_data, fish_target)
  • 결과
    0.7142857142857143

❗ discussion
모든 데이터를 활용하여 예측 시에는 전체 데이터 중 도미가 39개로 다수를 차지하므로,
어떤 데이터를 넣어도 무조건 도미로 예측한다.(다수결의 원칙에 따라서)
따라서 35/49와 같은 값을 가진다.

📕 키워드 정리

특성(feature)
- 데이터를 특정하는 하나의 성질

훈련(training)
- 머신러닝 알고리즘이 데이터에서 규칙을 찾는 과정으로,
사이킷런에서는 fit() 메서드가 하는 역할

k-최근접 이웃 알고리즘(KNeighborsClassifier Algorithm)
- 규칙을 학습하기보다는 전체 데이터를 메모리에 가지고 있으며,
예측할 데이터로부터 가까운 거리에 위치한 데이터들의 타겟값을
다수결의 원칙을 통해 선택한다.

모델(model)
- 머신러닝 프로그램에서 알고리즘이 구현된 객체를 일컫는 말,
종종 알고리즘 자체를 모델이라고 부르기도 함.

정확도
- 정확한 답을 맞춘 백분율로 사이킷런에서는 0~1 사이의 값을 가진다.

profile
개발도상인 냄비짱

0개의 댓글