/ LECTURE

Python - SVM

이 페이지는 다음에 대한 공부 기록입니다

JAVA(자바), Python(파이썬) 기반의

AI 활용 응용 소프트웨어 개발자 양성 과정

2021.11.10. ~ 2022.05.18.

찾으시는 정보가 있으시다면
주제별reference를 이용하시거나
우측 상단에 있는 검색기능을 이용해주세요

100일차 수업

SVM

Support Vector Machine

머신 러닝 학습 방법 중 하나

주어진 데이터 집합을 바탕으로 새로운 데이터가 어떠한 집단으로 갈 지 정리해주는 모델

주로 선형 분류, 비선형 분류도 가능

from sklearn import svm, metrics
from sklearn.model_selection import trian_test_split
import pandas as pd

# 미리 생성한 bmi 기록 가데이터
tbl = pd.read_csv(bmi.csv)

weight = tbl[tbl.columns[1]]/100
height = tbl[tbl.columns[0]]/100
# 키와 몸무게에 따른 bmi 수치
label = tbl[tbl.columns[2]]
# label을 제거한 데이터
wh = pd.concat([w,h],axis=1)

# 학습데이터와 테스트 전용 데이터 나누기
data_train, data_test, label_train, label_test = train_test_split(wh, label)
clf = svm.SVC()
# 오버피팅 문제

# 학습 데이터 입력
clf.fit(data_trian, label_train)

# 테스트 데이터 입력
pre = clf.predict(data_test)

# 정답률 확인
ac_score = metrics.accuracy_score(label_test,pre)
# 리포트 확인
cl_report = metrics.classification_report(label_test, pre)

오버피팅

학습 데이터의 결과만 따라가는 경향

  • 전체적인 패턴을 유추해야하는 데 학습 데이터로 결과를 도출해버리는 상황

  • 너무 세밀한 설정으로 전체적인 그림을 그리지 못하는 경우

from sklearn.ensemble import RandomForestClassifier

# 오버피팅을 방지하고자 랜덤포레스트를 사용
clf = RandomForestClassifier()
# 여러개의 의사결정트리를 만들어 다수결로 결과를 결정하는 방식

데이터 변환시 주의할 점

데이터의 성질을 유지해야한다, 연속 변수인지 분류 변수인지

Validation

from sklearn import svm, model_selection

clf = svm.SVC()
scores = model_selection.cross_val_score(clf, data, label, cv = 5)
# cv : 교차 검증할 분할 개수
print(scores)	# output [0.96666667 0.96666667 0.96666667 0.93333333 1.        ]
print(scores.mean())	# output 0.9666666666666666

GridSearchCV

머신 러닝에서 학습 데이터를 입력할 때 분리의 유형, 오차의 범위, 이진트리의 깊이, 선의 곡률 등등을 파라미터로 정하는 방법

테스트를 하고자 하는 데이터의 파라미터 값을 사전 정의하고 가장 최적의 변수를 찾는 방법

from sklearn import svm, metrics
from sklearn.model_selection import GridSearchCV

params = [
{C : [1,10,100,1000], kernel : [linear]},
{C : [1,10,100,1000], kernel : [rbf], gamma: [0.001,0.0001]}
]
“””
SVM의 주요 파라미터
C : cost, 오차 허용 범위
kernel : 어떤 함수를  것인지, linear(선형) rbf(비선형), sigmoid, poly
gamma : 곡률이 있는 함수에 대해서 곡률 허용 범위
“””

clf = GridSearchCV(svm.SVC(), params, n_jobs=-1)
# 학습을 내 컴퓨터가 할 수 있는 만큼 한번에 실행

clf.fit(train_data, train_label)
# 가장 좋은 학습 방법 알려줌
print(clf.best_estimator_)	# output SVC(C=1, kernel= ‘linear’)
print(clf.best_score_)		# output 0.877