본문 바로가기
Study/MachineLearning

[MachineLearning] and 연산

by YoungD 2023. 9. 6.
머신러닝이란?
  • 기계 학습
  • 입력된 데이터를 학습하고 그에 따른 패턴과 규칙을 찾아 예측하는 것
머신러닝 종류
  • 지도학습(교사학습) : 문제데이터 + 답데이터(교사)
    • 유형 종류2: 분류 : 여러 클래스 중에서 하나를 찾는 것 회귀 : 연속적인 수치값을 예측하는 것
  • 비지도학습(비교사학습) : 문제데이터
    • 데이터의 의미를 파악, 비슷한 데이터끼리 묶음 군집화(clustering)
  • 강화학습(reinforcement learning) : 로봇(행동 주체자)에게 환경에 대해 학습하게 하는 일련의 과정

 

문제정의

  • 훈련 데이터와 테스트 데이터 이해하기
  • 머신러닝의 일련의 과정 이해하기
  • AND 연산의 결과를 도출하는 머신러닝 모델 학습하기
In [1]:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

 

데이터 준비

  • 연산 데이터 생성하기 
In [2]:
# 방법 1. 이중리스트 [[0, 0, 0],[0, 1, 0]...]
# 방법 2. 딕셔너리 {컬럼명:[0, 0, .... ], 컬럼명:[...], 컬럼명:[...]}

data_dic = {'A': [0, 0, 1, 1, 1, 0, 1, 0],
            'B': [0, 1, 0, 1, 0, 0, 1, 1],
            'A and B':[0, 0, 0, 1 , 0, 0, 1, 0]}
df = pd.DataFrame(data_dic)
In [3]:
df
Out[3]:
ABA and B01234567
0 0 0
0 1 0
1 0 0
1 1 1
1 0 0
0 0 0
1 1 1
0 1 0

 

데이터 전처리

In [4]:
# X 문제(A, B컬럼), Y 답(실제적인 답, A and B) 분리
# 넘파이 > 2차원배열[행]  , 배열[행][열],   배열[행, 열],   배열[행:행, 열]
# 판다스 > DF.loc[행,열]  , DF.iloc[행:행,열:열]

# X = 
df.loc[:,['A','B']]
df.loc[:,'A':'B'] # 끝값 포함
df.iloc[:,0:2] # 끝값 포함x
X = df[['A','B']] # 컬럼 인덱싱(슬라이싱) 설정되어짐
# df[0:5] # : 행 인덱싱(슬라이싱)
X # 2차원

y = df['A and B'] # 1차원 시리즈로
# df.iloc[:,2] , df.loc[:, 'A and B']

# 크기확인
print('문제크기:', X.shape)
print('답 크기:', y.shape)
문제크기: (8, 2)
답 크기: (8,)
In [5]:
# 훈련용(학습과정), 테스트용(평가 및 예측 과정) 분리

# X_train - 훈련용 (0~5행 접근), X_test = 테스트용 (6~7행 접근)
X_train = X.iloc[0:6]
X_test = X.iloc[6:]
X_test

# y_train - 훈련용(0~5행 접근), y_test - 테스트용(6~7행 접근)
y_train = y.iloc[:6]
y_test = y.iloc[6:]
y_test

# 훈련용 데이터 크기 확인
print('훈련용 데이터:', X_train.shape, y_train.shape)
# 테스트용 데이터 크기 확인
print('테스트용 데이터:', X_test.shape, y_test.shape)

# X_train 훈련용 문제, y_train 훈련용 답데이터
# X_test 테스트용 문제, y_test용 답데이터
훈련용 데이터: (6, 2) (6,)
테스트용 데이터: (2, 2) (2,)

 

In [6]:
x_train = df[0:5]
df
Out[6]:
ABA and B01234567
0 0 0
0 1 0
1 0 0
1 1 1
1 0 0
0 0 0
1 1 1
0 1 0

 

데이터 탐색(탐색적 데이터 분석)

  • a 컬럽 int 데이터
  • b 컬럼 int 데이터
  • a and b 컬럼 int 데이터, 0/1
  • 결측치x, 이상치x

 

모델링

  • 모델 선택 및 하이퍼 파라미터 조정
  • 모델 학습
  • 모델 예측 및 평가
In [7]:
# 모델 불러오기
# 분류하는 모델 중 knn 모델을 불러오기
# sklearn(scikit-learn) 머신러닝 패키지 : 머신러닝에 사용되는 도구를 담은 패키지
# 지도/ 비지도/ 강화, 분류/회귀, 평가 공식(기능), 데이터 전처리하는 기능
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
In [8]:
# 모델 객체 생성
# 모델마다 하이퍼 파라미터명 다름, 쓰임 다름
# knn 에서는 n_neighbors가 하이퍼 파라미터(사람이 설정하는 값)
knn_model = KNeighborsClassifier(n_neighbors=1)
# 사람이 설정하는 하이퍼 파라미터에 따라 결과가 바뀜
# 예측이 잘되는 값이 있고 안 될 때가 있음
In [9]:
# 모델 학습
# 모델이 학습할 때 사용하는 함수 : fit(훈련용 문제, 훈련용 답)
knn_model.fit(X_train, y_train)
Out[9]:
In [10]:
# 모델 예측
# knn.model.predict(테스트용 문제)
pre = knn_model.predict(X_test)
pre # 예측 결과를 담은 변수
Out[10]:
array([1, 0], dtype=int64)
In [11]:
# 모델 평가 
# accuracy_score - 예측이 실제 값과 비교했을 때 몇개나 잘 맞췄는지 표현하는 점수 척도
accuracy_score(y_test, pre)   # 1.0 * 100 = 100% 전체 다 맞춘 상황
# accuracy_score : 0~1 로 출력, 1에 가까울수록 잘 맞춤
# 1.0 --> (100% 다 맞춤)
Out[11]:
1.0