sklearn_기본_xor

Updated:

머신러닝 vs 딥러닝

구분 Machine Learning Deep Learning
훈련 데이터 크기 작음
시스템 성능 저 사양 고 사양
feature 선택 전문가 (사람) 알고리즘
feature 수 많음 적음
문제 해결 접근법 문제를 분리 -> 각각 답을 얻음 -> 결과 통합 end-to-end (결과를 바로 얻음)
실행 시간 짧음
해석력 해석 가능 해석 어려움

scikit-learn

  • 파이썬에 머신러닝 프레임워크 라이브러리
  • 회귀, 분류, 군집, 차원축소, 특성공학, 전처리, 교차검증, 파이프라인 등 머신러닝에 필요한 기능 제공
  • 학습을 위한 샘플 데이터 제공

XOR 연산 학습해보기

일반

from sklearn import svm

# 머신러닝에서 sklearn이 좋다

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

xor_data = []
xor_label = []
for row in xor_input:
    p = row[0]
    q = row[1]
    r = row[2]
    xor_data.append([p,q])
    xor_label.append(r)
# 학습을 위해 데이터와 레이블 분리하기

model = svm.SVC()
        # 행과 열 , 일차원
model.fit(xor_data,xor_label)
# 데이터 학습시키기
        
pre = model.predict(xor_data)
print("예측데이터: ", xor_data)
print("예측 결과: ", pre)
# 데이터 예측하기

ok = 0; total = 0
for idx, answer in enumerate(xor_label):
    p = pre[idx]
    if p == answer:
        ok +=1
    total +=1
    
print("정답률: ", ok , "/", total, "=", ok/total)
# 결과 확인하기

예측데이터 : [[0, 0], [0, 1], [1, 0], [1, 1]]
예측 결과 : [0 1 1 0]
정답률: 4 / 4 = 1.0

pandas 라이브러리를 사용하여 코드 간략화

import pandas as pd
from sklearn import svm, metrics

# XOR 연산
xor_input = [
    [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 = svm.SVC()
model.fit(xor_data, xor_label)
pre = model.predict(xor_data)

# 정답률 구하기 --- (※3)
ac_score = metrics.accuracy_score(xor_label, pre)
print("정답률 =", ac_score)

정답률 = 1.0

KNN 분류 모델을 이용


import pandas as pd
from sklearn import svm, metrics
from sklearn.neighbors import KNeighborsClassifier # <- 모델추가

# XOR 연산
xor_input = [
    [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)
clf = KNeighborsClassifier(n_neighbors=1)        # <- 모델변경
clf.fit(xor_data, xor_label)
pre = clf.predict(xor_data)

# 정답률 구하기 --- (※3)
ac_score = metrics.accuracy_score(xor_label, pre)
print("정답률 =", ac_score)

정답률 = 1.0

Leave a comment