# xor 연산 결과 데이터 준비
xor_data = [
#P, Q, result
[0, 0, 0],
[0, 1, 1],
[1, 0, 1],
[1, 1, 0]
]
result 부분은 P와 Q를 XOR한 결과이다
data = []
label = []
for row in xor_data:
p = row[0]
q = row[1]
r = row[2]
data.append([p, q])
label.append(r)
# scikit-learn 의 support vertor machine 모듈
from sklearn import svm
clf = svm.SVC() # SVC 객체 생성. SVM 알고리즘을 사용하여 머신러닝을 수행하는 객체
# '분류'를 위한 모델을 classifier 라 하면 약자로 clf 많이 사용함.
# SVC : C-Support Vector Classification.
# fit() : 학습시키기
clf.fit(data, label)
# parameter 확인
clf.get_params()
# 검증을 위한 데이터 + 레이블 준비
test_data = [
[0, 0],
[1, 1],
[0, 1],
[1, 1],
[0, 0]
]
test_label = [ # 위 데이터의 경우 답
0,
0,
1,
0,
0
]
이 처럼 train데이터와 test데이터를 따로 준비해야 한다.
두 개의 데이터가 동일하면 train을 통해 학습을 하였기 때문에 답이 예측률을 100%일 수 밖에 없기 때문이다.
predict()
pre = clf.predict(test_data)
# scikit-learn 에는 데이터와 레이블을 나누고, 성능측정을 간단하게 계산해주는 기능있다
import pandas as pd
from sklearn import metrics
DataFrame 사용
xor_df = pd.DataFrame(xor_data)
# data
xor_data = xor_df.loc[:, 0:1] # 모든 row X column 0 ~ column 1까지
# label
xor_label = xor_df.loc[:, 2]
학습하기
clf = svm.SVC()
clf.fit(xor_data, xor_label)
# 예측하기
pre = clf.predict(test_data)
성능평가
metrics.accuracy_score()
# metrics.accuracy_score(정답, 예측값, normalize=True, sample_weight=None)
ac_score = metrics.accuracy_score(test_label, pre)
print("정답률 = ", ac_score) # 정답률 = 1.0
학습, 테스트를 거친 모델을 저장하고 나중에 다시 불러와서 예측에 사용할수 있다
base_path = r'저장할 위치'
import os
savedir = os.path.join(base_path, 'xor)
if not os.path.exists(savedit):
os.mkdir(savedir)
import joblib # 파이썬 객체를 바이너리로 저장 (*.pkl)
savefile = 'xor_freq.pkl'
joblib.dump(clf, os.path.join(savedir, savefile))
*.pkl (pickle) 파일은 파이썬에서 많이 사용하는 serialized object 를 파일에 저장한 형태.
import os
import sklearn import svm, metris
import joblib
base_path = r'모델을 저장한 위치'
savedir = os.path.join(base_path, '모델파일 이름')
savefile = 'xor_freq.pkl'
clf = joblib.load(os.path.join(savedir, savefile))
test_data = [[0, 0],[1, 1],[0, 1],[1, 1],[0, 0]]
pre = clf.predict(test_data)
print(pre) # 예측된 결과값
과정 자체는 간단했지만 import부분이 헷갈린다.