8 Tue
ํ์
์ค๋ฌด์์๊ฒ ๋ฐฐ์ฐ๋ Kaggle ๋จธ์ ๋ฌ๋ ์
๋ฌธ
๋๋ค ํฌ๋ ์คํธ(Random Forest) ์๊ฐ
๋๋ค ํฌ๋ ์คํธ
๋ถ๋ฅ, ํ๊ตฌ ๋ถ์๋ฑ์ ์ฌ์ฉ๋๋ ์์๋ธ ํ์ต ๋ฐฉ๋ฒ์ ์ผ์ข
์์๋ธ์ ์ฌ๋ฌ๊ฐ์ ์ ๊ธฐ๊ฐ ํฉ์ฃผํ๋ ๊ฒ์ ์๋ฏธ(์๋ ์ค๋ช ์ฐธ์กฐ)
ํ๋ จ ๊ณผ์ ์์ ๊ตฌ์ฑํ ๋ค์์ ๊ฒฐ์ ํธ๋ฆฌ๋ก๋ถํฐ ๋ถ๋ฅ(๋ถ๋ฅ) ๋๋ ํ๊ท ์์ธก์น(ํ๊ท ๋ถ์)๋ฅผ ์ถ๋ ฅํจ์ผ๋ก์จ ๋์ํ๋ค
์ ์ฒด ๋ฐ์ดํฐ์ ์ผ๋ถ๋ฅผ ์ํ๋งํ ์๋ธ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํด์ ํ์ต์ํจ ์ฌ๋ฌ๊ฐ์ ๊ฒฐ์ ํธ๋ฆฌ์ ์์ธก๊ฐ๋ค๊ฐ์ ๋ณดํ ์ ํตํด์ ์ต์ข ์ถ๋ ฅ๊ฐ์ ๋ง๋ค์ด๋ด๋ ๊ธฐ๋ฒ
์์๋ธ ๋ฌ๋
์์๋ธ ๋ฌ๋์ ์ฌ๋ฌ ๊ฐ์ ๋ถ๋ฅ๊ธฐ์ ์์ธก ๊ฒฐ๊ณผ๊ฐ ๊ฐ์ ํฌํ๋ฅผ ํตํด์ ์ต์ข ๊ฒฐ๊ณผ๊ฐ์ ๋ง๋ค์ด๋ด๋ ๊ธฐ๋ฒ
์์๋ธ ๋ฌ๋์ ์ด์ฉํ๋ฉด ๋์ฑ ์ข์ ์์ธก ์ฑ๋ฅ์ ๊ธฐ๋ํ ์ ์๋ค
๋ถ๋ฅ๊ธฐ๋ ๊ฐ์ ๋ชจ๋ธ๋ก, ๋ค๋ฅธ ๋ชจ๋ธ๋ก ํด๋ ์๊ด์ด ์๋ค
ํฌํ ๋ฐฉ์์ ๋ค์๊ฒฐ ํฌํ๋ก ํ ์๋ ์๊ณ ํ๊ท ๊ฐ์ ์ทจํ ์๋ ์๋ค
๋๋ค ํฌ๋ ์คํธ์ ์ฅ๋จ์
์ฅ์
๋ง์ ํ์ดํผ ํ๋ผ๋ฏธํฐ ํ๋์ ๊ฑฐ์น์ง ์์๋ ์ผ๋ฐ์ ์ผ๋ก ์์ ์ ์ธ ์ข์ ์ฑ๋ฅ์ ๋ฐํํ๋ค
๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ด์ฉํด์ ์ฌ๋ฌ๊ฐ์ ํธ๋ฆฌ๋ฅผ ํ๋ฒ์ ํ์ต์ํฌ ์ ์๋ค
๋จ์
ํ์ต ์๊ฐ์ด ์๋์ ์ผ๋ก ์ค๋ ๊ฑธ๋ฆฐ๋ค
Estimaotr
sklearn.ensemble.RandomForestClassifer
sklearn.ensemble.RandomForestRegressor
DataFrame์ .replace() ํจ์
df.replace()
์ปฌ๋ผ์ ๊ฐ์ ์ํ๋ ํํ๋ก ๋ณ๊ฒฝํ๋ ํจ์
ex
df['RainToday'].replace({'No':0, 'Yes':1}, inplace=True)
๋ฒ์ฃผํ(Categorical) ๋ฐ์ดํฐ ์ฒ๋ฆฌํ๊ธฐ - One-hot Encoding
Integer Encoding
๋ฒ์ฃผํ ๊ฐ์ ์ก์ํ ๊ฐ์ผ๋ก ๋งค์นญํด ๋ณํํ๋ ๊ฒ
ex
dog : 1
cat : 2
One-hot Encoding
๋ฒ์ฃผํ ๊ฐ์ ํน์ ์ธ๋ฑ์ค๊ฐ 1์ด๊ณ ๋๋จธ์ง ๋ถ๋ถ์ 0์ ๊ฐ์ ๊ฐ์ง Binary value๋ก ํํํ๋ ๊ฒ
dog : [1, 0]
cat : [0, 1]
pd.get_dummies(df, prefix=)
๋ฅผ ํตํด ์ํซ ์ธ์ฝ๋ฉ ๊ตฌํ ๊ฐ๋ฅ
์ ์ ์ธ์ฝ๋ฉ์ ์๋ฏธ ์๋ ์ ์ ๊ฐ์ ๋ํด ์๋ฏธ๋ฅผ ๋ถ์ฌํ ์ ์๋ ์คํด์ ์ฌ์ง๊ฐ ์์
Rain in Australia ๋ฐ์ดํฐ์
์๊ฐ
ํธ์ฃผ ๊ธฐ์์ฒญ์์ 2010๋ ์ ๋ฐํํ ๋ฐ์ดํฐ์
Target Value : Yes(tommorow rain) or No(tommorow don't rain)
Binary Classification
Number of data : 145,460
Random Forest Classifier๋ก ๋ด์ผ ๋น๊ฐ ์ฌ์ง ์์ฌ์ง ์์ธกํด๋ณด์ - Rain in Australia ๋ฐ์ดํฐ์
Input data : 22 Dimension (Rain Tommorow ์ปฌ๋ผ ์ ์ธ)
Target data : RainTommorow ์ปฌ๋ผ
YES : ๋ด์ผ ๋น์ด
NO : ๋ด์ผ ๋น ์์ด
Estimator
DecisionTreeClassifier
RandomforestClassifier
์ถ๊ฐ์ ์ธ ์ ์ฉ๊ธฐ๋ฒ
Data Cleansing : ๊ฒฐ์ธก์น ์ฒ๋ฆฌ
๊ฒฐ์ธก์น์ ์กด์ฌ ์ฌ๋ถ
df.info()
๋ฅผ ํตํด ์ ์ฒด ๋ฐ์ดํฐ์ ๊ฐ์์ ์ปฌ๋ผ ๋ณ ๋ฐ์ดํฐ์ ๊ฐ์๋ฅผ ์ ์ ์๋ค.์ ์ฒด ๋ฐ์ดํฐ ๊ฐ์ != ์ปฌ๋ผ ๋ณ ๋ฐ์ดํฐ ๊ฐ์
์ผ ๊ฒฝ์ฐ ๊ฒฐ์ธก์น๊ฐ ์กด์ฌํ๋ ๊ฒ์ ์ ์ ์๋ค.์๋ํ๋ฉด ๊ฒฐ์ธก์น๋ ๊ฐ์๋ก ์ธ์ง์ง ์๊ธฐ ๋๋ฌธ์ด๋ค
๋ํ,
df.isnull().mean().sort_values()
๋ฅผ ํตํด ํ์ธํ ์ ์๋ค.
๊ฒฐ์ธก์น ์ฒ๋ฆฌ
df.dtypes == 'object'
์ด๋ฉด categorical data์ด๋ค.๊ฒฐ์ธก์น๋ฅผ ์ฃผ๋ก ์ต๋น๊ฐ์ผ๋ก ์ฑ์์ค๋ค.
df.dtypes != 'object'
์ด๋ฉด numerical data์ด๋ค.๊ฒฐ์ธก์น๋ฅผ ์ฃผ๋ก ํ๊ท ์ด๋ ์ค์๊ฐ์ผ๋ก ์ฑ์์ค๋ค.
๋ํ
label
๊ฐ, ์ฆRainTommorrow
๊ฐ ๊ฒฐ์ธก์น๊ฐ ์๋ ๊ฒฝ์ฐ๋ ์์๋ก ์ฑ์ฐ๊ธฐ๊ฐ ์ด๋ ค์ฐ๋ฏ๋ก drop ํ๋คdf.dropna(how='any', inplace=True)
์ด ๋
how='any'
๋ ๊ฒฐ์ธก์น๊ฐ ํ๋๋ผ๋ ์กด์ฌํ๋ฉด ํด๋น ๋ก์ฐ๋ฅผ ์ ๊ฑฐํ๋ผ๋ ์๋ฏธ์ด๋ค.
์ด์์น(Outlier) ์ ๊ฑฐ ๊ธฐ๋ฒ
์ด์์น๋ ๋ค๋ฅธ ๋ฐ์ดํฐ์ ํฌ๊ฒ ๋ค๋ฅธ ๊ฐ์ ๊ฐ๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฏธํ๋ค.
ex) ํค๊ฐ ํฌ๋ฉด ์ฃผ๋ก ๋ชธ๋ฌด๊ฒ๋ ํฌ๋ค. ์ด ๋์ ์ด์์น๋ ํค๋ ์์๋ฐ ๋ชธ๋ฌด๊ฒ๊ฐ ํฌ๋ค.
์ด์์น๋ ๋ชจ๋ธ์ ํ์ต์ ๋ฐฉํด๊ฐ ๋ ์ ์๊ธฐ ๋๋ฌธ์ ์ด์์น ์ ๊ฑฐ๋ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ ์ฑ๋ฅํฅ์์ ๋์์ด ๋๋ค.
์ด์์น ์ ๊ฑฐ ๊ธฐ๋ฒ - IQR
Inter Quantile Range
IQR = Q3 - Q1
data < Q1 - 1.5*IQR
ordata > Q3 + 1.5*IQR
์ผ ๊ฒฝ์ฐ์ ์ด์์น๋ก ํ๋จํ๊ณ ์ ๊ฑฐํ๋ค.Seaborn์ boxpot()์ด IQR๋ฅผ ๊ทธ๋ ค์ค๋ค.
์ด์์น ์ ๊ฑฐ ์ปฌ๋ผ ์ ํ
์ด์์น๋ฅผ ์ ๊ฑฐํด์ค๋ ๊ฒฐ๊ณผ๊ฐ์ด๋ ํฌ๊ฒ ๊ด๋ จ์ด ์์ผ๋ฉด ๋ชจ๋ธ์ ์ฑ๋ฅ ํฅ์์ ํฐ ๋ณํ๊ฐ ์๋ค.
๋ฐ๋ผ์, ๊ฒฐ๊ณผ๊ฐ๊ณผ ์๊ด๊ด๊ณ๊ฐ ์๋ ์ปฌ๋ผ์ ์ด์์น๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ์ด ์ข๋ค
๊ตฌํ
Outlier ์ ๊ฑฐ๋ฅผ ํตํด Random Forest Classifier ์ฑ๋ฅ ํฅ์ ์์ผ๋ณด๊ธฐ - Rain in Australia ๋ฐ์ดํฐ์
์ด์ ๊ณผ ๋์ผํ๋ฉฐ, ์์ ๊ตฌํ ์ฒ๋ผ ์์๋ผ์ด์ด ๋ฐ์ดํฐ์ ์ธ๋ฑ์ค๋ง ๋ฐ์์ dropํด์ค๋ค.
์ฑ๋ฅ์ด ์ข์์ง๋ ๊ฒฐ๊ณผ.
Last updated
Was this helpful?