인공지능이란?
- 사람처럼 학습하고 추론할 수 있는 지능을 가진 시스템을 만드는 기술로,
강인공지능과 약인공지능으로 나눌 수 있다.
머신러닝이란?
- 규칙을 프로그래밍하지 않아도 자동으로 데이터에서 규칙을 학습하는 알고리즘을 연구하는 분야.
딥러닝이란?
- 머신러닝 알고리즘 중에서 인공 신경망을 기반으로 한 방법을 통칭한다.
생선 데이터를 활용한 머신러닝 실습
# 생선의 길이
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.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]
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
빙어가 도미에 비해 무게가 길이에 영향을 덜 받는다
-> 빙어가 도미에 비해 특성 간 영향을 덜 받는다.
# 두 데이터 합치기
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
# 함수 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)
❗ discussion
모든 데이터를 활용하여 예측 시에는 전체 데이터 중 도미가 39개로 다수를 차지하므로,
어떤 데이터를 넣어도 무조건 도미로 예측한다.(다수결의 원칙에 따라서)
따라서 35/49와 같은 값을 가진다.
특성(feature)
- 데이터를 특정하는 하나의 성질
훈련(training)
- 머신러닝 알고리즘이 데이터에서 규칙을 찾는 과정으로,
사이킷런에서는 fit() 메서드가 하는 역할
k-최근접 이웃 알고리즘(KNeighborsClassifier Algorithm)
- 규칙을 학습하기보다는 전체 데이터를 메모리에 가지고 있으며,
예측할 데이터로부터 가까운 거리에 위치한 데이터들의 타겟값을
다수결의 원칙을 통해 선택한다.
모델(model)
- 머신러닝 프로그램에서 알고리즘이 구현된 객체를 일컫는 말,
종종 알고리즘 자체를 모델이라고 부르기도 함.
정확도
- 정확한 답을 맞춘 백분율로 사이킷런에서는 0~1 사이의 값을 가진다.