๐ฒ ์ ์ (RandomForest)
๊ฒฐ์ ํธ๋ฆฌ์ ๋จ์ ์(์ค๋ฒํผํ ) ๋ณด์์์ผ์ค ์์ ๋ชจ๋ธ
๋๋ค์ผ๋ก ์์ฑํ ๋ง์ ๋๋ฌด๋ก ์ด๋ฃจ์ด์ ธ ์์ธก์ ํ๊ธฐ ๋๋ฌธ์ ๋ง์น ์ฒ์ฒ๋ผ ๋ณด์ด๊ธฐ ๋๋ฌธ์
์ด๋ฆ์ด Random Forest๋ผ๊ณ ๋ถ๋ฆฐ๋ค.
๐ฏ ํต์ฌ
โป ์์๋ธ ๊ธฐ๋ฒ
๊ฐ๋ ฅํ ํ๋์ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ ๋์ ๋ณด๋ค ์ฝํ ๋ชจ๋ธ ์ฌ๋ฌ ๊ฐ๋ฅผ ์กฐํฉํ์ฌ
๋ ์ ํํ ์์ธก์ ๋์์ ์ฃผ๋ ๋ฐฉ์
- ๋๋ค ํฌ๋ ์คํธ๋ ์์๋ธ ๊ธฐ๋ฒ์ ์ฌ์ฉํ ํธ๋ฆฌ ๋ชจ๋ธ ์ค ํ๋์ด๋ฉฐ ๊ฐ์ฅ ๋ง์ ๋น์ค์ ์ฐจ์งํ๋ค
- ๋ถ์คํ ๋ชจ๋ธ๋ณด๋ค๋ ์๋, ์์ธก๋ ฅ ๋ฉด์์๋ ๋ชป ๋ฏธ์น์ง๋ง ์๊ฐํ๊ฐ ๋งค์ฐ ๋ฐ์ด๋ ๋จผ์ ์ดํด๋๋ฅผ ํค์์ผ ํ๋ค.
- ์ข ์๋ณ์๊ฐ ์ฐ์ํ/๋ฒ์ฃผํ ๋ฐ์ดํฐ์ธ ๊ฒฝ์ฐ์๋ ๋ชจ๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
- ์์๋ผ์ด์ด(์ด์์น)๊ฐ ๋ฌธ์ ๋ ์ ์ข์ ๋์์ด ๋๋ ๋ชจ๋ธ์ด๋ค.
- ๊ฒฐ์ ํธ๋ฆฌ๋ก ์ค๋ฒ ํผํ ์ด ์ผ์ด ๋ ์จ ์ฌ์ฉํ๋ฉด ์ข์ ๋์์ด ๋๋ ๋ชจ๋ธ์ด๋ค.
๐ ๋ด๊ฐ ์ฐ๋ ค๊ณ ์ ์ฅํด๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ํจ์
๋ผ์ด๋ธ๋ฌ๋ฆฌ
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
ํจ์
-์ ์ฒ๋ฆฌ
df.engine.str.split(expend=True) = ์ด๋ก ์ชผ๊ฐ์ง
str :๋ฌธ์์ด์ ์ฒ๋ฆฌํ๋ ๋ฉ์๋๋ค์ ๋ถ๋ฌ์ฌ ์ ์์
df.engine.str.split() # ๋ฆฌ์คํธ๋ก ์ชผ๊ฐ์ง
missing_value = df.isnull( ).sum( ) = ๊ฒฐ์ธก์น ํ์ธ
pd.options.display.float_format = "{:,.2f}".format = ์์์ ๋ ๋ฒ์งธ ์๋ฆฌ๊น์ง ํ์
df.์ปฌ๋ผ.str.uppr( ) = ๋๋ฌธ์๋ก ๋ณํ
df.์ปฌ๋ผ.str.extract('([\d\.]+)').astype('float64') = ์ฒ์ ๊ฒ์๋๋ ์ฒซ ๋ฒ์งธ ๋จ์ด๋ง ํ์ ๋ณ๊ฒฝ
๋ฆฌ์คํธ(์ฌ๋ฌ ๊ฐ) ๋ณ๊ฒฝ ์ extract_all
df = pd.get_dummies(df, columns=[' _ ' , ' _ ' ,' _ ' , ' _ ' , ' _ ' , ' _ ' ], drop_first=True
โก _ , _ , _ , ๋ฑ๋ฑ ๋๋ฏธํ
์ด๋ฆ ๋ณ๊ฒฝ : ex) df.name = df.name.replace('Land', 'Land Rovar') = ๋ค์ ์ปฌ๋ผ์ Land๋ฅผ Land Rover๋ก ๋ณ๊ฒฝ
- ๐ซ๋ชจ๋ธ๋ง, ํ์ต
from sklearn.model_selection import KFold
df.reset_index(drop=True, inplace=True) = index๋ก ๋ณํ ์๋ฌธ์ ์ ์ฉ
๐ ํ์ดํผ ํจ๋ฌ๋ฏธํฐ ํ๋
train_rmse_total = []
test_rmse_total = []
for train_index, test_index in kf.split(X): - ๋ฐ๋ณต <- 5 ๊ธฐ์ค์ผ๋ก ๋๋ K-Fold
X_train, X_test = X.loc[train_index], X.loc[test_index] - ๋
๋ฆฝ๋ณ์๋ค์ ํ๋ จ ์
/์ํ ์
y_train, y_test = y[train_index], y[test_index] - ์ข
์๋ณ์์ ํ๋ จ ์
/์ํ ์
model = RandomForestRegressor(random_state=100)
model.fit(X_train, y_train) - ํ์ต
train_pred = model.predict(X_train) -ํ๋ จ์
์์ธก (์ ํ์ต๋์๋? ๊ณผ์ต์ ํ, ์ค๋ฒํผํ
?)
test_pred = model.predict(X_test) - ์ํ ์
์์ธก (์ ์์ธกํ๋?, ์ธ๋ ํผํ
)
train_rmse = mean_squared_error(y_train, train_pred, squared=False)
test_rmse = mean_squared_error(y_test, test_pred) ** 0.5 - ** 1/2
train_rmse_total.append(train_rmse)
test_rmse_total.append(test_rmse)
train_rmse_total, test_rmse_total
- ์ค์ ๊ฐ, ์์ธก๊ฐ -> ์๋ฌ๋ฅผ ๋น๊ต
print(
"train_rmse : ", sum(train_rmse_total) / len(train_rmse_total),
"test_rmse : ", sum(test_rmse_total) / len(test_rmse_total))
์ฅ์ , ๋จ์
๐ช์ฅ์
- ์ ํ/๋น์ ํ ๋ฐ์ดํฐ ๋ชจ๋ ์๋์ด ์๋๋ค.
- ์์๋ผ์ด์ด์ ์ํฅ์ ๊ฑฐ์ ๋ฐ์ง ์๋๋ค.
- ๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ํจ๊ณผ์ ์ด๋ค.
- ๊ณผ์ ํฉ ๋ฌธ์ ์ต์ํ์์ผ์ ๋ชจ๋ธ์ ์ ํ๋ ํฅ์์ ๋์์ ์ค๋ค
๐ฉธ๋จ์
๋๋ค ํฌ๋ ์คํธ ํน์ฑ์ ์๋ฐฑ~ ์์ฒ ๊ฐ์ ํธ๋ฆฌ๋ฅผ ํ์ฑํ๊ธฐ ๋๋ฌธ์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆผ
๋ชจ๋ ํธ๋ฆฌ ๋ชจ๋ธ์ ํ์ธํ๊ธฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ ํด์ ๊ธฐ๋ฅ๋ฉด์์๋ ๋จ์ด์ง๋ค
'ํ๋ฃจ๊ณต๋ถ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ 22์ฅ๐ML_์ ํํ๊ท(Linear Regression)๐ (0) | 2022.11.17 |
---|---|
๐ฉ์ฌ๋ฏธ๋ก ์ฌ๋ฆฌ๋ ์์ด๋ณด Data Analysis(๋ฐ์ดํฐ ๋ถ์) ์ฌ์ด ์์ (0) | 2022.11.16 |
์ 20์ฅ๐ML_๊ฒฐ์ ํธ๋ฆฌ(Decision Tree)๐ (0) | 2022.11.12 |
์ 19์ฅ๐ML_Naive Bayes๐ (0) | 2022.11.11 |
์ 18์ฅ๐Machine Learning_ML๐ (0) | 2022.11.10 |