[๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹] Session 11. ๋ฐ์ดํ„ฐ์…‹ ๋‚˜๋ˆ„๊ธฐ์™€ ํŠน์„ฑ ์Šค์ผ€์ผ๊ณผ ์„ ํƒ

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

 ์ด๋ฒˆ ์„ธ์…˜์—์„œ๋Š” ๋ง๋กœ๋งŒ ๋“ฃ๋˜ ํ›ˆ๋ จ ์„ธํŠธ์™€ ํ…Œ์ŠคํŠธ ์„ธํŠธ๋กœ ๋ฐ์ดํ„ฐ ์…‹์„ ๋ถ„ํ• ํ•˜๋Š” ์ž‘์—…์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ, ๊ทธ๋ฆฌ๊ณ  ํŠน์„ฑ ์Šค์ผ€์ผ์„ ์กฐ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 

1. ๋ฐ์ดํ„ฐ์…‹ ๋‚˜๋ˆ„๊ธฐ

 ์ด๋ฒˆ์—๋Š” ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ์ธ Wine ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ถ“๊ฝƒ ๋ฐ์ดํ„ฐ์—์„œ ๋ฒ—์–ด๋‚˜์‹  ๊ฑธ ์ถ•ํ•˜๋“œ๋ ค์š”! wine ๋ฐ์ดํ„ฐ๋Š” UCI ๋จธ์‹ ๋Ÿฌ๋‹ ์ €์žฅ์†Œ ์—์„œ ๋‹ค์šด๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒ๋‹ค์Šค๋ฅผ ์ด์šฉํ•ด ๋ฐ”๋กœ ์ฝ์–ด๋“œ๋ฆฌ๋Š” ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

df_wine = pd.read_csv('https://archive.ics.uci.edu/'
                      'ml/machine-learning-databases/wine/wine.data',
                      header=None)

# UCI ๋จธ์‹  ๋Ÿฌ๋‹ ์ €์žฅ์†Œ์—์„œ Wine ๋ฐ์ดํ„ฐ์…‹์„ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์—†์„ ๋•Œ
# df_wine = pd.read_csv('wine.data', header=None)


df_wine.columns = ['Class label', 'Alcohol', 'Malic acid', 'Ash',
                   'Alcalinity of ash', 'Magnesium', 'Total phenols',
                   'Flavanoids', 'Nonflavanoid phenols', 'Proanthocyanins',
                   'Color intensity', 'Hue', 'OD280/OD315 of diluted wines',
                   'Proline']

print('ํด๋ž˜์Šค ๋ ˆ์ด๋ธ”', np.unique(df_wine['Class label']))
df_wine.head()

๊ทธ๋ฆผ 1. ์™€์ธ ๋ฐ์ดํ„ฐ์…‹

 ์ƒ˜ํ”Œ์€ 1, 2, 3 ํด๋ž˜์Šค ์ค‘ ํ•˜๋‚˜์— ์†ํ•ด ์žˆ์Šต๋‹ˆ๋‹ค. ์™€์ธ ํ’ˆ์ข…์ด์ฃ . 

 ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜๋ˆŒ ๋•Œ๋Š” ์‚ฌ์ดํ‚ท๋Ÿฐ์˜ model_selection ๋ชจ๋“ˆ์˜ train_test_split ํ•จ์ˆ˜๋กœ ๋žœ๋คํ•˜๊ฒŒ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

from sklearn.model_selection import train_test_split

X, y = df_wine.iloc[:, 1:].values, df_wine.iloc[:, 0].values

X_train, X_test, y_train, y_test =\
    train_test_split(X, y, 
                     test_size=0.3, 
                     random_state=0, 
                     stratify=y)

 

 ์ธ๋ฑ์Šค 1๋ถ€ํ„ฐ 13๊นŒ์ง€๋ฅผ ๋ณ€์ˆ˜ X์— ํ• ๋‹นํ•˜๊ณ , ์ฒซ ๋ฒˆ์งธ ์—ด์˜ ํด๋ž˜์Šค ๋ ˆ์ด๋ธ”์€ ๋ณ€์ˆ˜ y์— ํ• ๋‹นํ•ด์ค๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  train_test_split ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ๋ถ„ํ• ํ•ฉ๋‹ˆ๋‹ค. test_size๊ฐ€ 0.3์ด๋ฏ€๋กœ ์ „์ฒด ๋ฐ์ดํ„ฐ์˜ 30%๊ฐ€ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๋กœ ํ• ๋‹น๋˜๊ณ  ๊ทธ ๋‚˜๋จธ์ง€๊ฐ€ ํ›ˆ๋ จ ์„ธํŠธ๋กœ ๋‚˜๋‰˜์–ด์ง‘๋‹ˆ๋‹ค. stratify์— y๋ฅผ ์ „๋‹ฌํ•˜๋ฉด ํ›ˆ๋ จ๊ณผ ํ…Œ์ŠคํŠธ ์„ธํŠธ์˜ ํด๋ž˜์Šค ๋น„์œจ์ด ์›๋ณธ๊ณผ ๋™์ผํ•˜๊ฒŒ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

 

2. ํŠน์„ฑ ์Šค์ผ€์ผ ๋งž์ถ”๊ธฐ

 ๊ฒฐ์ • ํŠธ๋ฆฌ์™€ ๋žœ๋ค ํฌ๋ ˆ์ŠคํŠธ๋Š” ํŠน์„ฑ ์Šค์ผ€์ผ ์กฐ์ •์— ๋Œ€ํ•ด์„œ ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†์ง€๋งŒ, ๊ฒฝ์‚ฌํ•˜๊ฐ• ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ๋ณด์…จ๋“ฏ ๋Œ€๋ถ€๋ถ„์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๋จธ์‹  ๋Ÿฌ๋‹์€ ํŠน์„ฑ ์Šค์ผ€์ผ์ด ๊ฐ™์„ ๋•Œ ์„ฑ๋Šฅ์ด ๋” ์ข‹์Šต๋‹ˆ๋‹ค. 

 ํŠน์„ฑ ์Šค์ผ€์ผ ์กฐ์ •์„ ํ•ด์•ผํ•˜๋Š” ์ด์œ ๋ฅผ ๊ฐ„๋‹จํ•œ ์˜ˆ๋ฅผ ๋“ค์–ด์„œ ์•Œ์•„๋ณผ๊นŒ์š”? ํŠน์„ฑ ๋‘ ๊ฐœ๊ฐ€ ์žˆ์„ ๋•Œ ํ•˜๋‚˜๋Š” 1์—์„œ 10์˜ ์Šค์ผ€์ผ์„, ํ•˜๋‚˜๋Š” 1์—์„œ 10๋งŒ์˜ ์Šค์ผ€์ผ์ด ์žˆ๋‹ค๋ฉด ์•„๋‹ฌ๋ฆฐ์˜ ์ œ๊ณฑ์˜ค์ฐจํ•จ์ˆ˜์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‘ ๋ฒˆ์งธ ํŠน์„ฑ์˜ ํฐ ์˜ค์ฐจ์— ๋งž์ถ”์–ด์„œ ๊ฐ€์ค‘์น˜๋ฅผ ์ตœ์ ํ™”ํ•˜๊ฒŒ ๋˜๊ฒ ์ฃ . 

 ํŠน์„ฑ ์Šค์ผ€์ผ์„ ๋งž์ถ”๋Š” ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ•์€ ์ •๊ทœํ™”(normalization)์™€ ํ‘œ์ค€ํ™”(standardization)์ž…๋‹ˆ๋‹ค. ์ •๊ทœํ™”๋Š” ๋Œ€๋ถ€๋ถ„ ํŠน์„ฑ ์Šค์ผ€์ผ์„ 0๊ณผ 1 ์‚ฌ์ด์— ๋งž์ถฅ๋‹ˆ๋‹ค. ์ตœ์†Œ-์ตœ๋Œ€ ์Šค์ผ€์ผ ๋ณ€ํ™˜(min-max scaling)์˜ ํŠน๋ณ€ํ•œ ๊ฒฝ์šฐ์ด์ฃ . 

๊ทธ๋ฆผ 2. ์ตœ์†Œ-์ตœ๋Œ€ ์Šค์ผ€์ผ ๋ณ€ํ™˜

 ์‹ฌํ”Œ x(i)์—์„œ ์ƒˆ๋กœ์šด ๊ฐ’์ธ x norm์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์ดํ‚ท๋Ÿฐ์— ๊ตฌํ˜„๋œ ์Šค์ผ€์ผ ๋ณ€ํ™˜ ๊ธฐ๋Šฅ์€ ์•„๋ž˜ ์ฝ”๋“œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

from sklearn.preprocessing import MinMaxScaler

mms = MinMaxScaler()
X_train_norm = mms.fit_transform(X_train)
X_test_norm = mms.transform(X_test)

 

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

๊ทธ๋ฆผ 3. ํ‘œ์ค€ํ™” ๊ณต์‹

์—ฌ๊ธฐ์„œ ๋ฎค๋Š” ํŠน์„ฑ ์ƒ˜ํ”Œ์˜ ํ‰๊ท ์ด๊ณ  ์‹œ๊ทธ๋งˆ๋Š” ํ‘œ์ค€ ํŽธ์ฐจ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆผ 4์˜ ํ‘œ๋Š” ํ‘œ์ค€ํ™”์™€ ์ตœ์†Œ-์ตœ๋Œ€ ์ •๊ทœํ™”์˜ ์ฐจ์ด๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 4. ํ‘œ์ค€ํ™”์™€ ์ตœ์†Œ-์ตœ๋Œ€ ์ •๊ทœํ™” ๋น„๊ต

 ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

#์ตœ๋Œ€์ตœ์†Œ

ex = np.array([0, 1, 2, 3, 4, 5])

print('ํ‘œ์ค€ํ™”:', (ex - ex.mean()) / ex.std())
print('์ •๊ทœํ™”:', (ex - ex.min()) / (ex.max() - ex.min()))

#ํ‘œ์ค€ํ™”

from sklearn.preprocessing import StandardScaler

stdsc = StandardScaler()
X_train_std = stdsc.fit_transform(X_train)
X_test_std = stdsc.transform(X_test)

 

3. ๋ชจ๋ธ ๋ณต์žก๋„ ์ œํ•œ์„ ์œ„ํ•œ L1๊ณผ L2 ๊ทœ์ œ

 ์ด๋ฒˆ์—๋Š” ๊ณผ๋Œ€์ ํ•ฉ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด, ์ผ๋ฐ˜ํ™” ์˜ค์ฐจ๋ฅผ ๊ฐ์†Œ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ํŠน์„ฑ ์„ ํƒ์„ ํ†ตํ•œ ์ฐจ์› ์ถ•์†Œ๋กœ ๊ฐ„๋‹จํ•œ ๋ชจ๋ธ์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 ์•ž์„  ์„ธ์…˜์— ์žˆ์—ˆ๋˜ L2 ๊ทœ์ œ(L2 regularization)์€ ๊ฐœ๋ณ„ ๊ฐ€์ค‘์น˜ ๊ฐ’์„ ์ œํ•œํ•ด ๋ชจ๋ธ ๋ณต์žก๋„๋ฅผ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•์ด๋ผ๋Š” ๊ฒƒ์— ๋Œ€ํ•ด์„œ ๊ธฐ์–ต๋‚˜์‹œ๋‚˜์š”? ๊ฐ€์ค‘์น˜ ๋ฒกํ„ฐ w์˜ L2 ๊ทœ์ œ๋Š” ๊ทธ๋ฆผ 5์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 5. L2 ๊ทœ์ œ

 ๋ชจ๋ธ ๋ณต์žก๋„๋ฅผ ์ค„์ด๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ L1 ๊ทœ์ œ(L1 regularization)์ž…๋‹ˆ๋‹ค. L1 ๊ทœ์ œ๋Š” L2 ๊ทœ์ œ์˜ ๊ฐ€์ค‘์น˜ ์ œ๊ณฑ์„ ์ ˆ๋Œ€๊ฐ’์œผ๋กœ ๋ฐ”๊พผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. L2์™€๋Š” ๋‹ค๋ฅด๊ฒŒ L1์€ ํฌ์†Œํ•œ ํŠน์„ฑ ๋ฐฑํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด ๋Œ€๋ถ€๋ถ„์˜ ํŠน์„ฑ ๊ฐ€์ค‘์น˜๊ฐ€ 0์ด ๋ฉ๋‹ˆ๋‹ค. 

๊ทธ๋ฆผ 6. L1 ๊ทœ์ œ

 ๋จผ์ €, L2 ๊ทœ์ œ์˜ ๊ธฐํ•˜ํ•™์ ์ธ ํ•ด์„๋ถ€ํ„ฐ ์•Œ์•„๋ณผ๊นŒ์š”? L2๊ทœ์ œ๋Š” ๋น„์šฉ ํ•จ์ˆ˜์— ํŒจ๋„ํ‹ฐ๋ฅผ ๋ถ€์—ฌํ•ด ๊ฐ€์ค‘์น˜ ๊ฐ’์„ ๋น„์šฉํ•จ์ˆ˜์˜ ๋ชจ๋ธ์— ๋น„ํ•ด ์ž‘๊ฒŒ ๋งŒ๋“œ๋Š” ํšจ๊ณผ๋ฅผ ๋ƒ…๋‹ˆ๋‹ค. ๋‘ ๊ฐœ์˜ ๊ฐ€์ค‘์น˜ w1๊ณผ w2์— ๋Œ€ํ•œ ๋ณผ๋กํ•œ ๋น„์šฉํ•จ์ˆ˜ ๋“ฑ๊ณ ์„ ์ด ๊ทธ๋ฆผ 6๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์•„๋‹ฌ๋ฆฐ์˜ ์ œ๊ณฑ ์˜ค์ฐจํ•ฉ ๋น„์šฉํ•จ์ˆ˜๊ฐ€ ๊ตฌ ๋ชจ์–‘์ด๋ผ ๊ทธ๋ฆฌ๊ธฐ ์‰ฌ์šธ ๊ฒ๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 6. ๊ฐ€์ค‘์น˜ ํ‰๋ฉด์˜ ๋ณผ๋ก ๋น„์šฉํ•จ์ˆ˜ ๋“ฑ๊ณ ์„ 

 ์šฐ๋ฆฌ์˜ ๋ชฉํ‘œ๋Š” ๋น„์šฉํ•จ์ˆ˜๊ฐ€ ์ตœ์†Œ๊ฐ€ ๋˜๋Š” ๊ฐ€์ค‘์น˜ ๊ฐ’์„ ์ฐพ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํƒ€์›์˜ ์ค‘์‹ฌ ํฌ์ธํŠธ๊ฐ€ ๋˜๊ฒ ์ฃ . ๊ทœ์ œ๋Š” ๋” ์ž‘์€ ๊ฐ€์ค‘์น˜๋ฅผ ์–ป๊ธฐ ์œ„ํ•œ ํŒจ๋„ํ‹ฐ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํฐ ๊ฐ€์ค‘์น˜๋ฅผ ์ œํ•œํ•˜๋Š” ๊ฒƒ์ด์ฃ . ๊ทœ์ œ ํŒŒ๋ผ๋ฏธํ„ฐ์ธ ๋žŒ๋‹ค๋กœ ๊ทœ์ œ์˜ ๊ฐ•๋„๋ฅผ ํฌ๊ฒŒ ํ•˜๋ฉด ๊ฐ€์ค‘์น˜๋Š” 0์— ๊ฐ€๊นŒ์›Œ์ง€๊ณ  ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ์— ๋ชจ๋ธ์ด ์˜์กดํ•˜๋Š” ์ •๋„๊ฐ€ ๋‚ฎ์•„์ ธ ์˜ค๋ฒ„ํ”ผํŒ…์„ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 7. L2 ๊ทœ์ œ์™€ ๋น„์šฉํ•จ์ˆ˜

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

 ๋‘ ๋ฒˆ์งธ๋Š” L1 ๊ทœ์ œ์ž…๋‹ˆ๋‹ค. L1 ํŒจ๋„ํ‹ฐ๋Š” ๊ฐ€์ค‘์น˜ ์ ˆ๋Œ“๊ฐ’์˜ ํ•ฉ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์ด์•„๋ชฌ๋“œ์˜ ์ œํ•œ ๋ฒ”์œ„๋ฅผ ๊ทธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. L1 ํ•ญ์€ ์ด์ฐจ์‹์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆผ 8์„ ๋ณผ๊นŒ์š”?

๊ทธ๋ฆผ 8. L1 ๊ทœ์ œ์™€ ๋น„์šฉ ํ•จ์ˆ˜

 w1์ด 0์ผ ๋•Œ ๋น„์šฉํ•จ์ˆ˜์˜ ๋“ฑ๊ณ ์„ ์ด ๋‹ค์ด์•„๋ชฌ๋“œ์™€ ๋งŒ๋‚˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. L2์™€ ๋‹ฌ๋ฆฌ L1์€ ๋‹ค์ด์•„๋ชฌ๋“œ ํ˜•์ด๋ผ ์ตœ์ ์ ์€ ์ถ•์— ๊ฐ€๊นŒ์šธ ํ™•๋ฅ ์ด ๋†’๊ณ , ์ด๊ฒŒ ํฌ์†Œ์„ฑ์ด ๋‚˜ํƒ€๋‚˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. ์‚ฌ์ดํ‚ท๋Ÿฐ์—์„œ L1 ๊ทœ์ œ๋ฅผ ์ง€์›ํ•˜๋Š” ๋ชจ๋ธ์€ penalty ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ l1์œผ๋กœ ์ง€์ •ํ•ด ํฌ์†Œํ•œ ๋ชจ๋ธ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

from sklearn.linear_model import LogisticRegression
LogisticRegression(solver='liblinear', penalty='l1')

 

 ์ „์ฒ˜๋ฆฌ๋œ Wine ๋ฐ์ดํ„ฐ์— L1 ๊ทœ์ œ๊ฐ€ ์žˆ๋Š” ๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

from sklearn.linear_model import LogisticRegression

lr = LogisticRegression(solver='liblinear', multi_class='auto', 
                        penalty='l1', C=1.0, random_state=42)
# C=1.0์ด ๊ธฐ๋ณธ๊ฐ’
lr.fit(X_train_std, y_train)
print('ํ›ˆ๋ จ ์ •ํ™•๋„:', lr.score(X_train_std, y_train))
print('ํ…Œ์ŠคํŠธ ์ •ํ™•๋„:', lr.score(X_test_std, y_test))

 

 ํ›ˆ๋ จ๊ณผ ํ…Œ์ŠคํŠธ ์ •ํ™•๋„๊ฐ€ ๋ชจ๋‘ 1.0์œผ๋กœ 100%์ž„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์ฃ ? ๋ชจ๋ธ์ด ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. lr.intercept_ ์†์„ฑ์œผ๋กœ ์ ˆํŽธ์„ ํ™•์ธํ•ด๋ณด๋ฉด ๊ฐ’ ์„ธ ๊ฐœ๊ฐ€ ๋“  ๋ฐฐ์—ด์ด ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

 slover = 'liblinear', multi_class = 'auto'๋กœ ์ดˆ๊ธฐํ™”ํ•œ LogisticRegression ๊ฐ์ฒด๋ฅผ ๋‹ค์ค‘ ํด๋ž˜์Šค ๋ฐ์ดํ„ฐ์…‹์— ์ ์šฉํ•˜๋ฉด OvR ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ๋Š” ํด๋ž˜์Šค 1๊ณผ 2, 3์„ ๊ตฌ๋ถ„ํ•˜๋Š” ๋ชจ๋ธ์— ์†ํ•œ ๊ฒƒ์ด๊ณ , ๋‘ ๋ฒˆ์งธ๋Š” ํด๋ž˜์Šค 2๋ฅผ 1, 3๊ณผ ๊ตฌ๋ถ„ํ•˜๋Š” ๋ชจ๋ธ์— ์†ํ•œ ๊ฒƒ์ด๋ฉฐ ์„ธ ๋ฒˆ์งธ๋Š” ํด๋ž˜์Šค 3์„ 1, 2์™€ ๊ตฌ๋ถ„ํ•˜๋Š” ๋ชจ๋ธ์˜ ์ ˆํŽธ์ž…๋‹ˆ๋‹ค.

lr.coef_ ์†์„ฑ์˜ ๊ฐ€์ค‘์น˜๋Š” ํด๋ž˜์Šค๋งˆ๋‹ค ๋ฒกํ„ฐ ํ•˜๋‚˜์”ฉ ์„ธ ๊ฐœ์˜ ํ–‰์ด ์žˆ๋Š” ๊ฐ€์ค‘์น˜ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 9. lr.coef_

 ๊ฐ ํ–‰์€ 13๊ฐœ ๊ฐ€์ค‘์น˜๋ฅผ ๊ฐ€์ง€๊ณ , ๊ฐ ๊ฐ€์ค‘์น˜์™€ 13์ฐจ์›์˜ Wine ๋ฐ์ดํ„ฐ์…‹์˜ ํŠน์„ฑ์„ ๊ณฑํ•ด ์ตœ์ข… ์ž…๋ ฅ์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 10. ์ตœ์ข…์ž…๋ ฅ

 ์ด์ œ ๊ทœ์ œ ๊ฐ•๋„๋ฅผ ๋‹ฌ๋ฆฌํ•ด ํŠน์„ฑ ๊ฐ€์ค‘์น˜ ๋ณ€ํ™”๋ฅผ ๊ทธ๋ž˜ํ”„๋กœ ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

import matplotlib.pyplot as plt

fig = plt.figure()
ax = plt.subplot(111)
    
colors = ['blue', 'green', 'red', 'cyan', 
          'magenta', 'yellow', 'black', 
          'pink', 'lightgreen', 'lightblue', 
          'gray', 'indigo', 'orange']

weights, params = [], []
for c in np.arange(-4., 6.):
    lr = LogisticRegression(solver='liblinear', multi_class='auto',
                            penalty='l1', C=10.**c, random_state=0)
    lr.fit(X_train_std, y_train)
    weights.append(lr.coef_[1])
    params.append(10**c)

weights = np.array(weights)

for column, color in zip(range(weights.shape[1]), colors):
    plt.plot(params, weights[:, column],
             label=df_wine.columns[column + 1],
             color=color)
plt.axhline(0, color='black', linestyle='--', linewidth=3)
plt.xlim([10**(-5), 10**5])
plt.ylabel('weight coefficient')
plt.xlabel('C')
plt.xscale('log')
plt.legend(loc='upper left')
ax.legend(loc='upper center', 
          bbox_to_anchor=(1.38, 1.03),
          ncol=1, fancybox=True)
plt.show()

๊ทธ๋ฆผ 11. ๊ทœ์ œ ๊ฐ•๋„์— ๋”ฐ๋ฅธ ๊ฐ€์ค‘์น˜ ๋ณ€ํ™”

 


์ด๋ฒˆ ์„ธ์…˜์—์„œ๋Š” ํ›ˆ๋ จ ์„ธํŠธ์™€ ํ…Œ์ŠคํŠธ ์„ธํŠธ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜๋ˆ„๋Š” ๋ฐฉ๋ฒ•, ํŠน์„ฑ ์Šค์ผ€์ผ์„ ๋งž์ถ”๋Š” ๋ฐฉ๋ฒ•๊ณผ L1, L2 ๊ทœ์ œ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค. L1, L2 ๊ทœ์ œ๋Š” ์ €๋„ ์ •๋ง ์–ด๋ ค์› ๋Š”๋ฐ์š”, ์ถ”ํ›„์— ์ œ๊ฐ€ ๋” ์ดํ•ด๋ฅผ ์ž˜ํ•˜๊ฒŒ ๋˜๋ฉด ์•ž๋ถ€๋ถ„์— ์ถ”๊ฐ€์ ์œผ๋กœ ์„ค๋ช…์„ ๋ง๋ถ™์ด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค(2020.02.13). ์ˆ˜๊ณ ํ•˜์…จ์Šต๋‹ˆ๋‹ค!

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

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

[๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹] Session 13. ๋น„์ง€๋„ ์ฐจ์›์ถ•์†Œ! PCA!  (0) 2020.02.18
[๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹] Session 12. ์ˆœ์ฐจ ํŠน์„ฑ ์„ ํƒ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๋žœ๋ค ํฌ๋ ˆ์ŠคํŠธ ํŠน์„ฑ ์ค‘์š”๋„ ์‚ฌ์šฉ  (0) 2020.02.16
[๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹] Session 10. ๋ˆ„๋ฝ ๋ฐ์ดํ„ฐ์™€ ๋ฒ”์ฃผํ˜• ๋ฐ์ดํ„ฐ ๋‹ค๋ฃจ๊ธฐ  (0) 2020.02.11
[๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹] Session 9. ๊ฒฐ์ • ํŠธ๋ฆฌ ํ•™์Šต  (0) 2020.02.11
[๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹] Session 8. ์ตœ๋Œ€ ๋งˆ์ง„ ๋ถ„๋ฅ˜์™€ ๋น„์„ ํ˜• ๋ฌธ์ œ ํ’€๊ธฐ  (0) 2020.02.07
'๐Ÿฌ ML & Data/๐ŸŽซ ๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹] Session 13. ๋น„์ง€๋„ ์ฐจ์›์ถ•์†Œ! PCA!
  • [๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹] Session 12. ์ˆœ์ฐจ ํŠน์„ฑ ์„ ํƒ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๋žœ๋ค ํฌ๋ ˆ์ŠคํŠธ ํŠน์„ฑ ์ค‘์š”๋„ ์‚ฌ์šฉ
  • [๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹] Session 10. ๋ˆ„๋ฝ ๋ฐ์ดํ„ฐ์™€ ๋ฒ”์ฃผํ˜• ๋ฐ์ดํ„ฐ ๋‹ค๋ฃจ๊ธฐ
  • [๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹] Session 9. ๊ฒฐ์ • ํŠธ๋ฆฌ ํ•™์Šต
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 11. ๋ฐ์ดํ„ฐ์…‹ ๋‚˜๋ˆ„๊ธฐ์™€ ํŠน์„ฑ ์Šค์ผ€์ผ๊ณผ ์„ ํƒ
์ƒ๋‹จ์œผ๋กœ

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