반응형
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
반응형
'🛠 기타 > Data & AI' 카테고리의 다른 글
Pandas 데이터프레임 멀티 인덱싱 (0) | 2020.07.16 |
---|---|
[scikit-learn 라이브러리] joblib (pickle 객체 저장) (0) | 2020.07.15 |
파이썬 토크나이저 - 기초활용 (0) | 2020.07.15 |
파이썬 정규표현식 - 문자 내용 바꾸기 (0) | 2020.07.15 |
단층 퍼셉트론 - 회귀분석 구현 (0) | 2020.07.15 |