Linear 모델
Perceptron
ㄴ 가장 간단한 형태의 인공 신경망 모델
ㄴ 이진 분류 문제를 해결하기 위해 사용
ㄴ 입력 데이터에 대해 가중치를 적용하고, 이를 활성화 함수를 통과시켜 예측을 수행
ㄴ 예측 결과를 기반으로 모델의 가중치를 업데이트하여 오분류를 최소화하도록 학습
Logistic Regression (분류 모델)
ㄴ 분류 문제를 해결하기 위한 선형 모델
ㄴ 입력 데이터에 대해 선형 가중치를 적용한 후, 시그모이드(sigmoid) 함수를 통과시켜 확률값을 출력함
ㄴ 이진 분류 뿐만 아니라 다중 클래스 분류에도 적용할 수 있음
ㄴ 로그 손실 함수를 최소화하는 방식으로 학습되며, 경사 하강법 등의 최적화 알고리즘을 사용함
Linear Regression (회귀 모델)
ㄴ 회귀 문제를 해결하기 위한 선형 모델
ㄴ 입력 데이터에 대해 선형 가중치를 적용하여 연속적인 출력 값을 예측함
ㄴ 예측 값과 실제 값의 차이를 최소화하는 방식으로 학습되며, 평균 제곱 오차를 최소화하는 최소자승법을 사용함
ㄴ 다양한 변형 모델이 존재하며, 예측 변수와 타깃 변수 간의 선형 관계를 가정함
SVM 모델
ㄴ 서포트 벡터 머신(SVM : Support Vector Machine)은 여백(Margin)을 최대화하는 지도 학습 알고리즘
ㄴ 여백(Margin) : 주어진 데이터가 오류를 발생시키지 않고 움직일 수 있는 최대 공간
ㄴ 분류를 위한 서포트 벡터 머신 : SVC
ㄴ 회귀를 위한 서포트 벡터 머신 : SVR
SVM 을 이용한 XOR 문제 해결
ㄴ 다층 퍼셉트론(Multi-Layer Perceptron, MLP) 과 같으므로 SVM 으로도 해결 가능
ml01_xor_svm.py
import numpy as np
from sklearn.linear_model import Perceptron
from sklearn.svm import SVC, SVR, LinearSVC, LinearSVR # C = cassifier(분류), R = Regresser(회귀)
from sklearn.metrics import accuracy_score
# 1. 데이터
x_data = [[0, 0], [0, 1], [1, 0], [1, 1]]
y_data = [0, 1, 1, 0]
# 2. 모델
model = SVC() # MLP(multi layer perceptron) 와 같음
# 3. 훈련
model.fit(x_data, y_data) # 컴파일 안 해도 됨
# 4. 평가, 예측
result = model.score(x_data, y_data)
y_predict = model.predict(x_data)
acc = accuracy_score(y_data, y_predict)
print('모델의 score : ', result)
print(x_data, '의 예측 결과 :', y_predict)
print('acc : ', acc)
# 모델의 score : 1.0
# [[0, 0], [0, 1], [1, 0], [1, 1]] 의 예측 결과 : [0 1 1 0]
# acc : 1.0
SVC
ㄴ Support Vector Classifier
ㄴ 주어진 데이터를 분류하는 결정 경계를 찾는 알고리즘을 분류 작업에 적용한 것
ㄴ 이진 분류와 다중 클래스 분류 모두에 사용될 수 있음
ㄴ 주어진 훈련 데이터를 바탕으로 서포트 벡터를 찾고, 이를 기반으로 결정 경계를 생성
ㄴ 결정 경계는 클래스 간의 간격을 최대화하며, 이상치에 대한 영향을 최소화하도록 학습됨
ㄴ 학습 데이터의 특성을 잘 파악하여 일반화된 분류 모델을 만들 수 있음
ml02_svm_iris.py
# [실습] svm 모델과 나의 tf keras 모델 성능 비교하기
# 1. iris
import numpy as np
from sklearn.svm import SVC, LinearSVC
from sklearn.metrics import accuracy_score
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
# 1. 데이터
datasets = load_iris() # 다중분류
x = datasets['data']
y = datasets.target
# print(x.shape, y.shape) # (150, 4) (150,)
# print('y의 라벨 값 :', np.unique(y)) # y의 라벨 값 : [0 1 2]
x_train, x_test, y_train, y_test = train_test_split(
x, y, train_size=0.7, random_state=100, shuffle=True
)
# 2. 모델
model = SVC()
# model = LinearSVC()
# 3. 훈련
model.fit(x_train, y_train)
# 4. 평가, 예측
result = model.score(x_test, y_test)
print('결과 acc : ', result)
# SVC() 결과 acc : 0.9777777777777777
# LinearSVC() 결과 acc : 0.9777777777777777
# my tf keras 모델 결과 acc : 1.0
ml02_svm_cancer.py
# [실습] svm 모델과 나의 tf keras 모델 성능 비교하기
# 1. iris
# 2. cancer
import numpy as np
from sklearn.svm import SVC, LinearSVC
from sklearn.metrics import accuracy_score
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
import tensorflow as tf
tf.random.set_seed(77) # weight 의 난수값 조정
# 1. 데이터
datasets = load_breast_cancer() # 이진분류
x = datasets['data']
y = datasets.target
x_train, x_test, y_train, y_test = train_test_split(
x, y, train_size=0.7, random_state=100, shuffle=True
)
# 2. 모델
model = SVC()
# model = LinearSVC()
# 3. 훈련
model.fit(x_train, y_train)
# 4. 평가, 예측
result = model.score(x_test, y_test)
print('결과 acc : ', result)
# SVC() 결과 acc : 0.9064327485380117
# LinearSVC() 결과 acc : 0.9122807017543859
# my 결과 acc : 0.9298245614035088
ml02_svm_wine.py
# [실습] svm 모델과 나의 tf keras 모델 성능 비교하기
# 3. wine
import numpy as np
from sklearn.svm import SVC, LinearSVC
from sklearn.metrics import accuracy_score
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
import tensorflow as tf
tf.random.set_seed(77) # weight 의 난수값 조정
# 1. 데이터
datasets = load_wine() # 다중분류
x = datasets['data']
y = datasets.target
x_train, x_test, y_train, y_test = train_test_split(
x, y, train_size=0.7, random_state=100, shuffle=True
)
# 2. 모델
model = SVC()
# model = LinearSVC()
# 3. 훈련
model.fit(x_train, y_train)
# 4. 평가, 예측
result = model.score(x_test, y_test)
print('결과 acc : ', result)
# SVC() 결과 acc : 0.5555555555555556
# LinearSVC() 결과 acc : 0.7222222222222222
# my 결과 acc : 0.9259259104728699
SVR
ㄴ Support Vector Regression
ㄴ 회귀 문제를 해결하기 위한 알고리즘
ㄴ 주어진 데이터로부터 회귀 모델을 학습하여 예측을 수행하는데, SVM 알고리즘의 기본 원리를 사용함
ㄴ 데이터 포인트들과 최대 마진을 가지는 회귀 선 또는 평면을 찾는 것을 목표로 함
ㄴ 이때, 마진 안에 있는 데이터 포인트들은 모델에 의해 잘 예측되어야 하며, 마진 밖에 있는 데이터 포인트들은 마진 내에 위치할 수 있는 한 가장 잘 예측되도록 제약을 가함
ml02_svm_california.py
# [실습] svm 모델과 나의 tf keras 모델 성능 비교하기
# 4. california (SVR, LinearSVR)
import numpy as np
from sklearn.svm import SVR, LinearSVR
from sklearn.metrics import accuracy_score
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
import tensorflow as tf
tf.random.set_seed(77) # weight 의 난수값 조정
# 1. 데이터
datasets = fetch_california_housing() # 회귀분석
x = datasets['data']
y = datasets.target
x_train, x_test, y_train, y_test = train_test_split(
x, y, train_size=0.7, random_state=100, shuffle=True
)
# 2. 모델
# model = SVR()
model = LinearSVR()
# 3. 훈련
model.fit(x_train, y_train)
# 4. 평가, 예측
result = model.score(x_test, y_test)
print('결과 r2 : ', result)
# SVR() 결과 r2 : -0.01663695941103427
# 결과 r2 : 0.06830124384888547
# my tf keras 모델 r2스코어 : 0.5346585367965508
'네이버클라우드 > AI' 카테고리의 다른 글
AI 6일차 (2023-05-15) 인공지능 기초 _머신러닝 - Tree 모델 : DecisionTreeClassifier, DecisionTreeRegressor (0) | 2023.05.15 |
---|---|
AI 6일차 (2023-05-15) 인공지능 기초 _머신러닝 - 스케일링 (Scaling) (0) | 2023.05.15 |
AI 6일차 (2023-05-15) 인공지능 기초 _머신러닝 - 퍼셉트론의 과제 : XOR 문제의 해결 (0) | 2023.05.15 |
AI 5일차 (2023-05-12) 인공지능 기초 - pandas (0) | 2023.05.14 |
AI 5일차 (2023-05-12) 인공지능 기초 - Imdb 와 Rueters (0) | 2023.05.12 |