[๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹] Session 8. ์ตœ๋Œ€ ๋งˆ์ง„ ๋ถ„๋ฅ˜์™€ ๋น„์„ ํ˜• ๋ฌธ์ œ ํ’€๊ธฐ

2020. 2. 7. 16:30ยท๐Ÿฌ ML & Data/๐ŸŽซ ๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹
728x90

 ์ด๋ฒˆ ์„ธ์…˜์—์„œ๋Š” ์ตœ๋Œ€ ๋งˆ์ง„๊ณผ SVM, ๋น„์„ ํ˜• ๋ถ„๋ฅ˜ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

1. ์„œํฌํŠธ ๋ฒกํ„ฐ ๋จธ์‹ ๊ณผ ์ตœ๋Œ€ ๋งˆ์ง„ ๋ถ„๋ฅ˜

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

๊ทธ๋ฆผ 1. ์„œํฌํŠธ ๋ฒกํ„ฐ ๋จธ์‹ 

 ์šฐ๋ฆฌ๊ฐ€ ๋งˆ์ง„์ด ํฐ ๊ฒฐ์ • ๊ฒฝ๊ณ„๋ฅผ ์›ํ•˜๋Š” ์ด์œ ๋Š” ์ผ๋ฐ˜ํ™”ํ•  ๋•Œ ์˜ค์ฐจ๊ฐ€ ๋‚ฎ์•„์ง€๋Š” ๊ฒฝํ–ฅ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋งˆ์ง„์ด ์ž‘์œผ๋ฉด ์ž‘์„ ์ˆ˜๋ก ๊ฒฐ์ • ๊ฒฝ๊ณ„์™€ ์ƒ˜ํ”Œ์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€๊นŒ์›Œ์ ธ ์˜ค๋ฒ„ํ”ผํŒ…๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ๋งˆ์ง„ ์ตœ๋Œ€ํ™”์˜ ์ดํ•ด๋ฅผ ์œ„ํ•ด ์Œ์„ฑ ์ƒ˜ํ”Œ ์ชฝ์˜ ๊ฒฐ์ • ๊ฒฝ๊ณ„์™€ ์–‘์„ฑ ์ƒ˜ํ”Œ ์ชฝ์˜ ๊ฒฐ์ • ๊ฒฝ๊ณ„๋ฅผ ์ž์„ธํ•˜๊ฒŒ ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 2. ์–‘์„ฑ๊ณผ ์Œ์„ฑ ์ชฝ์˜ ๊ฒฐ์ • ๊ฒฝ๊ณ„, ๋บ„์…ˆ ๊ฒฐ๊ณผ

 ๊ทธ๋ฆผ 2์˜ ์ฒซ์งธ ์ค„์ด ์–‘์„ฑ ์ƒ˜ํ”Œ ๊ฒฝ๊ณ„, ๋‘˜์งธ ์ค„์ด ์Œ์„ฑ ์ƒ˜ํ”Œ ๊ฒฝ๊ณ„์ž…๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์‹์—์„œ ๋‘ ๋ฒˆ์งธ ์‹์„ ๋นผ๋ฉด ์…‹์งธ ์ค„๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์‹์€ ๋ฒกํ„ฐ w์˜ ๊ธธ์ด๋กœ ์ •๊ทœํ™” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 3. ๋ฒกํ„ฐ w์˜ ๊ธธ์ด์™€ ๊ฒฐ๊ณผ์‹

 ์ฒซ์งธ ์ค„์ด w์˜ ๊ธธ์ด๋กœ ์ •๊ทœํ™”๋œ ์‹์ด๊ณ  ๊ทธ ์•„๋ž˜์˜ ์‹์ด ๊ฒฐ๊ณผ์‹์ž…๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์‹์˜ ์ขŒ๋ณ€์€ ์–‘์„ฑ ์ชฝ ๊ฒฐ์ • ๊ฒฝ๊ณ„์™€ ์Œ์„ฑ ์ชฝ ๊ฒฐ์ • ๊ฒฝ๊ณ„์˜ ๊ฑฐ๋ฆฌ๋กœ, ์ตœ๋Œ€ํ™”ํ•˜๋ ค๋Š” ๋งˆ์ง„(margin)์ž…๋‹ˆ๋‹ค.

 SVM์˜ ๋ชฉ์  ํ•จ์ˆ˜๋Š” ์ƒ˜ํ”Œ์ด ์ •ํ™•ํ•˜๊ฒŒ ๋ถ„๋ฅ˜๋œ๋‹ค๋Š” ์กฐ๊ฑด ํ•˜์— ์šฐ๋ณ€์„ ์ตœ๋Œ€ํ™”ํ•จ์œผ๋กœ์จ ๋งˆ์ง„์„ ์ตœ๋Œ€ํ™”ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์กฐ๊ฑด์€ ์•„๋ž˜ ๊ทธ๋ฆผ 4์™€ ๊ฐ™์ด ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 4. SVM ์ œ์•ฝ์กฐ๊ฑด

 ๊ทธ๋ฆผ 4์— ํ‘œ๊ธฐ๋œ N์€ ๋ฐ์ดํ„ฐ์— ์žˆ๋Š” ์ƒ˜ํ”Œ์˜ ๊ฐœ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ด ๋‘ ์‹์€ ๋ชจ๋“  ์Œ์„ฑ ์ƒ˜ํ”Œ์€ ์Œ์„ฑ ์ชฝ ๊ฒฐ์ • ๊ฒฝ๊ณ„ ๋„ˆ๋จธ์—, ์–‘์„ฑ ์ƒ˜ํ”Œ์„ ์–‘์„ฑ ์ชฝ ๊ฒฐ์ • ๊ฒฝ๊ณ„ ๋„ˆ๋จธ์— ์žˆ์–ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ด์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ทธ๋ฆผ 5์˜ ์ˆ˜์‹๊ณผ ๊ฐ™์ด ๊ฐ„๋‹จํ•˜๊ฒŒ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 5

 ์‹ค์ œ๋กœ๋Š” ๋™์ผํ•œ ํšจ๊ณผ๋ฅผ ๋‚ด๋ฉด์„œ ์ฝฐ๋“œ๋ผํ‹ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(quadratic programming) ๋ฐฉ๋ฒ•์œผ๋กœ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฒกํ„ฐ w์˜ ๊ธธ์ด์˜ ์ œ๊ณฑ์— 1/2๋ฅผ ๊ณฑํ•œ ๊ฐ’์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒƒ์ด ๋” ์‰ฝ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ์ฝฐ๋“œ๋ผํ‹ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์•ž์œผ๋กœ๋„ ๋‹ค๋ฃจ์ง€ ์•Š์„ ๊ฒƒ์ด๋ฏ€๋กœ, ์ž์„ธํžˆ ์•Œ๊ณ  ์‹ถ์œผ์‹  ๋ถ„๋“ค์€ <ํ•ธ์ฆˆ์˜จ ํ”„๋กœ๊ทธ๋ž˜๋ฐ>์ด๋ผ๋Š” ์ฑ…์„ ์ฐธ์กฐํ•ด์ฃผ์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์„œํฌํŠธ ๋ฒกํ„ฐ ๋จธ์‹ ์— ๋Œ€ํ•œ ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ <The Nature of Statistical Learning Theory, Springer Science+Business Media, Vladimir Vapnik, 2000> ํ˜น์€ <A Tutorial on Support Vector Machines for Pattern Recognition(Data Mining and Knowledge Discovery, 2(2) : 121-167, 1998>์„ ์ฐธ๊ณ ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. 

 

2. ์Šฌ๋ž™ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ๋น„์„ ํ˜• ๋ฌธ์ œ ๋‹ค๋ฃจ๊ธฐ

 ์ด๋ฒˆ์—๋Š” 1995๋…„ ๋ธ”๋ผ๋””๋ฏธ๋ฅด ๋ฐ”ํ”„๋‹‰์ด ์†Œ๊ฐœํ•œ ์Šฌ๋ž™ ๋ณ€์ˆ˜๋งŒ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ด์•ผ๊ธฐ ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ์Šฌ๋ž™ ๋ณ€์ˆ˜๋ฅผ ์†Œํ”„ํŠธ ๋งˆ์ง„ ๋ถ„๋ฅ˜(soft margin classfication)์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. 1์—์„œ ์†Œ๊ฐœํ•œ ์Šฌ๋ž™ ๋ณ€์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๋Š” ํ•˜๋“œ ๋งˆ์ง„ ๋ถ„๋ฅ˜๋ผ๊ณ ๋„ ๋ถ€๋ฅด์ฃ . ์Šฌ๋ž™ ๋ณ€์ˆ˜๊ฐ€ ์ฐธ ์˜ˆ์˜๊ฒŒ ์ƒ๊ฒผ๋Š”๋ฐ, ์žํŒ์—์„œ ์ฐพ์„ ์ˆ˜ ์—†์–ด์„œ ์•„์‰ฌ์šธ ๋”ฐ๋ฆ„์ž…๋‹ˆ๋‹ค. ์Šฌ๋ž™ ๋ณ€์ˆ˜๋Š” ์„ ํ˜•์ ์œผ๋กœ ๊ตฌ๋ถ„๋˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ์—์„œ ์„ ํ˜• ์ œ์•ฝ ์กฐ๊ฑด์„ ์™„ํ™”ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์–ด๋А์ •๋„ ๋น„์šฉ์„ ์†ํ•ด๋ณด๋ฉด์„œ ๋ถ„๋ฅ˜ ์˜ค์ฐจ๊ฐ€ ์žˆ๋Š” ์ƒํ™ฉ์—์„œ ์ตœ์ ํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ˆ˜๋ ดํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด์ฃ . ์–‘์ˆ˜ ๊ฐ’์ธ ์Šฌ๋ž™ ๋ณ€์ˆ˜๋ฅผ ์„ ํ˜• ์ œ์•ฝ ์กฐ๊ฑด์— ๋”ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 6. ์„ ํ˜• ์ œ์•ฝ ์กฐ๊ฑด์— ์Šฌ๋ž™ ๋ณ€์ˆ˜ ์ ์šฉ

 ์—ฌ๊ธฐ์„œ N์€ ๋ฐ์ดํ„ฐ์…‹์— ์žˆ๋Š” ์ƒ˜ํ”Œ ๊ฐœ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ œ์•ฝ ์กฐ๊ฑด ์•„๋ž˜์—์„œ ์ตœ์†Œํ™”ํ•  ์ƒˆ๋กœ์šด ๋ชฉ์ ํ•จ์ˆ˜๋Š” ๊ทธ๋ฆผ 7๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 7. ๋ชฉ์ ํ•จ์ˆ˜ with ์Šฌ๋ž™ ๋ณ€์ˆ˜

๊ทธ๋ฆผ 7์˜ ๋ณ€์ˆ˜ C๋ฅผ ํ†ตํ•ด ๋ถ„๋ฅ˜ ์˜ค์ฐจ์— ๋Œ€ํ•œ ๋น„์šฉ์„ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. C๊ฐ’์ด ํฌ๋ฉด ์˜ค์ฐจ์— ๋” ์—„๊ฒฉํ•ด์ ธ ์˜ค์ฐจ์— ๋Œ€ํ•œ ๋น„์šฉ์ด ์ปค์ง€๊ณ , ์ž‘์œผ๋ฉด ๋ถ„๋ฅ˜ ์˜ค์ฐจ์— ๋œ ์—„๊ฒฉํ•ด์ ธ ๋น„์šฉ์ด ์ž‘์•„์ง‘๋‹ˆ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜ C๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งˆ์ง„ ํญ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ๊ทธ๋ฆผ 8๋กœ ์‹œ๊ฐ์ ์œผ๋กœ ํ™•์ธํ•ด๋ณผ๊นŒ์š”?

๊ทธ๋ฆผ 8. C๊ฐ’์— ๋”ฐ๋ฅธ ๊ฒฐ์ • ๊ฒฝ๊ณ„์™€ ๋งˆ์ง„

 ์—ฌ๋Ÿฌ๋ถ„๋„ ๋ˆˆ์น˜์ฑ„์…จ๊ฒ ์ง€๋งŒ ์ด ๊ฐœ๋…์€ ๊ทœ์ œ์™€ ๊นŠ์€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Session 7์—์„œ ์–ธ๊ธ‰ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๊ทœ์ œ๊ฐ€ ์žˆ๋Š” ๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€ ๋ชจ๋ธ์€ C๊ฐ’์„ ์ค„์ด๋ฉด ํŽธํ–ฅ์ด ๋Š˜๊ณ , ๋ชจ๋ธ ๋ถ„์‚ฐ์€ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.

 ์•„๋ž˜ ์ฝ”๋“œ๋Š” ๋ถ“๊ฝƒ ๋ฐ์ดํ„ฐ์…‹์˜ ๊ฝƒ ๋ถ„๋ฅ˜ ๋ฌธ์ œ์— SVM ๋ชจ๋ธ์„ ํ›ˆ๋ จํ•˜๋Š” ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๊ทธ๋ฆผ 9์˜ ๊ฒฐ์ •๊ฒฝ๊ณ„๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

from sklearn.svm import SVC

svm = SVC(kernel='linear', C=1.0, random_state=1)
svm.fit(X_train_std, y_train)

plot_decision_regions(X_combined_std, 
                      y_combined,
                      classifier=svm, 
                      test_idx=range(105, 150))
plt.scatter(svm.dual_coef_[0, :], svm.dual_coef_[1, :])
plt.xlabel('petal length [standardized]')
plt.ylabel('petal width [standardized]')
plt.legend(loc='upper left')
plt.tight_layout()
plt.show()

๊ทธ๋ฆผ 9. SVM ๋ถ„๋ฅ˜๊ธฐ๊ฐ€ ํ•™์Šตํ•œ ๋ถ“๊ฝƒ ๋ฐ์ดํ„ฐ์…‹ ๊ฒฐ์ • ๊ฒฝ๊ณ„

 ์ด๋ฒˆ์—๋Š” ์‚ฌ์ดํ‚ท๋Ÿฐ์ž…๋‹ˆ๋‹ค. ์ด์ „ ์„ธ์…˜์—์„œ ๋ณด์…จ๋˜ ์‚ฌ์ดํ‚ท๋Ÿฐ์˜ Logistic Regression ํด๋ž˜์Šค๋ฅผ LIBLINEAR ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” C/C++ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, ๋งํฌ์—์„œ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. SVM์„ ํ›ˆ๋ จํ•˜๋Š” SVC ํด๋ž˜์Šค๋Š” LISVM ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” SVM์— ํŠนํ™”๋œ C/C++ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์š”๊ธฐ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 ์ˆœ์ˆ˜ํ•˜๊ฒŒ ํŒŒ์ด์ฌ์œผ๋กœ๋งŒ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์— ๋ฏธํ•ด LIBLINEAR์™€ LIBSVM์€ ๋งŽ์€ ์„ ํ˜• ๋ถ„๋ฅ˜๊ธฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ํ›ˆ๋ จํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ข…์ข… ๋ฐ์ดํ„ฐ๊ฐ€ ๋„ˆ๋ฌด ์ปค์„œ ์ปดํ“จํ„ฐ ๋ฉ”๋ชจ๋ฆฌ ์šฉ๋Ÿ‰์— ๋งž์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, ์‚ฌ์ดํ‚ท๋Ÿฐ์€ ๋Œ€์•ˆ์œผ๋กœ SDGClassifier ํด๋ž˜์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ํด๋ž˜์Šค๋Š” partial_fit์œผ๋กœ ์˜จ๋ผ์ธ ํ•™์Šต์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์˜จ๋ผ์ธ ํ•™์Šต์— ๋Œ€ํ•ด์„œ๋Š” ๊ธฐ์–ตํ•˜์‹œ์ฃ ? SDGClassifier์€ ํ™•๋ฅ ์  ๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ•๊ณผ ๋น„์Šทํ•œ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. 

 ํผ์…‰ํŠธ๋ก , ๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€, ์„œํฌํŠธ ๋ฒกํ„ฐ ๋จธ์‹ ์˜ ํ™•๋ฅ ์  ๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ•์€ ์•„๋ž˜ ์ฝ”๋“œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

from sklearn.linear_model import SGDClassifier

ppn = SGDClassifier(loss='perceptron') #perceptron
lr = SGDClassifier(loss='log') #logistic regression
svm = SGDClassifier(loss='hinge') #svm

 

3. ๋น„์„ ํ˜• ๋ถ„๋ฅ˜ ๋ฐ์ดํ„ฐ๋ฅผ ์œ„ํ•œ ์ปค๋„

 ๋จธ์‹ ๋Ÿฌ๋‹์„ ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค ์‚ฌ์ด์—์„œ SVM์ด ์ธ๊ธฐ๊ฐ€ ๋งŽ์€ ์ด์œ ๋Š” ๋น„์„ ํ˜• ๋ถ„๋ฅ˜ ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด ์ปค๋„ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ปค๋„ SVM(kernel SVM)์˜ ์ฃผ์š” ๊ฐœ๋… ์„ค๋ช… ์ „์—, ์„ ํ˜•์œผ๋กœ ๋ถ„๋ฅ˜๋˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ์…‹์„ ๋งŒ๋“ค์–ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 ์•„๋ž˜ ์ฝ”๋“œ์—์„œ numpy ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ logical_or ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด XOR ํ˜•ํƒœ์˜ ๊ฐ„๋‹จํ•œ ๋ฐ์ดํ„ฐ์…‹์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋Œ€๋žต 100๊ฐœ ์ƒ˜ํ”Œ์„ ํด๋ž˜์Šค ๋ ˆ์ด๋ธ” 1๋กœ ํ• ๋‹นํ•˜๊ณ  ๋‚˜๋จธ์ง€ 100๊ฐœ ์ƒ˜ํ”Œ์€ ํด๋ž˜์Šค ๋ ˆ์ด๋ธ” -1๋กœ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

import matplotlib.pyplot as plt
import numpy as np

np.random.seed(1)
X_xor = np.random.randn(200, 2)
y_xor = np.logical_xor(X_xor[:, 0] > 0,
                       X_xor[:, 1] > 0)
y_xor = np.where(y_xor, 1, -1)

plt.scatter(X_xor[y_xor == 1, 0],
            X_xor[y_xor == 1, 1],
            c='b', marker='x',
            label='1')
plt.scatter(X_xor[y_xor == -1, 0],
            X_xor[y_xor == -1, 1],
            c='r',
            marker='s',
            label='-1')

plt.xlim([-3, 3])
plt.ylim([-3, 3])
plt.legend(loc='best')
plt.tight_layout()
plt.show()

๊ทธ๋ฆผ 10. ๊ฐ„๋‹จํ•œ XOR ๋ฐ์ดํ„ฐ์…‹

 ๊ทธ๋ฆผ 10์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค์‹œํ”ผ ์–‘์„ฑ๊ณผ ์Œ์„ฑ ํด๋ž˜์Šค๋ฅผ ์„ ํ˜• ๊ฒฐ์ • ๊ฒฝ๊ณ„๋กœ๋Š” ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์—†์„ ๊ฒƒ ๊ฐ™์ฃ ? ์ด๋ ‡๊ฒŒ ์„ ํ˜•์ ์œผ๋กœ ๊ตฌ๋ถ„๋˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์ปค๋„ ๋ฐฉ๋ฒ•(kernel method)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ปค๋„ ๋ฐฉ๋ฒ•์€ ๋งคํ•‘ํ•จ์ˆ˜ ๋ฅผ ์‚ฌ์šฉํ•ด ์›๋ณธ ํŠน์„ฑ๋“ค์˜ ์„ ํ˜• ์กฐํ•ฉ์„ ์„ ํ˜•์ ์œผ๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณ ์ฐจ์› ๊ณต๊ฐ„์— ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 11. ํˆฌ์˜์„ ํ†ตํ•œ 3์ฐจ์› ํŠน์„ฑ๊ณต๊ฐ„์œผ๋กœ์˜ ๋ณ€ํ™˜
๊ทธ๋ฆผ 12. ๊ณ ์ฐจ์› ๊ณต๊ฐ„์—์„œ ๋‘ ํด๋ž˜์Šค๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒฐ์ •๊ฒฝ๊ณ„

 ๊ทธ๋ฆผ 12์™€ ๊ฐ™์ด ๊ณ ์ฐจ์› ๊ณต๊ฐ„์—์„œ ๊ฒฐ์ •๊ฒฝ๊ณ„๋ฅผ ๊ทธ๋ฆฌ๊ณ  ์›๋ณธ ํŠน์„ฑ ๊ณต๊ฐ„์œผ๋กœ ๋˜๋Œ๋ฆฌ๋ฉด ๋น„์„ ํ˜• ํ˜•ํƒœ์˜ ๊ฒฐ์ • ๊ฒฝ๊ณ„๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 ๊ทธ๋Ÿผ ์ด์ œ ๊ณ ์ฐจ์› ๊ณต๊ฐ„์—์„œ ๋ถ„ํ•  ๊ฒฐ์ • ๊ฒฝ๊ณ„๋ฅผ ์ฐพ์•„๋ณผ๊นŒ์š”? ๋จผ์ €, SVM์œผ๋กœ ๋น„์„ ํ˜• ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด์„œ ๋งคํ•‘ํ•จ์ˆ˜ โˆฎ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ ์ฐจ์›์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ๊ณ ์ฐจ์› ํŠน์„ฑ ๊ณต๊ฐ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฅ˜ํ•˜๋Š” ์„ ํ˜• SVM ๋ชจ๋ธ์„ ํ›ˆ๋ จํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„์— ๊ฐ™์€ ๋งคํ•‘ ํ•จ์ˆ˜์™€ ์„ ํ˜• ๋ชจ๋ธ๋กœ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 ์ด ๋ฐฉ๋ฒ•์˜ ๋ฌธ์ œ์ ์€ ์ƒˆ๋กœ์šด ํŠน์„ฑ์„ ๋งŒ๋“œ๋Š” ๊ณ„์‚ฐ์—์„œ ๋น„์šฉ์ด ๋„ˆ๋ฌด ๋น„์‹ธ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์—ฌ๊ธฐ์— ์†Œ์œ„ ์ปค๋„ ๊ธฐ๋ฒ•์ด ๋“ฑ์žฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. SVM ํ›ˆ๋ จ์„ ์œ„ํ•œ ์ฝฐ๋“œ๋ผํ‹ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์•ž์—์„œ ๋งํ–ˆ๋‹ค์‹œํ”ผ ๋‹ค๋ฃจ์ง€๋Š” ์•Š๊ฒ ์ง€๋งŒ ์‹ค์ „์—์„œ ํ•„์š”ํ•œ ๊ฒƒ์€ ๊ทธ๋ฆผ 13๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆผ 13์˜ ์ ๊ณฑ์„ ๊ณ„์‚ฐํ•˜๋Š”๋ฐ ๋“œ๋Š” ๋น„์šฉ ์ ˆ๊ฐ์„ ์œ„ํ•ด ๊ทธ๋ฆผ 13 ๋‘˜์งธ ์ค„์˜ ์ปค๋„ ํ•จ์ˆ˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 13. ์ ๊ณฑ๊ณผ ์ปค๋„ ํ•จ์ˆ˜

 ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์ปค๋„ ์ค‘ ํ•˜๋‚˜๋Š” ๋ฐฉ์‚ฌ ๊ธฐ์ € ํ•จ์ˆ˜(Radial Basis Function, RBF)์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ง๋กœ ๊ฐ€์šฐ์‹œ์•ˆ ์ปค๋„(Gaussian kernel)์ด๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์ฒซ์งธ ์ค„๋กœ ์“ธ ์ˆ˜ ์žˆ๊ณ , ์กฐ๊ธˆ ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ๋‘ ๋ฒˆ์งธ ์ค„๋กœ๋„ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๊ฐ๋งˆ๋Š” ์ตœ์ ํ™” ๋Œ€์ƒ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 14. ๋ฐฉ์‚ฌ ๊ธฐ์ € ํ•จ์ˆ˜

 ๋Œ€๋žต ๋งํ•˜๋ฉด ์ปค๋„์ด๋ž€ ์šฉ์–ด๋Š” ์ƒ˜ํ”Œ ๊ฐ„์˜ ์œ ์‚ฌ๋„ ํ•จ์ˆ˜๋กœ ํ•ด์„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹์— ์“ฐ์ธ ์Œ์ˆ˜ ๋ถ€ํ˜ธ๊ฐ€ ๊ฑฐ๋ฆฌ ์ธก์ •์„ ์œ ์‚ฌ๋„ ์ ์ˆ˜๋กœ ๋ฐ”๊พธ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์œ ์‚ฌ๋„ ์ ์ˆ˜๋Š” 0๊ณผ 1์‚ฌ์ด์˜ ๊ฐ’์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. 

 ์ด์ œ ์ปค๋„ SVM์„ ํ›ˆ๋ จํ•ด XOR ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ๋ถ„ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์•ž์„  ์‚ฌ์ดํ‚ท๋Ÿฐ์˜ SVCํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , kernel='linear'์„ kernel='rbf'๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

svm = SVC(kernel='rbf', random_state=1, gamma=0.10, C=10.0)
svm.fit(X_xor, y_xor)
plot_decision_regions(X_xor, y_xor,
                      classifier=svm)

plt.legend(loc='upper left')
plt.tight_layout()
plt.show()

๊ทธ๋ฆผ 15. ์ปค๋„ SVM ๋ชจ๋ธ์ด ํ•™์Šตํ•œ ๊ฒฐ์ •๊ฒฝ๊ณ„

gamma = 0.1๋กœ ์ง€์ •ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ๋งˆ๊ฐ’์„ ํฌ๊ฒŒ ํ•˜๋ฉด ์„œํฌํŠธ ๋ฒกํ„ฐ์˜ ์˜ํ–ฅ, ๋ฒ”์œ„๊ฐ€ ์ค„์–ด๋“ค๊ณ  ๊ฒฐ์ •๊ฒฝ๊ณ„๊ฐ€ ๋” ์ƒ˜ํ”Œ์— ๊ฐ€๊นŒ์›Œ์ง€๊ณ  ๊ตฌ๋ถˆ๊ตฌ๋ถˆํ•ด์ง‘๋‹ˆ๋‹ค. ์ด๋Š” ๊ฐ€์šฐ์‹œ์•ˆ ๊ตฌ์˜ ํฌ๊ธฐ๋ฅผ ์ œํ•œํ•˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ์ดํ•ด๋ฅผ ์œ„ํ•ด ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ๋ณผ๊นŒ์š”?

svm = SVC(kernel='rbf', random_state=1, gamma=0.2, C=1.0)
svm.fit(X_train_std, y_train)

plot_decision_regions(X_combined_std, y_combined,
                      classifier=svm, test_idx=range(105, 150))
plt.scatter(svm.dual_coef_[0,:], svm.dual_coef_[1,:])
plt.xlabel('petal length [standardized]')
plt.ylabel('petal width [standardized]')
plt.legend(loc='upper left')
plt.tight_layout()
plt.show()

๊ทธ๋ฆผ 16. ๊ฐ๋งˆ ๊ฐ’์„ ์ž‘๊ฒŒ ํ–ˆ์„ ๋•Œ

 ๊ฐ๋งˆ ๊ฐ’์„ ์ž‘๊ฒŒ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ์ •๊ฒฝ๊ณ„๊ฐ€ ๋ถ€๋“œ๋Ÿฝ๊ณ  ํ‰ํ‰ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด์— ๊ฐ๋งˆ ๊ฐ’์„ ํฌ๊ฒŒํ•œ ๊ฒฐ๊ณผ๋„ ๋ณผ๊นŒ์š”?

svm = SVC(kernel='rbf', random_state=1, gamma=100.0, C=1.0)
svm.fit(X_train_std, y_train)

plot_decision_regions(X_combined_std, y_combined, 
                      classifier=svm, test_idx=range(105, 150))
plt.xlabel('petal length [standardized]')
plt.ylabel('petal width [standardized]')
plt.legend(loc='upper left')
plt.tight_layout()
plt.show()

๊ทธ๋ฆผ 17. ๊ฐ๋งˆ ๊ฐ’์„ ํฌ๊ฒŒ ํ–ˆ์„ ๋•Œ

 ๊ทธ๋ฆผ 17๊ณผ ๊ฐ™์€ ๊ทธ๋ž˜ํ”„๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ •๋ง ๊ฒฐ์ • ๊ฒฝ๊ณ„๊ฐ€ ๋ถ€๋“œ๋Ÿฝ์ง€ ๋ชปํ•˜๊ณ  ํ›ˆ๋ จ๋ฐ์ดํ„ฐ์— ์ง€๋‚˜์น˜๊ฒŒ ๋งž์ถฐ์ง„ ์˜ค๋ฒ„ํ”ผํŒ…์ด ์ผ์–ด๋‚ฌ๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ณธ ์  ์—†๋Š” ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ์—์„œ๋Š” ์ผ๋ฐ˜ํ™” ์˜ค์ฐจ๊ฐ€ ๋†’์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ๊ฐ๋งˆ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๊ณผ๋Œ€์ ํ•ฉ์„ ์กฐ์ ˆํ•˜๋Š” ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 


 ์ด๋ฒˆ ์„ธ์…˜์—์„œ๋Š” ๋งˆ์ง„๊ณผ ๋น„์„ ํ˜• ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ตœ๋Œ€ ๋งˆ์ง„์„ ์™œ ์›ํ•˜๋Š”์ง€, ์„ ํ˜•์ ์œผ๋กœ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์—†๋Š” ๋ฐ์ดํ„ฐ๋Š” ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋ถ„๋ฅ˜ํ•˜๋Š”์ง€ ๋– ์˜ค๋ฅด์‹œ๋‚˜์š”? ๊ทœ์ œ์— ๊ด€๋ จ๋œ ๊ฐ๋งˆ ํ•จ์ˆ˜์™€ ์Šฌ๋ž™๋ณ€์ˆ˜๋„ ๊ธฐ์–ต๋‚˜์‹œ์ฃ ? SVM๊ณผ ๋งˆ์ง„, ๊ทœ์ œ์˜ ๊ฐ๋งˆ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๊ธฐ์–ต๋‚˜์‹ ๋‹ค๋ฉด ๊ฑฐ์˜ ๋‹ค ํ•˜์…จ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์„ธ์…˜์—์„œ๋Š” ๊ฒฐ์ • ํŠธ๋ฆฌ ํ•™์Šต์— ๋Œ€ํ•ด์„œ ๋‹ค๋ฃจ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์„ธ์…˜์—์„œ ๋ด์š”!

 

728x90
์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'๐Ÿฌ ML & Data > ๐ŸŽซ ๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹] Session 10. ๋ˆ„๋ฝ ๋ฐ์ดํ„ฐ์™€ ๋ฒ”์ฃผํ˜• ๋ฐ์ดํ„ฐ ๋‹ค๋ฃจ๊ธฐ  (0) 2020.02.11
[๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹] Session 9. ๊ฒฐ์ • ํŠธ๋ฆฌ ํ•™์Šต  (0) 2020.02.11
[๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹]Session 7. ๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€(logistic regression)  (0) 2020.02.05
[๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹] Session 6. ์‚ฌ์ดํ‚ท๋Ÿฐ ์ž…๋ฌธ!  (0) 2020.02.03
[๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹] Session 5. ํผ์…‰ํŠธ๋ก ์˜ ๋ฉ”๊ฐ€ ์ง„ํ™”์™€ ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ•!  (0) 2020.02.01
'๐Ÿฌ ML & Data/๐ŸŽซ ๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹] Session 10. ๋ˆ„๋ฝ ๋ฐ์ดํ„ฐ์™€ ๋ฒ”์ฃผํ˜• ๋ฐ์ดํ„ฐ ๋‹ค๋ฃจ๊ธฐ
  • [๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹] Session 9. ๊ฒฐ์ • ํŠธ๋ฆฌ ํ•™์Šต
  • [๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹]Session 7. ๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€(logistic regression)
  • [๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹] Session 6. ์‚ฌ์ดํ‚ท๋Ÿฐ ์ž…๋ฌธ!
darly213
darly213
ํ˜ธ๋ฝํ˜ธ๋ฝํ•˜์ง€ ์•Š์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์–ด๋ณด์ž
  • darly213
    ERROR DENY
    darly213
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (97)
      • ๐Ÿฌ ML & Data (50)
        • ๐ŸŒŠ Computer Vision (2)
        • ๐Ÿ“ฎ Reinforcement Learning (12)
        • ๐Ÿ“˜ ๋…ผ๋ฌธ & ๋ชจ๋ธ ๋ฆฌ๋ทฐ (8)
        • ๐Ÿฆ„ ๋ผ์ดํŠธ ๋”ฅ๋Ÿฌ๋‹ (3)
        • โ” Q & etc. (5)
        • ๐ŸŽซ ๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹ (20)
      • ๐Ÿฅ Web (21)
        • โšก Back-end | FastAPI (2)
        • โ›… Back-end | Spring (5)
        • โ” Back-end | etc. (9)
        • ๐ŸŽจ Front-end (4)
      • ๐ŸŽผ Project (8)
        • ๐ŸงŠ Monitoring System (8)
      • ๐Ÿˆ Algorithm (0)
      • ๐Ÿ”ฎ CS (2)
      • ๐Ÿณ Docker & Kubernetes (3)
      • ๐ŸŒˆ DEEEEEBUG (2)
      • ๐ŸŒ  etc. (8)
      • ๐Ÿ˜ผ ์‚ฌ๋‹ด (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ๋ฐฉ๋ช…๋ก
    • GitHub
    • Notion
    • LinkedIn
  • ๋งํฌ

    • Github
    • Notion
  • ๊ณต์ง€์‚ฌํ•ญ

    • Contact ME!
  • 250x250
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
darly213
[๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹] Session 8. ์ตœ๋Œ€ ๋งˆ์ง„ ๋ถ„๋ฅ˜์™€ ๋น„์„ ํ˜• ๋ฌธ์ œ ํ’€๊ธฐ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”