์ฐ๋ฆฌ๋ ํ๊ท๋ฅผ ํตํด Loss ํจ์๋ฅผ ์ต์๊ฐ์ผ๋ก ๋ง๋๋ , β1๋ฅผ ์ฝ๊ฒ ๊ตฌํด์ค ์ ์๋ค.
๐ Loss ํจ์๋? ์ค์ ๊ฐ๊ณผ ์์ธก ๊ฐ ์ฐจ์ด์ ์ ๊ณฑ์ ํฉ์ ๋งํ๋ค.
โ๏ธ Loss ํจ์๊ฐ ์์ ์๋ก ์ข์ ๋ชจ๋ธ์ด๋ผ๊ณ ํ ์ ์๋ค.

์์ ๊ฐ์ ์ต์๋ก ํ๊ธฐ ์ํด์๋ Gradient ๊ฐ์ ๊ณ์ฐํ๋ ๊ฒฝ์ฌ ํ๊ฐ๋ฒ์ ์ด์ฉํ๋ฉด ๋๋๋ฐ, ์ด๋ ๋์ค์ ๋ค๋ค๋ณด๊ฒ ๋ค.
1. ๋จ์ ์ ํ ํ๊ท
X = [8.70153760, 3.90825773, 1.89362433, 3.28730045, 7.39333004, 2.98984649, 2.25757240, 9.84450732, 9.94589513, 5.48321616]
Y = [5.64413093, 3.75876583, 3.87233310, 4.40990425, 6.43845020, 4.02827829, 2.26105955, 7.15768995, 6.29097441, 5.19692852]
๋ค์๊ณผ ๊ฐ์ด ๋ฐ์ดํฐ ์ ์ด ์ฃผ์ด์ง๋ค๊ณ ํ์.
ํ์ฌ๋ ๋จ์ ์ ํ ํ๊ท ์ด๊ธฐ์ X ๋ณ์๊ฐ ํ๋๋ง ์กด์ฌํ์ง๋ง, ๋ค์ค ์ ํ ํ๊ท ๋ถํฐ๋ ์ฌ๋ฌ๊ฐ์ X variables ๊ฐ ์กด์ฌํ๋ฏ๋ก
์ฐ๋ฆฌ๋ X ๊ฐ๋ค์ DataFrame์ ์ ์ฅํ๊ณ ,
Y ๊ฐ๋ค์ label ์ ๊ฐ๋ค๋ก ํ๋์ column ๋ง์ด ์กด์ฌํ๊ธฐ์ series์ ์ ์ฅํด ์ค ๊ฒ์ด๋ค.
์๋๋ series ๋ฅผ ์ ์ธํ๋ 2๊ฐ์ง ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช ํด ๋์ ๊ธ์ด๋ค.
| Series ์ ์ธ์์ ์ธ๋ฑ์ค ๊ฐ์ ๋ฐ๋ก ๋ฃ์ง ์๊ณ ๋ฐ์ดํฐ ๊ฐ ๋ง์ ๋ฃ์ด์ฃผ๋ฉด ์ธ๋ฑ์ค์ ์๋์ผ๋ก 0๋ถํฐ ์์ํ๋ ์์ ์ ์๋ก ์ ์๋์ด ๋ง๋ค์ด์ง๋ค. | data_list = [1, 2, 3, 4, 5] series = Series(data=data_list) series 0 1 1 2 2 3 3 4 4 5 dtype: int64 |
| ๋ง์ฝ ์ธ๋ฑ์ค๋ ๊ฐ์ด ์ ์๋ฅผ ํด์ฃผ๋ฉด, ์ธ๋ฑ์ค์ ๋ฐ์ดํฐ ๊ฐ์ด ๊ฐ์ด ์ ์๋์ด ๋ง๋ค์ด์ง๋ค. | data_list = [1, 2, 3, 4, 5] index_list = ["a", "b", "c", "d", "e"] series = Series(data=data_list, index=index_list) series a 1 b 2 c 3 d 4 e 5 dtype: int64 |
์ถ์ฒ: https://nov19.tistory.com/108 [๊ฐ๋ฐ๊ฐ๋ฐ:ํฐ์คํ ๋ฆฌ]
"""
1. X์ ํํ๋ฅผ ๋ณํํ์ฌ train_X์ ์ ์ฅํฉ๋๋ค.
"""
train_X = pd.DataFrame(X, columns=['X'])
"""
2. Y์ ํํ๋ฅผ ๋ณํํ์ฌ train_Y์ ์ ์ฅํฉ๋๋ค.
"""
train_Y = pd.Series(data = Y)
ํ์ sklearn ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ 'LinearRegression' ํจ์๋ฅผ ์ด์ฉํ์ฌ, ์ ํ ํ๊ท ํจ์๋ฅผ ๊ตฌํด์ฃผ๋๋ก ํ ๊ฒ์ด๋ค.
๋จผ์ lrmodel ์ ๋ชจ๋ธ ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํ ํด์ค๋ค.
lrmodel = LinearRegression()
ํ์ 'fit' ํจ์๋ฅผ ์ด์ฉํ์ฌ ์ด๊ธฐํ ๋ ๊ฐ์ฒด์ ํ์ต์ ํ์ํ ๋ฐ์ดํฐ๋ค์ ์ ๋ ฅํ์ฌ ํ์ต์ ์ํํด์ค๋ค.
lrmodel.fit(train_X, train_Y)
๋ง๋ ํจ์๋ฅผ ์ขํ ํ๋ฉด์ ์ ๋ค๊ณผ ํจ๊ป ์๊ฐํํด์ฃผ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ํ๋๋ค.

2. ๋ค์ค ์ ํ ํ๊ท

๋ค์ค ์ ํ ํ๊ท์ ๋ฐ์ดํฐ์ ์ฌ๋ฌ ๋ณ์(features) X๋ฅผ ์ด์ฉํด์ ๊ฒฐ๊ณผ Y๋ฅผ ์์ธกํ๋ ๋ชจ๋ธ์ด๋ค.
๊ด๊ณ ๋น์ฉ์ ๋ฐ๋ฅธ ์์ต๋ฅ ์ ๋จธ์ ๋ฌ๋์ ํตํด ์์ธกํ๋ค๋ฉด, ์ด๋ค ๊ด๊ณ ํ๋ซํผ์ด ์ค์ํ ์์์ธ์ง ํ๋ณ์ด ๊ฐ๋ฅํ๋ค.
FaceBook, TV, Newspaper ๊ด๊ณ ์ ๋ํด ๋น์ฉ ๋๋น Sales ๋ฐ์ดํฐ๊ฐ ์ฃผ์ด์ก์ ๋ ์ด๋ฅผ ๋ค์ค ์ ํ ํ๊ท๋ก ๋ถ์ํด๋ณผ ๊ฒ์ด๋ค.
๋จผ์ X์ y์ ๋ค์ด๊ฐ ๋ณ์ ๊ฐ๋ค์ ๊ฒฐ์ ํด์ค๋ค.
# ์
๋ ฅ ๋ณ์๋ก ์ฌ์ฉํ์ง ์๋ column์ ์ ๊ฑฐํด์ค๋ค.
df = df.drop(columns=['Unnamed: 0'])
# drop ํจ์๋ฅผ ์ด์ฉํ์ฌ X์ y์ ๋ค์ด๊ฐ ๋ณ์ ๊ฐ๋ค์ ๊ฒฐ์ ํด์ค๋ค.
X = df.drop(columns=['Sales'])
Y = df['Sales']
ํ์, ์ง๋ ํฌ์คํ ๋ ๋ค๋ฃฌ train_test_spliit ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํ์ต์ฉ๊ณผ ํ๊ฐ์ฉ ๋ฐ์ดํฐ๋ก ๋ถ๋ฆฌ์์ผ์ฃผ๋ฉด ๋๋ค.
train_X, test_X, train_Y, test_Y = train_test_split(X, Y, test_size=0.2, random_state=42)
trainํ ๋ฐ์ดํฐ์ testํ ๋ฐ์ดํฐ์ ๋น์จ์ 8:2๋ก ์ค์ ํด์ฃผ์๋ค.
๋ค์ค ์ ํ ํ๊ท ๋ชจ๋ธ์ ์ด๊ธฐํํ๊ณ ํ์ตํ๋ ๋ฐฉ์์ ๋จ์ ์ ํ ํ๊ท ๋์ ๊ฐ๋ค.
lrmodel = LinearRegression()
lrmodel.fit(train_X, train_Y)
LinearRegression ํจ์๋ฅผ ํตํด ์ด๊ธฐํ ์์ผ์ค ํ์, ์ฐ๋ฆฌ๊ฐ ๊ฐ๊ณตํด ๋์ ํ์ต์ฉ ๋ฐ์ดํฐ๋ค์ fit ํด์ฃผ๋ฉด ๋๋ค.

lrmodel์ ๋ด๊ธด ๋ค์ค ์ ํ ํ๊ท ํจ์์ ํํ๋ ์์ ์์ผ๋ก ํํ๋ ๊ฒ์ด๋ค.
(X1 = FB, X2 = TV, X3 = Newspaper)
์ด๋, ๊ฐ ๋ณ์ ์์ ๋ถ์ ๊ณ์์ธ ๋ฒ ํ ๊ฐ๋ค์ด ์ผ๋ง์ธ์ง๋ฅผ ์์๋ณด๊ณ ์ถ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
intercept_ : ๋ค์ค ์ ํ ํ๊ท ํจ์์
beta_0 = lrmodel.intercept_ # y์ ํธ (๊ธฐ๋ณธ ํ๋งค๋)
beta_1 = lrmodel.coef_[0] # 1๋ฒ์งธ ๋ณ์์ ๋ํ ๊ณ์ (ํ์ด์ค๋ถ)
beta_2 = lrmodel.coef_[1] # 2๋ฒ์งธ ๋ณ์์ ๋ํ ๊ณ์ (TV)
beta_3 = lrmodel.coef_[2] # 3๋ฒ์งธ ๋ณ์์ ๋ํ ๊ณ์ (์ ๋ฌธ)
pred_X = lrmodel.predict(test_X)

3. ํ๊ท ํ๊ฐ ์งํ
์ฐ๋ฆฌ๊ฐ ํ๊ท๋ฅผ ํตํด ๊ตฌํด์ค ์์ด ์ด๋์ ๋์ ์ ํ๋์ ์ฑ๋ฅ์ธ์ง๋ฅผ ํ๋จํด์ฃผ๊ธฐ ์ํด ์ฌ๋ฌ๊ฐ์ง ํ๊ฐ ์งํ๋ค์ด ์กด์ฌํ๋ค.
1. RSS
ํ๊ท ์ ๊ณฑ ์ค์ฐจ๋ก, ์ค์ ๊ฐ๊ณผ ์์ธก ๊ฐ์ ๋จ์ ์ค์ฐจ์ ์ ๊ณฑ ํฉ์ด๋ค. ๊ฐ์ด ์์์๋ก ๋ชจ๋ธ์ ์ฑ๋ฅ์ด ๋๋ค๊ณ ํ ์ ์๋ค.

๊ทธ๋ฌ๋ ์ค์ฐจ๋ฅผ ๊ทธ๋๋ก ์ด์ฉํ๊ธฐ ๋๋ฌธ์ ์ ๋ ฅ ๊ฐ์ ์ ๋์ ์ธ ํฌ๊ธฐ์ ์์กด์ ์ด๋ค.
ex) label ๊ฐ์ด 10์ ๋์ธ ๊ฒ๊ณผ, 1000์ ๋์ธ ๊ฒฝ์ฐ์ ๋ํด ์ ๋์ ์ธ ํฌ๊ธฐ๊ฐ ํด์๋ก ์ค์ฐจ๋ ์ปค์ง๊ธฐ์, ๋จ์ ์ค์ฐจ์ ์ ๊ณฑ ํฉ๋ ์ปค์ง๋ค.
2. MSE
ํ๊ท ์ ๊ณฑ ์ค์ฐจ๋ก, RSS์์ ๋ฐ์ดํฐ ์ ๋งํผ์ผ๋ก๋ง ๋๋์ด์ค ๊ฐ์ด๋ค. ๊ฐ์ด ์์์๋ก ๋ชจ๋ธ์ ์ฑ๋ฅ์ด ๋๋ค๊ณ ํ ์ ์๋ค.

์ ์ฒด๋ฅผ ๋ฐ์ดํฐ ์๋งํผ์ผ๋ก ๋๋์ด์ค ํ๊ท ๊ฐ์ด๊ธฐ ๋๋ฌธ์, ๋ฐ์ดํฐ๋ค ์ค ํฌ๊ฒ ๋จ์ด์ง ๊ฐ์ ๋ฐ๋ผ ๋ฏผ๊ฐํ๊ฒ ๋ณํ๋ค.
3. MAE
ํ๊ท ์ ๋๊ฐ ์ค์ฐจ๋ก, ์ค์ ๊ฐ๊ณผ ์์ธก ๊ฐ์ ์ค์ฐจ์ ์ ๋๊ฐ์ ํ๊ท ์ด๋ค. ๊ฐ์ด ์์์๋ก ๋ชจ๋ธ์ ์ฑ๋ฅ์ด ๋๋ค๊ณ ํ ์ ์๋ค.

์ด๋ํ, MSE์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ ์ฒด๋ฅผ ๋ฐ์ดํฐ ์๋งํผ์ผ๋ก ๋๋์ด์ค ํ๊ท ๊ฐ์ด๊ธฐ ๋๋ฌธ์, ๋ฐ์ดํฐ๋ค ์ค ํฌ๊ฒ ๋จ์ด์ง ๊ฐ์ ๋ฐ๋ผ ๋ฏผ๊ฐํ๊ฒ ๋ณํ๋ค.
4. R² (๊ฒฐ์ ๊ณ์)
ํ๊ท ๋ชจ๋ธ์ ์ค๋ช ๋ ฅ์ ํํํ๋ ์งํ๋ก 1์ ๊ฐ๊น์ธ ์๋ก ์ฑ๋ฅ์ด ๋๋ค๊ณ ํ ์ ์๋ค.

์ฌ๊ธฐ์ TSS ๋ ๋ฐ์ดํฐ ํ๊ท ๊ฐ๊ณผ ์ค์ ๊ฐ ์ฐจ์ด์ ์ ๊ณฑ์ ํฉ์ด๋ค. (๋ถ์ฐ)

R² ์ ์ค์ฐจ๊ฐ ์์์๋ก 1์ ๊ฐ๊น์ด ๊ฐ์ ๊ฐ์ง๋ค. ๊ฐ์ด 0์ผ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ์ ํ๊ท ๊ฐ์ ์ถ๋ ฅํ๋ ์ง์ ๋ชจ๋ธ์ ์๋ฏธํ๋ค.

์์ ๊ฐ์ด ๋์จ ๊ฒฝ์ฐ์๋, ํ๊ท ๊ฐ ์์ธก๋ณด๋ค ์ฑ๋ฅ์ด ์ข์ง ์์ ๋ชจ๋ธ์ด๊ธฐ์ ์ค๊ณ๋ฅผ ๋ค์ ํด๋ณผ ํ์๊ฐ ์์ ๊ฒ์ด๋ค.
์์ Sales ์์ธก ๋ชจ๋ธ์ ์ฑ๋ฅ์ ํ๊ฐํ๊ธฐ ์ํด ๋ค์ํ ํ๊ฐ์งํ๋ฅผ ์ฌ์ฉํด์ ๋น๊ต๋ฅผ ํด๋ณด์๋ค.
๋จผ์ , MSE์ MAE ๊ฐ์ด๋ค.
MSE_train = mean_squared_error(train_Y, pred_train)
MAE_train = mean_absolute_error(train_Y, pred_train)
print('MSE_train : %f' % MSE_train)
print('MAE_train : %f' % MAE_train)
mean_squared_error(y_true, y_pred) : MSE ๊ฐ ๊ณ์ฐ
mean_absolute_error(y_true, y_pred) : MAE ๊ฐ ๊ณ์ฐ
๋ค์์, R² ๊ณ์ฐ์ด๋ค.
R2_train = r2_score(train_Y, pred_train)
print('R2_train : %f' % R2_train)
R_2_train(y_true, y_pred) : R² ๊ฐ ๊ณ์ฐ
์ค๋์ ํ๊ท ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ๊ณ ํ๊ฐํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด์๋ค.
๋ค์ ์๊ฐ์๋ ๋ถ๋ฅ ์๊ณ ๋ฆฌ์ฆ(์์ฌ๊ฒฐ์ ๋๋ฌด) ์ ๋ํด ํฌ์คํ ํด๋ณด๊ฒ ๋ค! ใ(ใป∀ใป๏ผ )
'๐ ์ธ๊ณต์ง๋ฅ, ๋จธ์ ๋ฌ๋' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [๋จธ์ ๋ฌ๋ ๊ธฐ์ด] ๋ฐ์ดํฐ ๋ถ๋ฆฌํ๊ธฐ (0) | 2022.09.06 |
|---|---|
| [๋จธ์ ๋ฌ๋ ๊ธฐ์ด] ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌํ๊ธฐ (0) | 2022.08.30 |
| [๋จธ์ ๋ฌ๋ ๊ธฐ์ด] ์์นํ ์๋ฃ์ ์์ฝ (0) | 2022.08.17 |
| [๋จธ์ ๋ฌ๋ ๊ธฐ์ด] ์๋ฃ ํํ์ ์ดํด(๋ฒ์ฃผํ ์๋ฃ_๋์๋ถํฌํ) (0) | 2022.08.05 |