혼공머신 Day1

나르·2020년 12월 30일
0

혼자 공부하는 머신러닝+딥러닝

인공지능
사람처럼 학습하고 추론할 수 있는 지능을 가진 시스템을 만드는 기술. 강인공지능과 약인공지능으로 나뉜다. 강인공지능(=일반인공지능)은 <그녀>의 사만다나 <터미네이터>의 스카이넷처럼 사람과 유사한 컴퓨터 시스템이고, 약인공지능은 자율주행 자동차, 음악추천, 알파고 등 사람의 일을 보조하는 정도의 기능이다.
머신러닝
규칙을 프로그래밍하지 않아도 자동으로 데이터에서 규칙을 학습하는 알고리즘 연구. 통계학과 깊은 관련이 있고, R에도 다양한 머신러닝 알고리즘이 구현돼있다. 대표적인 라이브러리로는 사이킷런이 있다.
딥러닝
인공신경망을 기반으로 한 머신러닝 알고리즘. 대표적인 라이브러리로는 구글의 텐서플로와 페이스북의 파이토치가 있다.

예제

책에서는 실습환경으로 구글 클라우드 기반의 주피터 노트북인 코랩을 사용했지만 나는 pycharm을 사용했다.

코드

from sklearn.neighbors import KNeighborsClassifier
import matplotlib.pyplot as plt
# 생선분류 문제
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]
# 빙어의 길이,무게

plt.scatter(bream_length,bream_weight)
plt.scatter(smelt_length,smelt_weight)
plt.xlabel('lenght')         # X축은 길이
plt.ylabel('weight')         # Y축은 무게
plt.show()

# 머신러닝 프로그램
lenght = bream_length + smelt_length
weight = bream_weight + smelt_weight
fish_data = [[l, w] for l, w in zip(lenght, weight)]
fish_target = [1] * 35 + [0] * 14

kn = KNeighborsClassifier()
kn.fit(fish_data, fish_target)     # fit() = training method
kn.score(fish_data, fish_target)     # score() = evaluate method(0~1)
kn.predict([[30,600]])       # 길이 30, 무게 600인 생선은 도미일까 광어일까?

kn49 = KNeighborsClassifier(n_neighbors=49)    # 참고 데이터를 49개로 한 모델
kn49.fit(fish_data, fish_target)
kn49.score(fish_data, fish_target)
# Question - 기본값 5~49 중 정확도가 1.0 이하인 이웃의 수는?
for n in range(5,50):
  kn.n_neighbors = n
  score = kn.score(fish_data, fish_target)
  if score < 1:
    print(n, score)
  • 특성은 데이터를 표현하는 하나의 성질이다. 예제에서는 길이와 무게가 특성에 해당한다.
  • 훈련은 머신러닝 알고리즘이 데이터에서 규칙을 찾는 과정이다. (사이킷런의 fit() method)
  • K-최근접 이웃 알고리즘은 어떤 데이터에 대한 답을 구할 때 주위의 데이터 중 다수를 차지하는 것을 정답으로 사용하는 머신러닝 알고리즘이다.
  • 알고리즘이 구현된 객체를 모델이라고 부른다. 종종 알고리즘 자체를 모델이라고 부르기도 한다.
  • 정확도는 정답률을 백분율로 나타낸 값이다. 사이킷런에서는 0~1 사이의 값으로 출력된다.
    정확도 = (정확히 맞힌 개수) / (전체 데이터 개수)

핵심패키지

Matplotlib
scatter() - 산점도를 그리는 맷플롯립 함수로, X축과 Y축 값의 매개변수를 필요로 함. 이 값은 파이썬 리스트 또는 넘파이 배열로 저장됨. 또한 c 매개변수로 색깔 지정 가능.

Scikit-learn
KNeighborsClassifier() - K-최근접 이웃 분류 모델을 만드는 사이킷런 클래스. n_neighbor 매개변수로 이웃의 수를 지정(default = 5)
fit() - 사이킷런 모델을 훈련할 때 사용하는 메서드
predict() - 사이킷런 모델을 훈련하고 예측할 때 사용하는 메서드
score() - 훈련된 사이킷런 모델의 성능을 측정

profile
💻 + ☕ = </>

0개의 댓글