인공지능/머신러닝

머신러닝 - 머신러닝 개요 / kNN

해피밀세트 2020. 5. 8. 01:43

 

 

 

머신러닝 개요

 

1. 머신러닝(Machin Learning)

  • 인간의 학습 능력과 같은 기능을 컴퓨터가 하게 만드는 기술
  • 인공지능(AI) 연구분야의 하나이다.
  • 인공지능이란 인간이 원래 가지고 있는 지적 능력을 컴퓨터가 하게 만드는 기술
  • 소프트웨어
  • 분류(classification) : 주어진 데이터를 분류
  • 예측 : 과거의 수치를 기반으로 미래의 수치 예측(회귀)
  • 군집(ciustering) : 데이터를 비슷한 집합으로 분류

 

2. 지도학습(Supervised Learning)

  • 레이블이 달려 있고 정해져 있는 데이터를 가지고 학습
  • 이미지(, 고양이), 스팸/ 메일, 시험 성적 예측
  • regression : 예측
  • binary classification : 합격/불합격, /고양이, /양성
  • multi classification : 학점

 

3. 비지도학습(Unsupervised Learning)

  • 레이블이 없는 데이터를 학습을 통해서 군집한다.
  • 유사한 뉴스를 그룹으로 모은다.
  • 비슷한 단어들을 모은다.

 


 

kNN(k - Nearest Neighbors)

  • 사회적인 관계를 관찰해서 보면
    - 대략적으로 비슷한 사람끼리 모이는 성질이 있다.
    - 비슷한 취향의 사람끼리 모여서 동호회를 만든다.
    - 비슷한 부류의 계층의 사람끼리 친분을 맺기도 한다.
  • 공간적인 관계를 관찰해서 보면
    - 지역별 상권
  • 거리유사도 측정
  • 유클리드 거리 (Euclidean distance) 사용( 사이의 거리)
  • 다수결에 의해 뽑아내는것 (k값을 짝수보다는 홀수값으로 주는게 좋다)

 

 

kNN 예시

종류 친화력 귀여움 종류(레이블) 거리계산
이구아나 3 7 파충류 np.sqrt((6-8)**2 + (4-5)**2) = 3.6
강아지 8 10 포유류 np.sqrt((6-8)**2 + (4-5)**2) = 2.2
독수리 1 4 조류 np.sqrt((6-8)**2 + (4-5)**2) = 7.0
고양이 7 8 포유류 np.sqrt((6-8)**2 + (4-5)**2) = 1.4

Q. 토끼(친화력 : 6, 귀여움 : 9)의 종류는 무엇인가?

 

k = 1 일때,

토끼는 고양이(포유류)와 거리가 1.4로 가까운 이웃하여 '포유류'로 분류한다.

 

k = 3 일때,

토끼는 고양이(포유류), 강아지(포유류), 이구아나(파충류) 세가지 사이에 다수결에 의해 '포유류'로 분류한다.

 

 

 

코드로 짜보기

 

Q. 햄스터(친화력:6, 귀여움:8)의 종류는 무엇인가?

 파이썬   R 
# 라이브러리 임포트
import pandas as pd
import numpy as np
from collections import Counter
from sklearn.neighbors import KNeighborsClassifier


# 데이터 불러오기

animal = pd.read_csv("C:/data/animal.csv")

# 거리계산을 위해 배열로 만들기
x_train = np.array(animal.iloc[:,1:3])
y = np.array([[6,8]])
x_train.shape
y.shape

# 거리계산값 저장
animal["dist"] = np.sqrt(np.sum(pow(x_train - y,2),axis=1))

# 순위 매기기
animal['rank'] = animal["dist"].rank(ascending=True,method="dense")

# 5등까지 클래스 뽑아내기
animal[animal['rank'] <= 5]['종류']

# 빈도수 체크 후 가장 빈도수가 높은것 뽑기
Counter(animal[animal['rank'] <= 5]['종류']).most_common(1)[0][0]

------------------------------------------------------------

x_train = np.array(animal.iloc[:,1:3])
label = animal['종류']

# 인스턴스 만들기
# n_neighbors : k값
clf = KNeighborsClassifier(n_neighbors=5)

# 학습시키기
clf.fit(x_train,label)

# 예측하기
clf.predict(np.array([[6,8]]))[0]

# 데이터 불러오기
animal <-read.csv("C:/data/animal.csv",stringsAsFactors=F,header=T)


# 거리계산값 저장

animal$dist <- sqrt((animal$친화력-6)^2 + (animal$귀여움-8)^2)


# 순위 매기기
animal$rank <- rank(animal$dist, ties.method = "min")


# 5등까지 중 가장 많은 빈도수의 종류 출력
names(head(sort(table(animal[animal$rank <= 5,"종류"]),decreasing=T),1))

--------------------------------------------------------------

#test 데이터 만들기

hamster <- data.frame(ingredient="hamster",

                     sweetness=6,

                     crunchiness=8)

test <- hamster[,2:3]

 

#train 데이터 만들기

train <- animal[,2:3]

 

# 레이블 지정

train_level <- animal[,4]

 

# kNN 사용하여 예측

library(class)

knn(train,test,train_level,k=5)

 

반응형