KNOU STUDYREAD

한국방송통신대학교 통계데이터과학과 블로그

CS & Department of Statistics and Data Science

통계데이터과학과 및 컴퓨터과학 독서

02. 인공지능 및 파이썬 2장

Harryㅤ 2024. 2. 26.

 
0. 머신러닝의 학습방법 : 학습데이터의 전달 및 습득 방식의 종류에 따라 지도/비지도/강화 학습으로 나뉜다.
* 머신러닝은 데이터를 가지고 스스로 학습

1. 지도학습 - 분류(Classification), 회귀(Regression) 문제에 사용.
지도학습에서 사용된 데이터에는 정답과 오답 데이터가 있으며 데이터를 스스로 학습하는데 크게 분류(이진분류, 다중분류)와 회귀 방법이 존재한다. * 지도학습은  정답 데이터가 있는 데이터셋으로 학습을 진행

분류 회귀
이진분류와 다중분류로 나뉨

1. 이진분류(Binary Classificatioon) : 암 판별 문제, 스팸 판별 문제 등 - 결과의 이진 도출 케이스에 사용

2. 다중분류(Multiclass Classification) : 이진 판별이 아닌 다양한 종이나 결과를 판별해야 하는 케이스에 사용
연속적인 값을 예측하는 케이스에 사용
주식예측, 성적 예측, 합격률 예측, 집값 예측 등
분류에 비해 더 많고 다양한 값을 예측하는데 사용
# 지도학습 이진분류 사례 : 암 환자의 암 판별 여부 확인하기

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense      
import numpy as np

!git clone https://github.com/taehojo/data.git

Data_set = np.loadtxt("./data/ThoraricSurgery3.csv", delimiter=",")
X = Data_set[:,0:16]                                           
y = Data_set[:,16]    

model = Sequential()                                                 
model.add(Dense(30, input_dim=16, activation='relu')) 
model.add(Dense(1, activation='sigmoid'))

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])  
history=model.fit(X, y, epochs=5, batch_size=16)


# 실험결과 : Epoch 수가 늘어날수록 암 판별 확률 또한 정확해지는 결과
# 지도학습 다중분류 사례 : 아이리스 꽃 품종 예측

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

!git clone https://github.com/taehojo/data.git

df = pd.read_csv('./data/iris3.csv')

X = df.iloc[:,0:4]
y = df.iloc[:,4]

y = pd.get_dummies(y)

# 모델설정, 각각의 다중 층 add() 함수로 생성. 출력층에서의 활성화 함수는 소프트맥스를 사용
model = Sequential()
model.add(Dense(12, input_dim=4, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(3, activation='softmax'))
model.summary()


model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) # 컴파일. 다항 분류문제의 최적화 손실함수 설정, 최적화 아담 설정

history = model.fit(X, y, epochs=50, batch_size=5) # 결과 출력. 50회 반복, 배치 사이즈는 5개씩 끊어서 입력
# 지도학습 회귀 사례 - 공부한 시간별 합격률 예측하기

# 필요한 기본 라이브러리 세팅
import numpy as np
import matplotlib.pyplot as plt
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

x = np.array([2, 4, 6, 8, 10, 12, 14]) # 앞서 설명한 공부시간 X 배열 생성
y = np.array([0, 0, 0, 1, 1, 1, 1])    # 앞서 설명한 공부시간 X에 따른 합불여부 배열 생성

# 시그모이드 함수 사용을 위해 활성화 함수부분 'sigmoid' 설정
model = Sequential()
model.add(Dense(1, input_dim=1, activation='sigmoid')) 

# 교차 엔트로피 오차 함수를 이용을 위해 'binary_crossentropy'로 설정
model.compile(optimizer='sgd', loss='binary_crossentropy')
model.fit(x, y, epochs=5000)

# 결과 시각화
plt.scatter(x, y)
plt.plot(x, model.predict(x), 'r')
plt.show()

# 임의의 학습 시간을 집어넣어 합불 여부 출력
hour = 5
prediction = model.predict([hour])
print("%.f시간을 공부할 경우, 합격 여부는 %.01f%%입니다." % (hour, prediction * 100))

2. 비지도학습 - 지도학습과 다르게 정답이 존재하지 않는 다양한 데이터를 통해 학습하는 과정. 군집화(Clustering), 차원축소(Dimensionality Redution)가 있으며 데이터의 다양한 개수를 통해 판별함으로서 정확도가 높아지는 특징을 가짐. -> 비지도 학습을 통해 머신러닝의 지도학습 단점을 보완할 수 있음. * 비지도학습은  정답 데이터가 없는 데이터셋으로 학습을 진행
* 다양한 플랫폼의 추천시스템(다양한 사람들의 취향을 위해 개인별 추천 알고리즘을 사용)


군집화 차원축소
사람들의 사용 특성에 따른 대부분의 추천 알고리즘 등 정답이 없는 수많은 데이터를 가지고 군집별로 나누는  케이스에 사용 학습하는데 사용되는 데이터의 차원을 축소하는데 쓰임
-> 컴퓨터가 처리할 수 있는 데이터의 양을 줄임으로써 부담 최소화


3. 강화학습 - 인공지능을 강화하는데 사용하는 학습방법이며 강화의 목적, 목표치를 설정하고 진행.

강화학습(
강화의 목적, 최소한의 목표치만 주고 여러번의 수행과 시행착오를 거쳐 목표치에 달성하는 방법

ex. 아타리 게임, 알파고의 딥마인드 등