[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

🛠 기타/Data & AI

[scikit-learn 라이브러리] XOR 문제

inu 2020. 7. 15. 22:32
반응형

scikit-learn?

  • 파이썬의 머신러닝 라이브러리
  • 회귀, 분류, 군집, 차원축소, 특성공학, 전처리, 교차검증, 파이프라인 등 머신러닝에 필요한 기능 제공

scikit-learn 활용 XOR 문제 해결

  • scikit-learn 라이브러리를 활용해서 XOR 문제를 해결해보겠다.
  • XOR 문제는 배타적인 입력(1,0 or 0,1)이 들어왔을 때만 1을 출력한다.
import pandas as pd
from sklearn import svm, metrics
  • pandas 데이터 프레임을 활용하기 위해 함께 import한다.
  • sklearn에서 svm과 metrics를 활용하기 위해 import한다.
# XOR 연산 데이터
xor_input = [
    #p, q, r
    [0, 0, 0],
    [0, 1, 1],
    [1, 0, 1],
    [1, 1, 0]
]
  • 학습의 input이 될 데이터 4개이다. 각각 인풋값 둘과 결과값을 뜻한다.
# 학습을 위해 데이터와 레이블 분리하기 --- (※1)
xor_df = pd.DataFrame(xor_input)
xor_data  = xor_df[[0,1]] # 데이터
xor_label = xor_df[2]     # 레이블
  • 해당 데이터에서 '데이터'부분과 '레이블(결과)'부분을 구별한다.
# 데이터 학습과 예측하기 --- (※2)
model = svm.SVC()
model.fit(xor_data, xor_label)
pre = model.predict(xor_data)
  • SYC() : svm라이브러리에서 임의의 svm모델, 즉 Support Vector Classifier을 리턴한다.
  • 그렇게 받아온 모델(Classifier)을 주어진 데이터와 레이블을 활용해 fit(학습)시킨다.
  • 그리고 그 결과를 활용한 예측을 predict함수를 통해 수행한다. 위 예시에서는 그냥 기존의 데이터를 활용했다.
  • pre를 출력해보면 [0 1 1 0]로 기존의 레이블과 일치하는 결과값을 보임을 알 수 있다.
# 정답률 구하기 --- (※3)
ac_score = metrics.accuracy_score(xor_label, pre)
print("정답률 =", ac_score)
  • 정답률을 구하기 위해서는 반복문을 통해 pre가 xor_label과 일치하는지 확인하는 방법도 있지만, 라이브러리 기능을 활용하면 더 간단하게 정확도를 판단할 수 있다.
  • metrics의 accuracy_score메소드에 xor_label(정답)과 pre(예측치)를 넣어 확인한다.
  • 리턴된 값이 해당 모델(Classifier)의 주어진 데이터에 대한 정확도가 된다.
==결과==
정답률: 1.0

베이스 모델(Classifier) 변경 : KNeighborsClassifier

import pandas as pd
from sklearn import metrics
from sklearn.neighbors import KNeighborsClassifier

# XOR의 계산 결과 데이터
xor_input = [
    #p q r
    [0,0,0],
    [0,1,1],
    [1,0,1],
    [1,1,0]
]

# 학습을 위해 학습전용 데이터와 결과 데이터로 분리하기 (1)
xor_df = pd.DataFrame(xor_input)
xor_data = xor_df[[0,1]]
xor_label = xor_df[2]

# 데이터 학습시키기 (2)
model = KNeighborsClassifier(n_neighbors=1) # 모델 변경
model.fit(xor_data, xor_label)

# 데이터 예측하기 (3)
pre = model.predict(xor_data)

# 결과 확인하기 (4)
ac_scroe = metrics.accuracy_score(xor_label, pre)
print("정답률:", ac_scroe)
  • 모든 과정은 동일하지만 KNeighborsClassifier를 import하고 그를 활용한다.
  • KNeighborsClassifier(n_neighbors=1)로 KNN 모델 하나를 리턴해 이를 활용한 것이다.
==결과==
정답률: 1.0
반응형