Notice
Recent Posts
Recent Comments
Link
ยซ   2026/06   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Archives
Today
Total
๊ด€๋ฆฌ ๋ฉ”๋‰ด

project:eve

23.01.28 SVM ์„œํฌํŠธ ๋ฒกํ„ฐ ๋จธ์‹  ๋ณธ๋ฌธ

Daily

23.01.28 SVM ์„œํฌํŠธ ๋ฒกํ„ฐ ๋จธ์‹ 

eveee 2023. 1. 29. 01:01

Studying here๐Ÿ  ์Šคํƒ€๋ฒ…์Šค ์„œ์šธ๋Œ€์ž…๊ตฌ์—ญ์ 

 

 

ADP๋ฅผ ์ค€๋น„ํ•˜๋ฉด์„œ ๋ฐ์ดํ„ฐ ๋ถ„์„์„ ๋ณธ๊ฒฉ์ ์œผ๋กœ ๊ณต๋ถ€ํ•œ์ง€ ํ•œ๋‹ฌ์ด ๋‹ค ๋˜์–ด ๊ฐ€๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

 

์ฒ˜์Œ์—๋Š” ์ƒˆ๋กœ์šด ๊ฐœ๋… ์ฒœ์ง€์—ฌ์„œ ๊ณ ์ƒ์Šค๋Ÿฌ์› ๋Š”๋ฐ ์š”์ฆ˜์€ ๊ฐœ๋…๋“ค์„ ์ง€๊ทธ์‹œ ๋ณด๊ณ  ์žˆ์œผ๋ฉด ๊ธˆ๋ฐฉ๊ธˆ๋ฐฉ ์•„ํ•˜ ์ด๋Ÿฐ๊ฑฐ๊ตฐ ํ•˜๊ณ  ๋„˜์–ด๊ฐ€๊ฒŒ ๋˜์„œ ๊ณต๋ถ€ํ•˜๋Š” ๊ฒŒ ์กฐ๊ธˆ ์žฌ๋ฏธ์žˆ๋‹ค. ์—ฌ์ „ํžˆ ๋ณธ ์ ๋„ ์—†๋Š” ๊ธฐํ˜ธ๋“ค์ด ์ถค์ถ”๋Š” ํ†ต๊ณ„์‹์€ ์–ด๋ ต์ง€๋งŒ.. ๊ทธ๋ž˜๋„ ์—ด์‹ฌํžˆ ๊ณต๋ถ€ํ•ด์„œ 3์›”์— ๋ฐ”๋กœ ํ•ฉ๊ฒฉํ•˜๋Š” ๊ธฐ๋Œ€๋ฅผ ์กฐ๊ธˆ ๊ฑธ์–ด๋ณธ๋‹ค ใ…Žใ…Ž

 

 

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์„œํฌํŠธ ๋ฒกํ„ฐ ๋จธ์‹ ์„ ๊ณต๋ถ€ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

 

1) ์ •์˜

SVM(์„œํฌํŠธ ๋ฒกํ„ฐ ๋จธ์‹ )์ด๋ž€?? ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๊ฐ€ ์ž…๋ ฅ๋˜์—ˆ์„ ๋•Œ ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•ด ๋ถ„๋ฅ˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ๋‹ค๋ฅธ ๋ถ„์„ ๋ฐฉ๋ฒ•์—๋Š” ์—†๋Š” ์œ ๋ž˜๊ฐ€ ์žˆ๋Š”๋ฐ, ์ฒ˜์Œ ์‹œ์ž‘์€ ์ตœ๋Œ€ ๋งˆ์ง„ ๋ถ„๋ฅ˜๊ธฐ -> ์„ฑ๋Šฅ์„ ๊ฐ•ํ™”ํ•œ SVC(Classifier) -> ๋น„์„ ํ˜• ํด๋ž˜์Šค๋„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” SVM์œผ๋กœ ๋ฐœ์ „ํ–ˆ๋‹ค.
๊ธฐ๋ณธ์ ์ธ ์›๋ฆฌ๋Š” ๋˜‘๊ฐ™๋‹ค. ๋‘ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ์ ์ ˆํ•œ ์ดˆํ‰๋ฉด์„ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋จผ์ € ์ดˆํ‰๋ฉด์ด ๋ฌด์—‡์ผ๊นŒ..? ๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€ ๋•Œ๋„ ํ•œ๋ฒˆ ๋‚˜์™”๋˜ ๊ฐœ๋…์ด๋‹ค. ๊ทธ๋•Œ๋Š” ์ดˆํ‰๋ฉด x=0์ด๋ผ๊ณ  ํ‰์น˜๊ณ  ์ง€๋‚˜๊ฐ”๋Š”๋ฐ ์—ฌ๊ธฐ์„œ๋Š” ๋„ˆ๋ฌด๋‚˜ ์ค‘์š”ํ•ด์„œ ๊ทธ๋ƒฅ ๋„˜์–ด๊ฐˆ ์ˆ˜๊ฐ€ ์—†๋‹ค. ์ฑ…์—์„œ๋Š” ์ด๋ ‡๊ฒŒ ์„ค๋ช…ํ•œ๋‹ค.

์ˆ˜์‹์„ ์„ธ์›Œ๋ณด์ž. 2์ฐจ์› ๊ณต๊ฐ„์—์„œ๋Š” b0+b1x1+b2x2=0์„ ๋งŒ์กฑํ•˜๋Š” x1๊ณผ x2๊ฐ€ ์ด๋ฃจ๋Š” ์„ ์ด ์ดˆํ‰๋ฉด์ด ๋œ๋‹ค. 

plt.axvline(x=0)
plt.xlim([-5, 5])

์ด๋Ÿฐ ์‹์ธ๊ฐ€?

๊ทธ ๋‹ค์Œ, 3์ฐจ์› ๊ณต๊ฐ„์—์„œ๋Š” b0+b1x1+b2x2+b3x3=0์„ ๋งŒ์กฑํ•˜๋Š” x1๊ณผ x2๊ณผ x3๊ฐ€ ์ด๋ฃจ๋Š” ๋ฉด..?์ด ์ดˆํ‰๋ฉด์ด ๋œ๋‹ค. 

 

โš ๏ธSVM๊ณผ ์ดˆํ‰๋ฉด์„ ๊ฒ€์ƒ‰ํ•˜๋ฉด ๋Œ€๋ถ€๋ถ„ ์ดˆํ‰๋ฉด์€ ๋‘ ๊ณต๊ฐ„์„ ๋‚˜๋ˆ„๋Š” ๊ฑฐ๋ผ๊ณ ๋งŒ ์„ค๋ช…ํ•˜๊ณ  ์ž์„ธํ•˜๊ฒŒ๋Š” ์จ์žˆ๋Š” ๊ณณ์ด ์—†์–ด์„œ, ์ดˆํ‰๋ฉด์— ๋Œ€ํ•ด์„œ๋งŒ ๊ฒ€์ƒ‰ํ•ด ๋ดค๋”๋‹ˆ ๊ดœ์ฐฎ์€ ์ž๋ฃŒ๊ฐ€ ๋งŽ์•˜๋‹ค. ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•˜๋ฉด,
2์ฐจ์› ๊ณต๊ฐ„์„ ๋‚˜๋ˆ„๋Š” ์ดˆํ‰๋ฉด์€ ์„ ์œผ๋กœ ax+by+c=0์„ ๋งŒ์กฑํ•ด์•ผ ํ•œ๋‹ค. 
3์ฐจ์› ๊ณต๊ฐ„์„ ๋‚˜๋ˆ„๋Š” ์ดˆํ‰๋ฉด์€ ๋ฉด์œผ๋กœ ax+by+cz+d=0์„ ๋งŒ์กฑํ•ด์•ผ ํ•œ๋‹ค. 
์ด๋Ÿฌ๋ฉด ์ดํ•ด๊ฐ€ ํ›จ์”ฌ ์‰ฌ์› ๋‹ค. ์ผ๋‹จ ๋ญ”์ง€๋„ ๋ชจ๋ฅผ x1 x2๊ฐ€ ์•„๋‹ˆ๋ผ ๊ตฌ์ฒด์ ์œผ๋กœ ์ถ• ๋ณ€์ˆ˜๋ผ๋Š” ๊ฑธ ์•Œ๊ฒŒ ๋˜๋‹ˆ ์ž˜ ์™€๋‹ฟ๋Š”๋‹ค.

 

 

๊ทธ๋Ÿฌ๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋กœ '๊ฐ€์žฅ ์ ์ ˆํ•œ ์ดˆํ‰๋ฉด'์ด ๋ฌด์—‡์ผ๊นŒ? ์ด ๋‹ต๋ณ€์€ ๊ทธ๋ฆผ ํ•œ ์žฅ์œผ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค. 

์™ผ์ชฝ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‘˜๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ดˆํ‰๋ฉด. ์˜ค๋ฅธ์ชฝ์€ ๊ฐ€์žฅ ์ ์ ˆํ•œ ์ดˆํ‰๋ฉด์ด๋‹ค. ์ดˆํ‰๋ฉด๊ณผ ๊ฐ€์žฅ ๊ฐ€๊นŒ์ด์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ์„œํฌํŠธ ๋ฒกํ„ฐ๋ผ๊ณ  ํ•˜๋ฏ€๋กœ ์„œํฌํŠธ ๋ฒกํ„ฐ์™€ ๊ฐ€์žฅ ๊ฑฐ๋ฆฌ๊ฐ€ ๋จผ ์ดˆํ‰๋ฉด์ด ๊ฐ€์žฅ ์ ์ ˆํ•˜๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

2) ์ข…๋ฅ˜ 

 

1- ์„œํฌํŠธ ๋ฒกํ„ฐ ๋ถ„๋ฅ˜๊ธฐ

๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ์ดˆํ‰๋ฉด์— ์˜ํ•ด ์™„๋ฒฝํ•˜๊ฒŒ ๋ถ„๋ฅ˜๋  ์ˆ˜๋Š” ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ•ญ์ƒ ์ ์šฉํ•  ์ˆ˜๋Š” ์—†๋‹ค. ๋˜ ์™„๋ฒฝํ•˜๊ฒŒ ๋ถ„๋ฅ˜ํ•˜๋”๋ผ๋„ ๊ณผ์ ํ•ฉ, ์ด์ƒ์น˜์— ๋ฏผ๊ฐ ๋“ฑ  ๋‹จ์ ์ด ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ SVC๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฅ˜ํ•˜๋˜ ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๋“ค์ด ๋ฐ˜๋Œ€์ชฝ์— ์žˆ๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•œ๋‹ค. ์ด ํ—ˆ์šฉ์น˜๋Š” ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๊ด€๋ฆฌํ•˜๋ฉฐ ๊ฐ’์ด 0์ด๋ฉด ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

 

2- ์„œํฌํŠธ ๋ฒกํ„ฐ ๋จธ์‹ 

๋น„์„ ํ˜• ๋ฐ์ดํ„ฐ์ผ ๊ฒฝ์šฐ์— ์‚ฌ์šฉ. ์ปค๋„์ด๋ผ๋Š” ๊ธฐ์ˆ ์„ ํ™œ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ ์ฐจ์›์œผ๋กœ ๋ณ€ํ™˜ํ•ด ๋ถ„๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ํ•œ๋‹ค.

2์ฐจ์›์˜ ๋น„์„ ํ˜• ๋ฐ์ดํ„ฐ๋ฅผ 3์ฐจ์›์œผ๋กœ ๋ณ€ํ™˜ํ•ด ๋ถ„๋ฆฌํ•จ(์ดํ•ด ์•ˆ๊ฐ..)

 

2-1- ์ฝ”๋“œ๋กœ ์งœ๋ณด๊ธฐ

iris ๋ฐ์ดํ„ฐ๋กœ ์‹ค์Šตํ•ด๋ณด์ž

from sklearn.datasets import load_iris

iris = load_iris()

df_iris = pd.DataFrame(iris.data, columns=iris.feature_names)
df_iris['result'] = iris.target

sns.pairplot(data=df_iris, hue='result')

๋…๋ฆฝ๋ณ€์ˆ˜์— ๋”ฐ๋ฅธ result ๊ฐ’์˜ ๋ถ„ํฌ

 

๋ฐ์ดํ„ฐ๋ฅผ ํ›ˆ๋ จ/๊ฒ€์ฆ ์„ธํŠธ๋กœ ๋ถ„ํ• ํ•ด์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์„œํฌํŠธ๋ฒกํ„ฐ๋จธ์‹ ์€ ๋ฏธ์„ธํ•œ ์ด์ƒ์น˜์—๋„ ์˜ํ–ฅ์„ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ •๊ทœํ™”ํ•˜๋ฉด ์กฐ๊ธˆ ๋” ๋ช…ํ™•ํ•œ ๊ฒฐ์ • ๊ฒฝ๊ณ„๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.  

from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler


x=df_iris.drop(columns=['result', 'sepal width (cm)', 'petal width (cm)'])
y=df_iris['result']


train_x, test_x, train_y, test_y = train_test_split(x, y, train_size=0.7, stratify=y)


stScaler = StandardScaler()

stScaler.fit(train_x, train_y)
train_x_scaled = stScaler.transform(train_x)

sns.pairplot(data=pd.concat([pd.DataFrame(train_x), train_y], axis=1), hue='result')

์Šค์ผ€์ผ๋งํ•œ ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ์˜ ์‚ฐ์ ๋„

 

svc ๋ถ„๋ฅ˜๋ชจ๋ธ์„ importํ•˜๊ณ  ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ๋กœ ์˜ˆ์ธก, ๊ฒ€์ฆ ๋ฐ์ดํ„ฐ๋กœ ์˜ˆ์ธก๊ฐ’์„ ๊ตฌํ•œ๋‹ค. ๋ชจ๋ธ์˜ ์†์„ฑ C๋Š” ์˜ˆ์™ธ๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ์ •๋„์ด๊ณ  ๋†’์•„์งˆ์ˆ˜๋ก ๋งŽ์€ ์˜ˆ์™ธ๋ฅผ ํ—ˆ์šฉํ•˜๊ฒŒ ๋œ๋‹ค(์„ ์„ ๋„˜์–ด ๋ฐ˜๋Œ€์ชฝ์œผ๋กœ ๊ฐ€ ์žˆ๋Š” ๊ฒฐ๊ณผ๊ฐ’๋“ค์„ ํ—ˆ์šฉ)

from sklearn.svm import SVC

clf = SVC(C=0.5)
clf.fit(train_x_scaled, train_y)

test_x_scaled=stScaler.transform(test_x)

pred = clf.predict(test_x_scaled)

 

์˜ˆ์ธก๊ฐ’๊ณผ ์‹ค์ œ๊ฐ’์„ ๋น„๊ตํ•ด ์„ฑ๋Šฅ์„ ํ‰๊ฐ€ํ•ด ๋ณด์ž. 

from sklearn.metrics import confusion_matrix, accuracy_score, precision_matrix, recall_matrix, f1_score

print(confusion_matrix(test_y, pred))
print(accuracy_score(test_y, pred))
print(precision_score(test_y, pred, average='macro'))
print(f1_score(test_y, pred, average='macro'))

 

์ข…์†๋ณ€์ˆ˜๊ฐ€ 3๊ฐœ ์ด์ƒ์ธ ๊ฒฝ์šฐ์—๋Š” ์ •ํ™•๋„๋ฅผ ์ œ์™ธํ•œ ์„ฑ๋Šฅ ํ‰๊ฐ€ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ average๋ผ๋Š” ์†์„ฑ์— ๋ณ„๋„์˜ ๊ฐ’์„ ์ง€์ •ํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์†์„ฑ์˜ ๊ธฐ๋ณธ๊ฐ’์ด binary(์ด์ง„ ๋ถ„๋ฅ˜)๋กœ ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— 3๊ฐœ ์ด์ƒ์˜ ์ข…์† ๋ณ€์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋Ÿผ ๋‹ค๋ฅธ ์†์„ฑ์€ ๋ฌด์—‡์ด ์žˆ์„๊นŒ?

macro : ์ข…์†๋ณ€์ˆ˜๋ณ„๋กœ ๋งคํŠธ๋ฆญ์Šค๋ฅผ ๊ณ„์‚ฐํ•ด ์„ฑ๋Šฅํ‰๊ฐ€์ ์ˆ˜๋ฅผ ๊ตฌํ•œ ๋’ค ๊ทธ ๊ฐ’๋“ค์˜ ํ‰๊ท ์„ ๊ณ„์‚ฐํ•œ๋‹ค
micro : ๊ฐ ๋ ˆ์ด๋ธ”์˜ ๋งคํŠธ๋ฆญ์Šค๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ๊ฐ€์ค‘์ด ๋˜์ง€ ์•Š๋Š” ํ‰๊ท ์„ ์ฐพ๋Š”๋‹ค(*๊ฐ€์ค‘์ด ๋˜์ง€ ์•Š๋Š” ํ‰๊ท ์„ ์ฐพ๋Š”๋‹ค๋Š” ๊ฒŒ ๋ญ์•ผ?)
            โžก๏ธ macro๊ฐ€ ๊ฐ๊ฐ์˜ ๋งคํŠธ๋ฆญ์Šค๋กœ ๊ณ„์‚ฐํ–ˆ๋‹ค๋ฉด micro๋Š” ์ข…์†๋ณ€์ˆ˜ ์ „์ฒด์˜ ์˜ค์ฐจํ–‰๋ ฌ์—์„œ ํ‰๊ท ์„ ๊ณ„์‚ฐํ•œ๋‹ค.
weightend : ์ข…์†๋ณ€์ˆ˜์˜ ํด๋ž˜์Šค๋ณ„ ๋ถ„ํฌ๋ฅผ ๊ณ ๋ คํ•ด ํ‰๊ท ์„ ๊ตฌํ•œ๋‹ค.
(*==ํด๋ž˜์Šค๋ณ„ ๋ถ„ํฌ๊ฐ€ ๋งŽ์ด ์ฐจ์ด๋‚˜๋Š” ๊ฒฝ์šฐ์—๋Š” micro๋‚˜ weightend๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์ข‹๊ฒ ๋‹ค.)

 

 

 

 

 

3- ์„œํฌํŠธ ๋ฒกํ„ฐ ํšŒ๊ท€

์•ž์— ๋‘๊ฐœ๋Š” ๋ถ„๋ฅ˜๊ธฐ, ๊ฐ™์€ ์›๋ฆฌ์ด์ง€๋งŒ ํšŒ๊ท€๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ฐ€์šด๋ฐ ์„ ์„ ์ค‘์‹ฌ์œผ๋กœ ์–‘์ชฝ์˜ ํฌ๋ฏธํ•œ ์„ ์ด ๋งˆ์ง„ ๊ฑฐ๋ฆฌ์ด๊ณ  ์ด ์•ˆ์— ์ตœ๋Œ€ํ•œ ๋งŽ์€ ์ ์ด ๋“ค์–ด๊ฐ€๋„๋ก ์ค‘์‹ฌ์„  ์‹์„ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด ๋ชฉ์ ์ด๋‹ค.

SVR์˜ ํ•˜์ดํผ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์ด๋”ฐ๊ฐ€ ๋˜ ์“ฐ๊ฒ ์ง€๋งŒ ๊ทธ๋ž˜ํ”„๋กœ ๋จผ์ € ์•Œ์•„๋ณด์ž. ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ํšŒ๊ท€์„ ๊ณผ ํ—ˆ์šฉ ๋ฒ”์œ„๋ฅผ ๋„˜์–ด์„  ์ ์„ ๋งˆ์ง„ ์˜ค๋ฅ˜๋ผ๊ณ  ์ธ์‹ํ•˜๊ณ  ํ—ˆ์šฉ ์ตœ๋Œ€ ๋ฒ”์œ„์—์„œ ๊ฐ€์žฅ ๋จผ ์„œํฌํŠธ ๋ฒกํ„ฐ์™€์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ์†์„ฑ์œผ๋กœ ์“ฐ์ธ๋‹ค.

 

3-2-์ฝ”๋“œ๋กœ ์งœ๋ณด๊ธฐ

 

๋ณ„๋„๋กœ ์ฃผ์–ด์ง„ ๋ฐ์ดํ„ฐ ์—†์ด ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด์„œ ํ•ด๋ณด์ž. ๋…๋ฆฝ๋ณ€์ˆ˜๋Š” 0~1 ์‚ฌ์ด์˜ ๋ถˆ๊ทœ์น™ํ•œ ๊ฐ’์— 5๋ฅผ ๊ณฑํ•ด ๋งŒ๋“ ๋‹ค.

์˜ค๋ฅ˜ ๊ฐ’์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์ข…์†๋ณ€์ˆ˜ ๋ฐ์ดํ„ฐ์— ์ผ์ • ์ˆœ์„œ๋งˆ๋‹ค ์ด์ƒ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.

import numpy as np

X = np.sort(5 * np.random.rand(40, 1), axis=0)
y = np.sin(X)

y[::5] += 3*(0.5-np.random.rand(8)) 

print(X[0:10])

 

์„œํฌํŠธ ๋ฒกํ„ฐ ํšŒ๊ท€๋ชจ๋ธ์„ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ๋กœ ์กฐ์ •ํ•˜๋Š” ์†์„ฑ์€ kernel, C, gamma, epsilon์œผ๋กœ ์ด๊ฒƒ๋งŒ ์•Œ์•„๋ณด์ž.

C๋Š” ๋ถ„๋ฅ˜๋ชจ๋ธ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์˜ˆ์™ธ ํ—ˆ์šฉ์˜ ์ •๋„์ด๊ณ  ํด์ˆ˜๋ก ํ—ˆ์šฉ ์ •๋„๊ฐ€ ๋‚ฎ์•„์ง„๋‹ค.
gamma : ๊ฐ€์šฐ์‹œ์•ˆ ์ปค๋„ ํ•จ์ˆ˜์˜ ๊ณ„์ˆ˜(???)๋กœ ์˜๋ฏธ ์ž์ฒด๋Š” ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ ์ƒ˜ํ”Œ์ด ํ–‰์‚ฌํ•˜๋Š” ์˜ํ–ฅ๋ ฅ์˜ ๊ฑฐ๋ฆฌ์ด๊ณ  ๊ฐ’์ด ํด์ˆ˜๋ก ๊ฑฐ๋ฆฌ๊ฐ€ ์งง์•„์ง„๋‹ค. 
epsilon : ํšŒ๊ท€์‹์„ ์ค‘์‹ฌ์œผ๋กœ ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ๊ฑฐ๋ฆฌ
kernel : ์‚ฌ์šฉํ•  ์ปค๋„ ํ•จ์ˆ˜๋ฅผ ๊ณ ๋ฅธ๋‹ค. rbf(radial basis function), linear(์„ ํ˜•ํšŒ๊ท€), poly(๋‹คํ•ญํšŒ๊ท€) ๋“ฑ๋“ฑ
(*svr์„ ์‚ฌ์šฉํ•  ๋•Œ rbfํ•จ์ˆ˜๋ฅผ ์ œ์ผ ๋งŽ์ด ์“ด๋‹ค๊ณ  ํ•œ๋‹ค.)

 

๋‹ค์–‘ํ•œ ์ปค๋„ ํ•จ์ˆ˜๊ฐ€ ์žˆ์œผ๋‹ˆ ๋งํ•œ ๊ฒƒ๋“ค๋กœ ๋ชจ๋‘ ๋ถ„์„ํ•ด๋ณด์ž

from sklearn.svm import SVR

svr_rbf = SVR(kernel='rbf', C=100, gamma=0.1, epsilon=0.1)
svr_lin = SVR(kernel='linear', C=100, gamma='auto', epsilon=0.1)
svr_poly = SVR(kernel='poly', C=100, gamma='auto', epsilon=0.1)

svr_rbf.fit(X, y)
svr_lin.fit(X, y)
svr_poly.fit(X, y)

rbf_pred = svr_rbf.predict(X)
lin_pred = svr_lin.predict(X)
poly_pred = svr_poly.predict(X)

 

๋ถ„๋ฅ˜๋ชจ๋ธ์ฒ˜๋Ÿผ ๋˜‘๊ฐ™์ด ์„ฑ๋Šฅ ํ‰๊ฐ€๋„ ํ•ด๋ณด์ž

from sklearn.metrics import mean_absolute_error, mean_squared_error

preds = [rbf_pred, lin_pred, poly_pred]
kernel = ['rbf', 'Linear', 'Polynomial']
evls = ['mae', 'mse', 'rmse']


df_result = pd.DataFrame({'kernel':kernel})


for nm, pred in zip(kernel, preds):
    mae = mean_absolute_error(y, pred)
    mse = mean_squared_error(y, pred)
    rmse = np.sqrt(mse)
    
    df_result.loc[df_result['kernel']==nm, 'mae'] = round(mae, 2)
    df_result.loc[df_result['kernel']==nm, 'mse'] = round(mse, 2)
    df_result.loc[df_result['kernel']==nm, 'rmse'] = round(rmse, 2)

print(df_result)

rbf์˜ ์„ฑ๋Šฅ์ด ์›”๋“ฑํžˆ ์ข‹์€ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค... ๋‚จ๋“ค ์ข‹๋‹ค๋Š”๋ฐ๋Š” ๋‹ค ์ด์œ ๊ฐ€ ์žˆ๋‚˜๋ณด๋‹ค.

 

 

 

๋!

 

ํšŒ๊ท€๋ชจ๋ธ์€ ๋Œ€์ถฉ ๋„˜ํŒŒ์ด๋กœ ๋ฐ์ดํ„ฐ ๋งŒ๋“ค์–ด์„œ ํ•œ ๊ฒƒ์ด ์•„์‰ฝ๋‹ค. ์กฐ๋งŒ๊ฐ„ ๋ณต์Šตํ•  ๋•Œ ์ผ€๊ธ€์—์„œ ์“ธ๋งŒํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธ์–ด์™€์„œ ๋‹ค์‹œ ๋ถ„์„ํ•ด๋ด์•ผ๊ฒ ๋‹ค