인공지능(AI)

[AI] 인공지능 머신러닝 딥러닝의 개념 비교( SVM 머신러닝, 딥러닝 )

안한량 2022. 12. 29. 20:29
728x90

 

* 머신러닝

   1) 내가 알고 있는 (특징과 그결과를 알고 있는) 데이터를 : 학습 데이터

   2) 잘 분류할 수 있는 수식의 인자를 : 가중치

   3) 컴퓨터가 반복 계산을 통해 계산하는 과정 : 오차를 최소화 하는 방향으로 조절해서.

   ==> 결과물 : 수식의 인자. (가중치 / Weight)


 

https://playground.tensorflow.org/

 

Tensorflow — Neural Network Playground

Tinker with a real neural network right here in your browser.

playground.tensorflow.org

위 사이트에서 뉴럴 네트워크를 본인이 설정하여 점들을 분류해볼 수 있다.

 

구분 설명
CNN - 합성곱신경망, Convolution Neural Network
- 데이터의 특징을 추출하여 특징들의 패턴을 파악하는 구조로 이미지 분류에 주로 사용
RNN - 순환신경망, Recurrent Neural Network
- 반복적, 순차적 데이터 학습에 특화된 구조로 시간(순서)에 따라 영향을 받는 데이터의 분석에 주로 사용
YOLO - You Only Look Once
- 단일 스캔 방식으로 영상 내 객체를 식별하는 알고리즘으로 영상 기반 인공지능 서비스에 주로 사용

[숙제]

학점 계산 하는 AI 프로그램

국어+수학 / 2 ==> 평균점수

 

평균점수가

70이상 (A)

40이상 (B)

(C)

--------------------------

String getGrade(국어, 수학)

{

      평균 = 국어/수학

      if (70<=평균)

          return A;

      ..

      ..

}

--------------------------

AI / 머신러닝

1) 교수님, 지난 1년간의 학생들 학점 데이터.

--------------------------------------------

KOR        MATH          GRADE

--------------------------------------------

90               80                  A

10               20                  C

....

--------------------------------------------

20000건이라는 가정하에,

2) 데이터 전처리

  - 이상치, 결측치

===> 학습을 위한 데이터가 준비 되었다.

 

3) 내가 알고 있는 데이터 (20000건) ; 학습을 위한 15000건 검증(평가)를 위한 5000건.

4) 머신러닝을 위한 모델(SVM, 딥러닝)

5) 15000건(학습)데이터로 학습 ===> 가중치

6) 5000건 (검증)데치터로 정확도 평가 !!! (99.9%)

7) Weight 가중치.

 

------------------

import random

 

# 점수를 계산해서 평균에 따른 학점을 반환

# 편의상 A, B, C로 구분함.

def get_grade(kor, math):

  mean = int((kor + math) / 2)

  grade = "C"

  if 70 <= mean:

    grade = "A"

  elif 40 <= mean:

    grade = "B"

  return grade

  

# 20000개 데이터를 만들어 CSV에 기록한다.

fp = open("grade.csv","w",encoding="utf-8")

fp.write("KOR,MATH,GRADE\r\n")

 

for i in range(20000):

  kor = random.randint(10, 100)

  math = random.randint(10, 100)

  grade = get_grade(kor, math)

  fp.write("{0},{1},{2}\r\n".format(kor, math, grade))

  

fp.close()

----------------------

20000개의 데이터 csv 파일 확보. 


data review

import matplotlib.pyplot as plt

import pandas as pd

 

# pands로 csv 파일 읽기

grade = pd.read_csv("grade.csv", index_col=2)

 

# 그래프로 표시하기

fig = plt.figure()

ax = fig.add_subplot(1, 1, 1)

 

# Lable 색상 표시하는 함수

def scatter(label_text, color):

  b = grade.loc[label_text]

  ax.scatter(b["KOR"],b["MATH"], c=color, label=label_text)

 

scatter("A", "red")

scatter("B", "blue")

scatter("C", "yellow")

ax.legend()


SVM으로 분류하기 (Support Vector Machine)

from sklearn import svm, metrics

from sklearn.model_selection import train_test_split

import matplotlib.pyplot as plt

import pandas as pd

 

# grade가 저장된 CSV 파일 읽기

grade = pd.read_csv("grade.csv")

 

# 데이터 전처리 (학습을 위하여 데이터를 분리하고 가공-정규화)

label = grade["GRADE"]

kor = grade["KOR"] / 100 # 점수는 최대 100점

math = grade["MATH"] / 100

data = pd.concat([kor, math], axis=1)

 

# 학습 및 테스트 데이터로 분리

data_train, data_test, label_train, label_test = \

    train_test_split(data, label)

 

# 학습하기

model = svm.SVC()

model.fit(data_train, label_train)

 

# 테스트 데이터로 에측하기

predict = model.predict(data_test)

 

# 결과 확인하고 평가하기

ac_score = metrics.accuracy_score(label_test, predict)

cl_report = metrics.classification_report(label_test, predict)

print("Accuracy =", ac_score)

print("Report =\n", cl_report)


딥러닝으로 해보기

from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation
from keras.callbacks import EarlyStopping
import pandas as pd, numpy as np
 
# grade가 저장된 CSV 파일 읽기
grade = pd.read_csv("grade.csv")
 
#데이터 전처리 (MLP 학습을 위해 데이터를 가공)
grade["KOR"] /= 100 # 점수는 최대 100점
grade["MATH"] /= 100
 
X = grade[["KOR", "MATH"]].to_numpy() # 입력데이터 (독립변수)
lable_class = {"A":[1,0,0], "B":[0,1,0], "C":[0,0,1]} # Label (종속변수)
Y = np.empty((20000,3))
for i, j in enumerate(grade["GRADE"]):
    Y[i] = lable_class[j]
 
# 학습 데이터와 테스트 데이터 분할
X_train, Y_train = X[1:15001], Y[1:15001]
X_test,  Y_test  = X[15001:20001], Y[15001:20001] 
 
# 학습을 위한 모델 구성하기
model = Sequential()
model.add(Dense(512, input_shape=(2,)))
model.add(Activation('relu'))
model.add(Dropout(0.1))
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.1))
model.add(Dense(3))
model.add(Activation('softmax'))
 
model.compile(
    loss='categorical_crossentropy',
    optimizer="rmsprop",
    metrics=['accuracy'])
 
model.summary()
 
# 모델을 이용한 학습
model.fit(
    X_train, Y_train,
    batch_size=100,
    epochs=20,
    validation_split=0.1,
    callbacks=[EarlyStopping(monitor='val_loss', patience=2)],
    verbose=1)
 
# 테스트 데이터를 이용한 평가
score = model.evaluate(X_test, Y_test)
print('loss=', score[0])
print('accuracy=', score[1])
 
# 생성한 모델 이용
X_Data = X[0:10]
 
result = model.predict(X_Data)
print(result)
 
predicted = result.argmax(axis=-1)
print(predicted)

 

 

 

 

테이블 맵핑 결과 값

A B B B B A A B B C

 

 

 

 

 

 

728x90