์ฌ๊ธฐ์์ ์งํ ์ค์ธ ๋ช ๊ฐ์ง ํ ๋ก ๊ณผ ๊ณต๊ฐ๋ ๋ฌธ์ ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก CategoricalEncoder
(https://github.com/scikit-learn/scikit-learn/pull/9151)์ด ์ข์ ๊ฒฐ๊ณผ๋ฅผ ์ป์๋์ง ์์ฌ์ค๋ฝ์ต๋๋ค. ์ด๋ฆ ์ ํ(์์ง ์ถ์๋์ง ์์๊ธฐ ๋๋ฌธ์ ๋ณ๊ฒฝ์ ์ฌ์ง๊ฐ ์์ต๋๋ค).
ํ์ฌ ์ํ๋ฅผ ์์ฝํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
CategoricalEncoder
๋ ํ์ฉํ๋ ๋ฐ์ดํฐ ์ ํ์ ๋ํ๋
๋๋ค(๋ฒ์ฃผ ๋ฐ์ดํฐ).encoding
๋ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ธ์ฝ๋ฉํ๋ ๋ฐฉ๋ฒ ์ ์ง์ ํ์ฌ ์ฐ๋ฆฌ๋ ์ด๋ฏธ encoding='onehot'|'onehot-dense'|'ordinal'
์์ต๋๋ค.
๊ทธ๋ฌ๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์๋ ์ด๋ป๊ฒ ํด์ผ ํฉ๋๊น?
CategoricalEncoder
ํด๋์ค์์ encoding
kwarg์ ๋ํ ์ ๊ฐ์ผ๋ก ๊ณ์ ์ถ๊ฐํฉ๋๊น?encoding
kwarg์ ๋ํด ์ ๋ฌํ ๋ด์ฉ์ ๋ฐ๋ผ ํ์ฑํ๋๊ฑฐ๋ ํ์ฑํ๋์ง ์์ ์ถ๊ฐ ํค์๋ ์ธ์๋ฅผ CategoricalEncoder
์ ์ถ๊ฐํด์ผ ํ๋ค๋ ๊ฒ์
๋๋ค. ์ด๋ ๊ฐ์ฅ ๋ฉ์ง API ๋์์ธ์ด ์๋๋๋ค.๊ทธ ๋ง์ง๋ง ๋ฌธ์ ์ ๋ํด ์ฐ๋ฆฌ๋ ์ด๋ฏธ sparse=True/False
์ต์
๊ณผ ํจ๊ป ์ด๊ฒ์ ๊ฐ์ง๊ณ ์์๋๋ฐ, ์ด๊ฒ์ 'onehot'์๋ง ๊ด๋ จ๋๊ณ 'ordinal'์๋ ๊ด๋ จ์ด ์์์ผ๋ฉฐ 'onehot'๊ณผ 'onehot-dense'๋ฅผ ๋ชจ๋ ์ฌ์ฉํ์ฌ ํด๊ฒฐํ์ต๋๋ค. ์ธ์ฝ๋ฉ ์ต์
์ด ์๋๋ผ sparse
ํค์๋์
๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๋ฌํ ์ ๊ทผ ๋ฐฉ์๋ ํ์ฅ๋์ง ์์ต๋๋ค.
์ด์ ๊ด๋ จํ์ฌ UnaryEncoder
(https://github.com/scikit-learn/scikit-learn/pull/8652)๋ฅผ ์ถ๊ฐํ๋ PR์ด ์์ต๋๋ค. ๊ทธ์ ์ด๋ฆ์ ๋ํ ๊ด๋ จ ๋
ผ์๊ฐ ์์๋ค PR, ํ์ฌ ์ด๋ฆ์ ์ด๋ฏธ ์ธ์ฝ๋ฉ ๋ ์ ์, ์ค์ ์ ์ธ ๋ฒ์ฃผ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์, ๊ทธ๊ฒ์ ํ์ฌ์ ๋์์ธ (๋์ฐฉ๋์ง ์์ ๋ฐ์ดํฐ์ ์ ํ, ์ธ์ฝ๋ฉ ๋ฐฉ๋ฒ. ์ด์ ๊ด๋ จ,์ ๋งํ๋๋ก CategoricalEncoder์ ์ผ๊ด์ฑ์ ์ ์งํ๋ ค๋ฉด ์
๋ ฅ์ผ๋ก ์์ ๋ฐ์ดํฐ๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ OrdinalEncoder๋ก ์ด๋ฆ์ ์ง์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์์ผ๋ก์ ์ต์ ์ ๋ฌด์์ ๋๊น?
1) ํ์ฌ ๋ง์คํฐ์ ์๋ ๋๋ก ์ ์งํ๊ณ ๋จ์ผ ํด๋์ค์ ๋ช ๊ฐ์ง ์๋ก์ด ์ต์
์ ์ถ๊ฐํด๋ ๊ด์ฐฎ์ต๋๋ค. .
2) ๋ช
๋ช
์ฒด๊ณ๋ฅผ ์ ํํ๊ณ ์ด๋ฆ์ด ์ธ์ฝ๋ฉ ๋ฐฉ์์ ๋ํ๋ด๋ '์นดํ
๊ณ ๋ฆฌ ์ธ์ฝ๋' ๋ฌด๋ฆฌ๋ฅผ ๊ฐ์ต๋๋ค(OnehotEncoder, OrdinalEncoder, ๋์ค์๋ BinaryEncoder, UnaryEncoder, ...).
๋ฐ๋ผ์ ๋จ์ผ ํด๋์ค์์ ํด๋์ค ์ ๋ ํค์๋ ์ธ์ ์๋ฅผ ์ ์ฌ์ ์ผ๋ก ๊ตฌ์ถํ ๊ฐ๋ฅ์ฑ์ด ์ฝ๊ฐ ์์ต๋๋ค.
๋ ๋ฒ์งธ ์ ๊ทผ ๋ฐฉ์์ ํ ๊ฐ์ง ๋ฌธ์ (๊ทธ๋ฆฌ๊ณ ์ฌ๋ฌ ์ธ์ฝ๋ฉ ์ต์
์ ์ถ๊ฐํ๊ธฐ ์ ์๋ ์ฒ์์ CategoricalEncoder
๋ฅผ ์ฌ์ฉํ ์ด์ ์ค ํ๋)๋ ์ด๋ฏธ OnehotEncoder
๊ฐ ์๋ค๋ ๊ฒ์
๋๋ค. CategoricalEncoder
์ ๋ค๋ฅธ API๊ฐ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์-ํซ ์ธ์ฝ๋ฉ์ ์ํํ๋ ์ธ์ฝ๋์ ์ฌ์ฉํ ์ ์๋ ๋ค๋ฅธ ์ข์ ์ด๋ฆ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ผ์์ ์ผ๋ก ๋ชป์๊ธด ํดํน์ผ๋ก ํ์ฌ ์์ฑ์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ๊ด์ฐฎ๋ค๋ฉด ์ด๋ฆ์ ์ฌ์ฌ์ฉํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค(๊ฐ์ฅ ์ ์ฉํ ์์ฑ์ด ์๋๋ผ๋ ๋ฐ ๋์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค). ์์ด๋์ด๋ ๋ฌธ์์ด ๋ฐ์ดํฐ๋ก ํด๋์ค๋ฅผ ๋ง์ถ๋ฉด ์๋ก์ด ๋์์ ์ป๊ณ , ์ ์ ๋ฐ์ดํฐ๋ก ํด๋์ค๋ฅผ ๋ง์ถ๋ฉด ๊ธฐ๋ณธ ๋์์ด ๋ณ๊ฒฝ๋๊ณ ๊ฐ์ ธ์ค๊ธฐ ์ํด ์ง์ ํ ํค์๋๋ฅผ ๋ํ๋ด๋ ์ฌ์ฉ ์ค๋จ ๊ฒฝ๊ณ ๊ฐ ํ์๋๋ค๋ ๊ฒ์
๋๋ค. ๊ฒฝ๊ณ ์ ๊ฑฐ).
cc @jnothman @amueller @GaelVaroquaux @rth
์์ฝ @jorisvandenbossche์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๋๋ ์ต์
2์ ์ฐฌ์ฑํ๋ค๊ณ ์๊ฐํฉ๋๋ค. OneHotEncoder
ํด๋์ค๋ฅผ ์ฌ์ฌ์ฉํ๊ณ , ์ด์ํ ์์ฑ์ ๋ ์ด์ ์ฌ์ฉํ์ง ์์ผ๋ฉฐ, ์์ฑ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ถ๊ฐํ์ฌ ๊ธฐ๋ณธ ๋์์ด ๋ณ๊ฒฝ๋์ง๋ง ์ฝ๊ฒ ์นจ๋ฌตํ ์ ์๋ค๋ ํฅํ ๊ฒฝ๊ณ ์ ํจ๊ป ๋์์ ์ ํํฉ๋๋ค. ํด๋น ์ต์
์ ๋ํ ๊ฐ์ ์ ๋ฌํ๋ ๊ฒ๋ง์ผ๋ก ํด๋น ๊ฒฝ๊ณ ๊ฐ ํ์๋ฉ๋๋ค.
CategoricalEncoder๋ฅผ ๋๋๋ฆฐ๋ค๋ ์์ด๋์ด๋ ๋๋ฅผ ์๋นํ ์ฌํ๊ฒ ํ์ง๋ง ์ ์๊ฐ์๋
๋ฏธ๋์ ์ฌ์ฉ์๊ฐ ์ต์
2์ ๋ํด ๋ ์ ๋น์ค๋ฌ์ํ ๊ฒ์ด๋ผ๋ ๋ง์ด ์ณ์ต๋๋ค.
๋ฌธ์ ๋ ์ฐ๋ฆฌ๊ฐ ์ด๊ฒ์ OHE์ ๋ํ ๋ณ๊ฒฝ์ผ๋ก ๊ตฌํํ๋ ค๊ณ ์๋ํ๋ค๋ ๊ฒ์
๋๋ค.
์ค๋ ์๊ฐ ๋์ ๊ทธ๊ฒ์ ๊ฒฐ์ฝ ๋ ์ง ์์์ต๋๋ค. ์๋ง๋ ์๋ํ๋ ๊ฒ์ด ์ข์ ๊ฒ์
๋๋ค.
์ ์๋ ๋ด์ฉ์ ๋ฐ๋ฅธ OneHotEncoder ๋
์คํธ๋ง ์์
๋ณ๊ฒฝํ์ฌ ์ ์์ ์ธ์ง ํ์ธํ ์ ์์ต๋๋ค.
์กฐ์์ด ๋งํ ๊ฒ์ +1
๋ด ํฐ์์ ๋ณด๋์ต๋๋ค. ์คํ์ ์งค๋งํจ์ ์ฉ์ํด ์ฃผ์ญ์์ค.
2018๋ 1์ 23์ผ 12:28, 12:28์ Joel Nothman [email protected]์ด ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
CategoricalEncoder๋ฅผ ๋๋๋ฆฐ๋ค๋ ์์ด๋์ด๋ ๋๋ฅผ ์๋นํ ์ฌํ๊ฒ ํ์ง๋ง,
์๊ฐํ๋ค
๋ฏธ๋์ ์ฌ์ฉ์๊ฐ ์ต์ 2์ ๋ํด ๋ ๋ฏ์ค๊ฒ ํ๋ ๊ฒ์ด ๋ง์ต๋๋ค. ๋ด
๊ธฐ๋ณธ
๋ฌธ์ ๋ ์ฐ๋ฆฌ๊ฐ ์ด๊ฒ์ OHE์ ๋ํ ๋ณ๊ฒฝ์ผ๋ก ๊ตฌํํ๋ ค๊ณ ์๋ํ๋ค๋ ๊ฒ์ ๋๋ค.
NS
์ค๋ ์๊ฐ ๋์ ๊ทธ๊ฒ์ ๊ฒฐ์ฝ ๋ ์ง ์์์ต๋๋ค. ์๋ง๋ ์๋ํ๋ ๊ฒ์ด ์ข์ ๊ฒ์ ๋๋ค.
์ ์๋ ๋ด์ฉ์ ๋ฐ๋ฅธ OneHotEncoder ๋ ์คํธ๋ง ์์
๋ณ๊ฒฝํ์ฌ ์ ์์ ์ธ์ง ํ์ธํ ์ ์์ต๋๋ค.--
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/scikit-learn/scikit-learn/issues/10521#issuecomment -359761818
CategoricalEncoder๋ฅผ ๋๋๋ฆฌ๋ ์์ด๋์ด๋ ๋๋ฅผ ๋งค์ฐ ์ฌํ๊ฒ ๋ง๋ญ๋๋ค.
๋ถ๋ช
ํ ๋งํ๋ฉด ๋๋๋ฆฌ๊ธฐ๊ฐ ์๋๋ผ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ ์งํ๋ ๋ฆฌํฉํฐ๋ง/์ด๋ฆ ๋ณ๊ฒฝ์ด ๋ ๊ฒ์
๋๋ค!
๊ทธ๋ฌ๋ ๋๋ ๋ํ "CategoricalEncoder"๋ผ๋ ์ด๋ฆ์ ์ข์ํ๋๋ฐ, ๊ทธ๊ฒ์ ์ฐธ์ผ๋ก ์ฌํ ๊ฒ์
๋๋ค.
์ฆ, ์ด๊ฒ์ OnehotEncoder์ ํตํฉํ๋ ๊ฒ์ด ์ผ๋ง๋ ๊ฐ๋ฅํ์ง ์์ด๋์ด๋ฅผ ์ป๊ธฐ ์ํด ๋น ๋ฅด๊ฒ ๋ณ๊ฒฝ์ ์๋ํ ๊ฒ์ ๋๋ค.
์ข์, ๊ฐ๋
์ฆ๋ช
์ผ๋ก PR์ ์ด์์ต๋๋ค: https://github.com/scikit-learn/scikit-learn/pull/10523.
์์ง ์๋ฃ๋์ง ์์์ต๋๋ค(์ฌ์ฉ ์ค๋จ ๊ฒฝ๊ณ ๋ฐ ์ ์์ฑ์ด ์ด์ ๋์์์ ์์ง ๊ณ์ฐ๋์ง ์์).
์ฃผ์ API ์ง๋ฌธ์ ์
๋ ฅ ๋ฐ์ดํฐ์ ํ์์ ๊ดํ ๊ฒ์
๋๋ค.
์์ฝํ์๋ฉด ํ์ฌ ๋ฒ์ฃผํ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ ์ด ์์ต๋๋ค.
1) ์ค์ ๋ก์ ์์ง ์ธ์ฝ๋ฉ๋์ง ์์(์ ์ ๋๋ ๋ฌธ์์ด), ๋ฒ์ฃผํ ๋ฐ์ดํฐ( CategoricalEncoder
์์ ์ํ๋๋ ๋ฐฉ์) -> ๊ต์ก ๋ฐ์ดํฐ์ ๊ณ ์ ๊ฐ์์ ๋ฒ์ฃผ ์ถ๋ก
2) ์ ์๋ก ์ด๋ฏธ ์ธ์ฝ๋ฉ๋ ๋ฐ์ดํฐ(ํ์ฌ OneHotEncoder
์์ ์ํ๋๋ ๋ฐฉ์) -> ๊ต์ก ๋ฐ์ดํฐ์ ์ต๋๊ฐ์์ ๋ฒ์ฃผ๋ฅผ ์ถ๋ก ํฉ๋๋ค.
์ง๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๋ ๊ฒฝ์ฐ ๋ชจ๋ ์ง์ํ ๊ฐ์น๊ฐ ์์ต๋๊น? ๋ฐ๋ผ์ ์ ์ฌ์ ์ผ๋ก ๋ณํฉ๋ OneHotEncoder์์ ๋ ๋ค ์ํํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ์งํฉ๋๊น, ์๋๋ฉด ์์ ์ ๋ ฅ์ ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฅ์ ์์ ํ ์ฌ์ฉํ์ง ์๊ณ ์ ๊ฑฐํฉ๋๊น?
๋ ๋ค ์ฒ๋ฆฌํ ์ ์๋ ๊ธฐ๋ฅ์ ์ํ๋ฉด ๋ถ์ธ ํค์๋๋ฅผ ์ถ๊ฐํ์ฌ ์
๋ ฅ ๋ฐ์ดํฐ ์ ํ์ ์ง์ ํ ์ ์์ต๋๋ค(์ง๊ธ์ encoded_input=False/True
์ ์ฌ์ฉํ์ง๋ง ๋ค๋ฅธ ์์ด๋์ด๋ ordinal_input
, ...)
๋น์ถ์ฒ ๊ธฐ๊ฐ ๋์, ์ฐ๋ฆฌ๋ ์ด์จ๋ ๋ ๋ค ์ง์ํด์ผ ํ๊ณ , ๋ํ ๋์์ ์ ํํ๊ธฐ ์ํด ํค์๋๋ฅผ ๋์
ํด์ผ ํฉ๋๋ค(๊ฒฝ๊ณ ๋ฅผ ์์ ๊ณ ์๋ก์ด ๋์์ ์ ํํ ์ ์๋๋ก).
๋ฐ๋ผ์ ์์น์ ์ผ๋ก ํค์๋๋ฅผ ๋์ค์ ์ ์งํ ์ ์์ต๋๋ค.
๋ ๋ค ์ฒ๋ฆฌํ๊ณ ์ถ๋ค๋ ์ ์ ๊ฐ์ํ ๋ OneHotEncoder์ ์๋ ๋ฐฉ์์ ๋ํ ๊ฐ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
encoded_input=None
์ด๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ธฐ๋ณธ๊ฐ์ ์ถ๋ก ํฉ๋๋ค.encoded_input
๊ฐ ๋ด๋ถ์ ์ผ๋ก True๋ก ์ค์ ๋๊ณ ์ฌ์ฉ ์ค๋จ ๊ฒฝ๊ณ ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ. ์ฌ์ฉ์๊ฐ ํ์ฌ ๋์์ ์ ์งํ๋ ค๋ ๊ฒฝ์ฐ ์๋์ผ๋ก OneHotEncoder(encoded_input=True)
๋ก ์ง์ ํ์ฌ ๊ฒฝ๊ณ ๋ฅผ ๋ ์ ์์ต๋๋ค.encoded_input
๋ฅผ False๋ก ์ค์ ํ๊ณ ๊ฒฝ๊ณ ์์ด ์ ๋์(= ํ์ฌ CategoricalEncoder ๋์)์ ์ฌ์ฉํฉ๋๋ค.encoded_input
๊ธฐ๋ณธ๊ฐ์ None์์ False๋ก ๋ณ๊ฒฝํฉ๋๋ค(๊ธฐ๋ณธ์ ์ผ๋ก ์๋ก์ด ๋์, int๋ฅ ๋ฐ์ดํฐ์๋ ์ ์ฉ)๋๋ ์ฌ์ ํ ๋น์ ์ด ์ ์ํ๋ ๊ฒ์ด ์ต๋ ๊ฐ์์ ๋ฒ์ฃผ๋ฅผ ์ถ๋ก ํ๊ธฐ ๋๋ฌธ์ ์ค์ง์ ์ธ ์ฐจ์ด์ธ์ง ํ์คํ์ง ์์ต๋๋ค.
@jnothman ์ฐ์ต์ ์ฐจ์ด๊ฐ ์์ ์ ์๋ค๋ ์ ์ ์๊ณ ๊ณ์๋์ ? (๊ฐ์ง๊ณ ์๋ ๋ฐ์ดํฐ์ ๋ฐ๋ผ ์ป์ ์ ์๋ ์ถ๋ ฅ)
๊ทธ๋ฌ๋ ์ด ์ฐจ์ด๊ฐ ์ค์ ๋ก ์ค์ํ์ง ์ฌ๋ถ๋ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๊ทธ๊ณณ์์ ํผ๋๋ฐฑ์ ๋ณด๊ณ ์ถ์ต๋๋ค. ๋๊ตฐ๊ฐ๊ฐ ์ค์ ๋ก ์ด "์ต๋๊ฐ" ๊ธฐ๋ฐ ๋ฐฉ๋ฒ์ ์ํ๋์ง , ์๋๋ฉด "๊ณ ์ ํ ๊ฐ" ๊ธฐ๋ฐ ๋ฐฉ๋ฒ๋ง ๊ฐ๋ ๊ฒ์ด ์ข์์ง(ํฅํ ์ฌ์ฉ ์ค๋จ ํ) ์ฌ๋ถ.
๋๋ ๊ฐ์ธ์ ์ผ๋ก ์ด ์ต๋๊ฐ ๊ธฐ๋ฐ ๋ฐฉ๋ฒ์ด ์ ๋ ํ์ํ์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง๋ง OneHotEncoder๋ ์๋ ๋์ (ํฉ๋นํ ์ด์ ๊ฐ ์๋ ์๋ ) ๊ทธ๋ ๊ฒ ๋์ด ์์ต๋๋ค.
์ค์ ๋ก ์ต๋๊ฐ ๊ธฐ๋ฐ ๋ฒ์ฃผํ๋ฅผ ์ค๋จํ๋ฉด ๊ตฌํ(์ง์ ์ค๋จ ํ)์ด ๋ ๊ฐ๋จํด์ง๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๊ฐ ๊ทธ ๊ฒฝ๋ก๋ฅผ ์ ํํ๋ค๋ฉด ์ต์
์ด encoded_input
/ ordinal_input
๊ฐ ์๋๋ผ legacy_mode=True/False
์ฌ์ผ ํ๋ค๋ ๋ฐ ๋์ํฉ๋๋ค.
n_values='auto'์ผ ๋ ์ถ๋ ฅ์ ์ค์ ์ฐจ์ด๊ฐ ๋ฌด์์ธ์ง ์๊ธฐ์์ผ ์ฃผ์ญ์์ค.
์ ๋ฐ? ๋๋ active_features_๊ฐ ๊ทธ๊ฒ๋ค์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ง๋ค์๋ค๊ณ ์๊ฐํ์ต๋๋ค.
๋์ผํ์ง๋ง ์๋ง๋ ๋ญ๊ฐ๋ฅผ ์๊ณ ์์ ๊ฒ์
๋๋ค.
์ํ, ์คํด๊ฐ ํ๋ ธ์ต๋๋ค :-)
ํ์ฌ OneHotEncoder๊ฐ ์ค์ ๋ก ์ด๋ป๊ฒ ์๋ํ๋์ง ์๋ชป ์ดํดํ์ต๋๋ค. ๊ฐ์ด [2, 3, 5, 2]์ธ ํน์ฑ์ด ํ๋ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ํ์ฌ OneHotEncoder์๋ [0, 1, 2, 3, 4, 5] ๋ฒ์ฃผ๊ฐ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค(ํ์ฌ CategoricalEncoder์๋ ๋ฒ์ฃผ [2, 3, 5]). ๊ทธ๋ฌ๋ active_features_
๋ [2, 3, 5]์ผ ๋ฟ์ด๋ฉฐ ๊ธฐ๋ณธ์ ์ผ๋ก n_values='auto'
์ ๊ธฐ๋ณธ๊ฐ๊ณผ ๋์ผํ๊ฒ ๋ง๋๋ ๊ฒ์ด ๋ง์ต๋๋ค.
๋ฐ๋ผ์ n_values
์ ์๋ฅผ ์ ๋ฌํ๋ ๊ฒฝ์ฐ(์์ ๊ฒฝ์ฐ category=[0, 1, 2, 3, 4, 5]์ ๊ฒฝ์ฐ n_values=6
) ์ค์ ๋ก API ๋ณ๊ฒฝ์ด ๋ ์นดํ
๊ณ ๋ฆฌ์ ์(๋ ์ด์ ์ฌ์ฉ๋์ง ์์/์ ๊ฑฐ๋จ).
๊ทธ๋ฆฌ๊ณ categories=range(6)
์ฌ์ฉ์๊ฐ ์ฝ๊ฒ ๊ต์ฒดํ ์ ์์ต๋๋ค.
ํผ๋์ ๋๋ ค ์ฃ์กํฉ๋๋ค.
๊ทธ๋ฐ ์ ์์ ์ฐ๋ฆฌ๋ legacy_mode
์ต์
์กฐ์ฐจ ํ์ํ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ด๋ถ์ ์ผ๋ก n_values=6
๋ฅผ categories=range(6)
ํ๊ณ ์ด์ ๋ํ ๊ฒฝ๊ณ ๋ฅผ ํ์ํ ์ ์์ต๋๋ค(ํ์ง๋ง ์ค์ ํ
์คํธ์์ ์ด๋ฅผ ํ์ธํด์ผ ํจ).
๋ค๋ฅธ ์ฐจ์ด์ ์ ๋ณด์ด์ง ์๋ ๋ฒ์ฃผ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฒ์
๋๋ค. OneHotEncoder์ ํ์ฌ ๋์์ผ๋ก, ๋ณด์ด์ง ์๋ ๊ฐ์ด ๋ฒ์(0, max) ๋ด์ ์์ผ๋ฉด handle_unknow='error'
(๊ธฐ๋ณธ๊ฐ)์ด๋๋ผ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ธฐ์กด ๋์์ ์ ์งํ๋ ค๋ฉด ์ฌ์ฉ์๊ฐ ์๋์ผ๋ก handle_unknown='ignore'
์ค์ ํด์ผ ํ๋ค๋ ๊ฒฝ๊ณ ๋ฅผ ํ์ํ์ฌ ๋ณ๋๋ก ํด๊ฒฐํ ์๋ ์์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ ๋์น ์ ์๋ ์ ์ผํ ๊ธฐ๋ฅ์ ๋ฒ์(0, max)(ํ์ฌ OneHotEncoder์์๋ '์ ์ ์์'์ผ๋ก ๊ฐ์ฃผ๋์ง ์์) ๋ด์ ์๋ ์ ์ ์๋ ๋ฒ์ฃผ์ ๊ทธ๋ณด๋ค ํฐ ๋ฒ์ฃผ(> max, ํ์ฌ ์ด๋ฏธ ๊ฐ์ฃผ๋๊ณ ์์) ๊ฐ์ ๊ตฌ๋ณ์ ๋๋ค. OneHotEncoder์์ ์ ์ ์์).
์๋์, ๊ทธ๊ฒ์ ์ฐ๋ฆฌ๊ฐ ์ ์ ์๋ํ ์ข
๋ฅ์ ๊ฒ์
๋๋ค.
๊น๋ค๋กญ๊ฒ. ํ์ฌ ํ๋์ ์ ์งํ ํฉ๋นํ ์ด์ ๊ฐ ์๋ ํ,
์ฐ๋ฆฌ๋ฅผ ์ฒ์ฒํ ๋ฏธ๋๋ก ๋ฐ๋ ค๊ฐ๋ ค๋ฉด legacy_mode๊ฐ ์์ด์ผ ํฉ๋๋ค.
์๋์, ๊ทธ๊ฒ์ ์ฐ๋ฆฌ๊ฐ ์ด์ ์ ์๋ํ ์ข ๋ฅ์ด๋ฉฐ ๋๋ฌด ๊น๋ค๋กญ์ต๋๋ค.
์ด "์๋์ค"๊ฐ ์ด๋ค ์ธก๋ฉด์ ์๋ฏธํ๋์ง ๋ช
ํํ ํ ์ ์์ต๋๊น?
๋ด๊ฐ ์๊ฐํ๊ธฐ์ legacy_mode
๋ ํ์์๋ค๊ณ ?
๋ค, ๊ฑฐ๊พธ๋ก ๋ ๋ฌด์ธ๊ฐ๋ฅผ ๋ง๋ค ์ ์๋ค๋ ์๊ฐ์ผ๋ก
ํธํ ๊ฐ๋ฅํ๊ณ ์์ผ๋ก ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ฒ
๋ค, ์ด์ ๋ฒ์ ๊ณผ ํธํ ๊ฐ๋ฅํ๊ณ ์์ผ๋ก ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ฒ์ ๋ง๋ค ์ ์๋ค๋ ์๊ฐ์
๊ทธ๊ฒ์ ๋ด๊ฐ ์ ์ํ๋ ค๊ณ ํ ๊ฒ์ด ์๋๋๋ค. ๋๋ legacy_mode
ํค์๋๊ฐ ์๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค๊ณ ์๊ฐํ๋ค๋ ๊ฒ์ ๋ถ๋ช
ํ ํ๊ณ ์ถ์์ต๋๋ค. ๋ง์ ์ฒ๋ผ ์ญ๋ฐฉํฅ๊ณผ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ฒ๊ณผ ํธํ๋๋๋ก ํ๋ ๊ฒ์ด ์๋๋ผ ๊ธฐ์กด ํค์๋์ ๋์์ ๋ ์ด์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์
๋๋ค.
๊ตฌ์ฒด์ ์ผ๋ก ๋งํ์๋ฉด n_values
์ ๊ธฐ๋ณธ๊ฐ์ด ์๋ ๊ฐ์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ ์ ์์ผ๋ฉฐ categories
์ฌ์์ผ๋ก ๋์ฒด๋์ด์ผ ํฉ๋๋ค. handle_unknow
์ ์ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ ํ์ฌ ํผํฉ ๋์ ์ ์ฒด ๋ฌด์ ๋๋ ์ ์ฒด ์ค๋ฅ๋ฅผ ์ ํํ๋๋ก ์ฌ์ฉ์๊ฐ ๋ช
์์ ์ผ๋ก ์ค์ ํด์ผ ํฉ๋๋ค(๊ทธ๋ ์ง ์์ผ๋ฉด ์ฌ์ฉ ์ค๋จ ๊ฒฝ๊ณ ๊ฐ ๋ฐ์ํจ).
๊ทธ๋์ ๋ด๊ฐ .fit([[5]]).transform([[4]]) ํ๋ฉด n_values์ ๊ฐ์,
category ๋ฐ handle_umknown ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๊น?
2018๋
1์ 25์ผ ์ค์ 9์ 32๋ถ, "Joris Van den Bossche" [email protected]
์ผ๋ค:
๋ค, ๊ฑฐ๊พธ๋ก ๋ ๋ฌด์ธ๊ฐ๋ฅผ ๋ง๋ค ์ ์๋ค๋ ์๊ฐ์ผ๋ก
ํธํ ๊ฐ๋ฅํ๊ณ ์์ผ๋ก ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ฒ๊ทธ๊ฒ์ ๋ด๊ฐ ์ ์ํ๋ ค๊ณ ํ ๊ฒ์ด ์๋๋๋ค. ๋๋ ๊ทธ๊ฒ์ ์๊ฐํ๋ค๋ ๊ฒ์ ๋ถ๋ช ํํ๊ณ ์ถ์์ต๋๋ค.
๋ง๋ฒ์ฒ๋ผ ๊ฐ์ง์ผ๋ก์จ๊ฐ ์๋๋ผ legacy_mode ํค์๋๋ฅผ ๊ฐ์ง ์์ ์ ์์ต๋๋ค.
์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ๊ณผ ์ฐ๋ฆฌ๊ฐ ๋ฏธ๋์ ์ํ๋ ๊ฒ ๋ชจ๋
๊ธฐ์กด ํค์๋์ ๋์.๊ตฌ์ฒด์ ์ผ๋ก ๋งํ์๋ฉด ๊ธฐ๋ณธ๊ฐ์ด ์๋ n_values โโ๊ฐ์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ผ๋ฉฐ
๋ฒ์ฃผ ์ฌ์์ผ๋ก ๋์ฒด๋์ด์ผ ํฉ๋๋ค. ํธ๋ค_์ ์ ์๋ ๊ฒฝ์ฐ
์ ์ ๋ฐ์ดํฐ๋ ์ฌ์ฉ์๊ฐ ๋ช ์์ ์ผ๋ก ์ค์ ํ์ฌ ์ ์ฒด
ํ์ฌ ํผํฉ ๋์ ์ ๋ฌด์ ๋๋ ์ ์ฒด ์ค๋ฅ ๋ฐ์(๊ทธ๋ ์ง ์์ผ๋ฉด ๋น์ถ์ฒ
๊ฒฝ๊ณ ๊ฐ ๋ฐ์ํจ).โ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/scikit-learn/scikit-learn/issues/10521#issuecomment-360296569 ,
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AAEz6-DrQWep22_gs-hg9cC0u19B1_PSks5tN6-HgaJpZM4RpUE8
.
๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๋์ ๋ฒ์ฃผ๋ฅผ ์ค์ ํด์ผ ํ๋๋ก ๋ง๋ค ์ ์์ต๋๊น?
๋ช
์์ ์ผ๋ก ๊ฒฝ๊ณ ๊ฐ ์๋ ๋ ๊ฑฐ์ ๋ชจ๋๊ฐ ์ ์ฉ๋ฉ๋๊น? ๊ทธ๊ฑฐ์ผ?
๋น์ ์ด ์ ์ํ๋ ๊ฒ์ ๋ฌด์์
๋๊น?
์ง์ ์ค๋จ ์ค์ ์นดํ ๊ณ ๋ฆฌ๋ฅผ ๋ช ์์ ์ผ๋ก ์ค์ ํด์ผ ํ๊ณ ๊ฒฝ๊ณ ๊ฐ ์๋ ๋ ๊ฑฐ์ ๋ชจ๋๊ฐ ์ ์ฉ๋๋๋ก ๋ง๋ค ์ ์์ต๋๊น? ๊ทธ๊ฒ์ด ๋น์ ์ด ์ ์ํ๋ ๊ฒ์ ๋๊น?
์, ์ฌ์ ํ ๋๋ฝ๋ ์ผ์ด์ค์ผ ์ ์์ง๋ง ์ด๊ฒ์ด ๊ฐ๋ฅ ํ๋ค๊ณ ์๊ฐ ํฉ๋๋ค(๋ค์ ์ฃผ์ ์ค์ ์ฝ๋ฉํ์ฌ ํ์ธํ ๊ฒ์ ๋๋ค).
๋ค์ํ '๋ ๊ฑฐ์' ์ฌ๋ก:
handle_unknown='error' / 'ignore'
๋ ์์๋๋ก ์๋ํฉ๋๋ค.๊ฒฝ์ฐ์ ์ค๋จ ๊ฒฝ๊ณ n_values='auto'
๋ง์ ์ธ์ ๋ ๊ฒ์
๋๋ค fit
(์ ๋ง ์ ํฉํ์ง ์์ต๋๋ค)ํ์ง ๊ฑด์ค์ ์์ง๋ง, ์ฐ๋ฆฌ๋ ์ฌ์ฉ์๊ฐ ๊ทธ๊ฒ์ ์ ๋ฌํ๊ณ ์๋์ง ์๊ณ ์๋ง ์ ํฉ์ ๋ฌธ์์ด ๋ฐ์ดํฐ๊ฐ ์๋ ์ซ์ ๋ฐ์ดํฐ์
๋๋ค.
์ฐ๋ฆฌ๋ ์ผ๋ฐ์ ์ผ๋ก ์ด๋ค ๊ฒฝ์ฐ์๋ ์ ํฉํ ๋๊น์ง ๊ฒฝ๊ณ ๋ฅผ ๋ฐ์์ํค์ง ์์ผ๋ฏ๋ก ๊ฑฑ์ ํ์ง ๋ง์ญ์์ค.
์ ๊ฒ.
๊ทธ ์ ๋ต์ ๋๋ถ๋ถ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
์ค์ ๋ก ๋ฐ์ดํฐ์ ๋ฌธ์์ด์ ์ค๋ํํด์ผ ํ๋์ง ํ์คํ์ง ์์ต๋๋ค.
๊ทธ๋ ์ง๋ง. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด ํ๊ณ ์ถ์ต๋๋ค. ์นดํ
๊ณ ๋ฆฌ๊ฐ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ ๋ ๊ฑฐ์ ๋ชจ๋๊ฐ ํ์ฑํ๋ฉ๋๋ค.
์ค์ ๋์ง ์์ ๋ฐ์ดํฐ๋ ๋ชจ๋ ์ ์์ ๊ฒฝ์ฐ?
ํ ๊ฐ์ง ์ง๋ฌธ: ๋ฒ์ฃผ ๋ฐ n_values โโ๋งค๊ฐ๋ณ์๊ฐ ๊ธฐ๋ณธ๊ฐ์ธ ๊ฒฝ์ฐ ๋ค์์ ์ํํ์ญ์์ค.
์ฐ๋ฆฌ๋ ์นดํ
๊ณ ๋ฆฌ๋ฅผ ๊ฒ์ํฉ๋๋ค_? n_values๊ฐ ๋ช
์์ ์ผ๋ก ์ค์ ๋ ๊ฒฝ์ฐ ๊ฒ์ํฉ๋๊น?
์นดํ
๊ณ ๋ฆฌ_?
2018๋
1์ 29์ผ ์ค์ 10์ "Joris Van den Bossche" ์๋ฆผ @github.com
์ผ๋ค:
๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๋์ ๋ฒ์ฃผ๋ฅผ ์ค์ ํด์ผ ํ๋๋ก ๋ง๋ค ์ ์์ต๋๊น?
๋ช ์์ ์ผ๋ก ๊ฒฝ๊ณ ๊ฐ ์๋ ๋ ๊ฑฐ์ ๋ชจ๋๊ฐ ์ ์ฉ๋ฉ๋๊น? ๊ทธ๊ฑฐ์ผ?
๋น์ ์ด ์ ์ํ๋ ๊ฒ์ ๋ฌด์์ ๋๊น?์, ์ฌ์ ํ ๋๋ฝ๋ ์ผ์ด์ค์ผ ์ ์์ง๋ง ์ด๊ฒ์ด ๊ฐ๋ฅ ํ๋ค๊ณ ์๊ฐ ํฉ๋๋ค.
๋ค์์ฃผ ์ค์ ์ฝ๋ฉ์ผ๋ก ํ์ธ).๋ค์ํ '๋ ๊ฑฐ์' ์ฌ๋ก:
- n_values='์๋'(๊ธฐ๋ณธ๊ฐ)
- handle_unknown='๋ฌด์' -> ๊ด์ฐฎ์, ๋์์ ๋ณํ ์์
- handle_unknown='์ค๋ฅ' -> ๋ฌธ์ , ๋ฒ์์ ๊ฐ์ด ์ฌ์ ํ
๋ฌด์๋จ, ๋ฒ์ ์ด๊ณผ ๊ฐ ์ค๋ฅ
- ๊ฐ๋ฅํ ํด๊ฒฐ์ฑ :
- ์ ํฉ, ๋ฒ์๊ฐ ์ฐ์์ ์ด๋ฉด => ์ํธ, ๋ณ๊ฒฝ ์์
ํ๋(์ด์ LabelEncoder๋ฅผ ๊ฒฐํฉํ ๋ชจ๋ ์ฌ๋๋ค์ ์ํด, ์ด๋
๋ด๊ฐ ์๊ฐํ๋ ์ ํ์ ์ธ ์ฌ์ฉ ์ฌ๋ก)- ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ: ์ฌ์ฉ ์ค๋จ ๊ฒฝ๊ณ ๋ฐ์
๊ทธ๋ค์ ์ด ํ๋์ ์ ์งํ๊ธฐ ์ํด ์นดํ ๊ณ ๋ฆฌ๋ฅผ ๋ช ์์ ์ผ๋ก ์ค์ ํด์ผ ํฉ๋๋ค(๊ทธ๋ฆฌ๊ณ
๋ด๋ถ์ ์ผ๋ก ๋ ๊ฑฐ์ ๋ชจ๋ ์ฌ์ฉ)- n_values=๊ฐ
- ์ด๊ฒ์ ๋ด๋ถ์ ์ผ๋ก category=[range(value)]๋ก ๋ณํ๋ ์ ์์ต๋๋ค.
์ฌ์ฉ์๊ฐ ์ง์ ํด์ผ ํ๋ค๋ ๋น์ถ์ฒ ๊ฒฝ๊ณ ๋ฅผ ์ ๊ธฐํฉ๋๋ค.
๋ฏธ๋- ์ด ๊ฒฝ์ฐ handle_unknown='error' / 'ignore'๊ฐ ์์๋๋ก ์๋ํฉ๋๋ค.
n_values='auto'์ธ ๊ฒฝ์ฐ ์ฌ์ฉ ์ค๋จ ๊ฒฝ๊ณ ๋ ๋ค์์์๋ง ๋ฐ์ํฉ๋๋ค.
์ ํฉํ๊ณ ๊ฑด์ค ์์๋ ์ ํฉํ์ง ์์ง๋ง(์ค์ ๋ก ์ด์์ ์ด์ง๋ ์์)
์ฌ์ฉ์๊ฐ ๋ฌธ์์ด์ด ์๋ ์ซ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค.
๋ฐ์ดํฐ.โ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/scikit-learn/scikit-learn/issues/10521#issuecomment-361104495 ,
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AAEz6x8xnyZXBLij-DCC45JyYNf8pA5kks5tPPwXgaJpZM4RpUE8
.
๋น์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก์ด ์ํ๋ : ๋ ๊ฑฐ์ ๋ชจ๋๋ ๋ฐ์ดํฐ๊ฐ ๋ชจ๋ ์ ์์ ๊ฒฝ์ฐ ๋ฒ์ฃผ๊ฐ ์ค์ ๋์ง ์์ ๊ฒฝ์ฐ ํ์ฑํ ๋ฐ?
๊ทธ๋ ์ต๋๋ค(์ค์ ๋ก๋ ๊ฑฐ์ ๊ฐ์ ๊ฒ์ ๋๋ค)
ํ ๊ฐ์ง ์ง๋ฌธ: category์ n_values โโ๋งค๊ฐ๋ณ์๊ฐ ๊ธฐ๋ณธ๊ฐ์ธ ๊ฒฝ์ฐ category_๋ฅผ ๊ฒ์ํฉ๋๊น? n_values๊ฐ ๋ช ์์ ์ผ๋ก ์ค์ ๋ ๊ฒฝ์ฐ category_๋ฅผ ๊ฒ์ํฉ๋๊น?
๋๋ ๊ฐ์ธ์ ์ผ๋ก ์ด๋ฏธ ๋ ๊ฑฐ์ ๋ชจ๋์์๋ ์ ์ธํฐํ์ด์ค์ ์์ฑ์ ๊ฐ๋ฅํ ํ ๋ง์ด ์ ๊ณตํ ๊ฒ์
๋๋ค. ๋ฐ๋ผ์ ๋ ๊ฒฝ์ฐ ๋ชจ๋ categories_
๊ณ์ฐํฉ๋๋ค(์กฐ๊ธ ๋ ๋ง์ ์์
์ด ํ์ํ๋๋ผ๋)
๊ทธ๋์ ์์ ๋
ผ๋ฆฌ๋ฅผ ์ฝ๋์ ๋ฃ์ผ๋ ค๊ณ ํ๊ณ (PR์ ๋ํ ์ผ๋ถ ์
๋ฐ์ดํธ๋ฅผ ํธ์ํจ) n_values
๋๋ categories
๊ฐ ์ค์ ๋์ง ์์ ๊ฒฝ์ฐ ์ ์ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ์ ๋ํด ํ ๊ฐ์ง ๋ ์ง๋ฌธ์ด ์์ต๋๋ค( 'legacy_mode'์ ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ). ๋ฌธ์ ๋ ์ถ๋ก ๋ ๋ฒ์ฃผ๊ฐ ๋จ์ํ ์ฐ์์ ์ธ ๋ฒ์(0, 1, 2, 3, ... max)์ธ ๊ฒฝ์ฐ ์ ๋์๊ณผ ์ด์ (๋ ๊ฑฐ์) ๋์ ๊ฐ์ ์ฐจ์ด๊ฐ ์์ผ๋ฉฐ ์ฐ๋ฆฌ๋ ๊ทธ๋ ์ง ์๋ค๋ ์ฌ์ค์ ์์ต๋๋ค. ๋ฐ๋์ ์ฌ์ฉ ์ค๋จ ๊ฒฝ๊ณ ๋ฅผ ์ ๊ธฐํด์ผ ํฉ๋๋ค.
์ด ํน์ ๊ฒฝ์ฐ์ ์ํํ ์ ์๋ ๋ช ๊ฐ์ง ๊ฐ๋ฅ์ฑ:
1) ์ด ๊ฒฝ์ฐ(์ถ๋ก ๋ ๋ฒ์ฃผ๊ฐ ์ฐ์ ๋ฒ์์)๋ฅผ ๊ฐ์งํ๊ณ ์ด ๊ฒฝ์ฐ ๊ฒฝ๊ณ ๋ฅผ ๋ฐ์์ํค์ง ๋ง์ญ์์ค.
- ์ฐ๋ฆฌ๊ฐ ์ด๋ฏธ ์ ํฉํ๊ธฐ ๋๋ฌธ์ (์กฐ๊ธ์ ์ถ๊ฐ ์ฝ๋ ๋ณต์ก์ฑ์ผ๋ก) ๊ฐ์งํ ์ ์์ต๋๋ค.
- ์ ์ ๋ฐ์ดํฐ๋ก OneHotEncoder๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ ๋ผ๊ณ ์๊ฐ ํ๋ฉฐ, ์ค์ ๋ก ์ฌ์ฉ์๊ฐ ์ฐ๋ฆฌ์ ๋ฆฌํฉํ ๋ง์ ๋ํด ๊ฑฑ์ ํ ํ์๊ฐ ์๋ ๊ฒฝ์ฐ์ด๋ฏ๋ก ๊ฒฝ๊ณ ๋ก ์ฌ์ฉ์๋ฅผ ๊ท์ฐฎ๊ฒ ํ์ง ์๋ ๊ฒ์ด ์ข์ ๊ฒ์
๋๋ค.
2) ํญ์ ๊ฒฝ๊ณ ๋ฅผ ํ์ํ๊ณ ๊ฒฝ๊ณ ๋ฉ์์ง์ ์ด๋ฌํ ๊ฒฝ์ฐ์ ์ํํ ์์
์ ํ์ํฉ๋๋ค(์ฐ์ ๋ฒ์๊ฐ ์๋ ๊ฒฝ์ฐ ์ํํ ์ค๋ช
๊ณผ ํจ๊ป):
- ๋ฒ์ฃผ๋ก ์ฐ์ ๋ฒ์๋ง ์๋ค๋ ๊ฒ์ ์๊ณ ์๋ ๊ฒฝ์ฐ ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์ํ๊ธฐ๋ฅผ ์ํ๋ฏ๋ก ๊ฒฝ๊ณ ๋ฉ์์ง์ ์ด๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ค๋ช
์ ์ถ๊ฐํ ์ ์์ต๋๋ค(ํํฐ ๊ฒฝ๊ณ ์ ํจ๊ป ์ฝ๋ ์ํ ์ถ๊ฐ, ๋ณต์ฌ ๋ถ์ฌ๋ฃ๊ธฐ)
- ์ด๊ฒ์ ์ ์ฌ์ ์ธ ์ด์ ์ LabelEncoder๋ฅผ ์ฌ์ฉํ์ฌ ์ ์๋ฅผ ์์ฑํ ๊ฒฝ์ฐ ์ด์ OneHotEncoder๋ฅผ ์ง์ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒฝ๊ณ ๋ฉ์์ง๋ฅผ ์ถ๊ฐํ ์ ์๋ค๋ ๊ฒ์
๋๋ค(ํ์ฌ ์ด๊ฒ์ด ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ํจํด์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค). ๊ทธ๋ ๊ฒํ๋ฉด ๊ฒฝ๊ณ ๋ ์ฌ๋ผ์ง๋๋ค
3) ํญ์ ๊ฒฝ๊ณ ๋ฅผ ๋ฐ์์ํค๋ ๊ฒฝ๊ณ ๋ฅผ ์นจ๋ฌต์ํค๋ ํค์๋๋ฅผ ์ ๊ณตํ์ญ์์ค(์: legacy_mode=False
).
- filterwarnings
๋ฌธ์ ์ฌ์ฉํ๋ผ๋ ์กฐ์ธ(์์ 2๋ฒ ํญ๋ชฉ ์ฐธ์กฐ)์ด ๋๋ฌด ๋ฒ๊ฑฐ๋กญ๋ค๋ฉด ํค์๋๋ฅผ ์ถ๊ฐํ์ฌ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์๋ ์์ต๋๋ค.
- ์ด๊ฒ์ ๋จ์ ์ ์ฌ์ฉ ์ค๋จ์ด ์ ๋ฆฌ๋ ๋ ๋ช ๊ฐ์ง ๋ฆด๋ฆฌ์ค์์ ๋ ์ด์ ํ์ํ์ง ์์ ํค์๋๋ฅผ ๋์
ํ๋ค๋ ๊ฒ์
๋๋ค.
์ ๋ ๊ฐ์ธ์ ์ผ๋ก ์ต์
1 ๋๋ 2์ ์ฐฌ์ฑํฉ๋๋ค. OneHotEncoder ์ ์ LabelEncoder๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ธ ํจํด์ธ ๊ฒ ๊ฐ์ต๋๋ค(๋น ๋ฅธ github ๊ฒ์์์). ์ด ๊ฒฝ์ฐ ํญ์ ์ฐ์ ๋ฒ์๊ฐ ์์ผ๋ฉฐ ์๋ก์ด ๊ตฌํ์ด๋ฏ๋ก ๊ฒฝ๊ณ ํ์ง ์์์ผ ํฉ๋๋ค. ๋ค๋ฅธ ํํธ์ผ๋ก, ์ฐ๋ฆฌ๊ฐ ๊ฒฝ๊ณ ๊ฒฝ์ฐ ์ฐ๋ฆฌ๋ ๊ทธ๋ค์ด LabelEncoder๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ๊ทธ๋ค์ ๋ ์ด์ ํ์๊ฐ ๊ทธ๊ฒ์ ํ ์ ์๋ค๋ ์ฌ์ค์ ๊ฐ๋ฆฌํฌ ์ ์์ต๋๋ค. ์ค์ ๋ก ์ด ์กฐ์ธ์ ๋ช
์์ ์ผ๋ก ์ ๊ณตํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ฌธ์ ๋ ์ฌ์ฉ์๊ฐ ์ด์ ๋จ๊ณ์์ LabelEncoder๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ฒ์ฃผ์ ๊ฐ์ ์ฐ์์ ์ธ ์ ์๋ฅผ ์ผ๋ง๋ ์์ฃผ ์ฌ์ฉํ๋์ง์
๋๋ค.
ํ , ๋ด๊ฐ ์์ ํ ๊ฐ์ง ๊ฒฝ์ฐ๋ ์ฐ์์ ์ด์ง ์์ ์ ์ ์ถ๋ก ๋ฒ์ฃผ(์: [1,3,5])๊ฐ ์์ง๋ง ๋ ๊ฑฐ์ ๋์์ด ์๋ ์๋ก์ด ๋์์ ์ํ ๋์
๋๋ค(์ด ๊ฒฝ์ฐ ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์ํ ์ ์์ต๋๋ค. , ๋ณํ ๋จ๊ณ์์ ๋ณด์ด์ง ์๋ ๊ฐ์ ๋ค๋ฅด๊ฒ ์ฒ๋ฆฌํ๋ฏ๋ก ๋ฒ์(์: 2) ์ฌ์ด์ ๊ฐ์ ์ค๋ฅ๋ฅผ ๋ฐ์์ํค์ง ์์ต๋๋ค.
legacy_mode=False
ํค์๋๋ฅผ ์ ๊ณตํ์ง ์๋ ๊ฒฝ์ฐ ์ ๋์์ ์ป์ ์ ์๋ ์ ์ผํ ๋ฐฉ๋ฒ์ categories=[1,3,5]
๋ฅผ ์๋์ผ๋ก ์ ๋ฌํ๋ ๊ฒ์ด๋ฏ๋ก ์ฝ๊ฐ ๋ถํธํ ์ ์์ต๋๋ค. ์ด๊ฒ์ด ์ต์
3์ ์ ํธํ๊ณ ์์ ํค์๋ legacy_mode=False
๋์
์ ๋ํ ๋ด ์ด์๋ฅผ ํฌ๊ธฐํ๋ ์ด์ ์ผ ์ ์์ต๋๋ค. ํ์)
* ์ด ๊ฒฝ์ฐ๋ง = ์ฐ์ ๋ฒ์๊ฐ ์๋ ์ถ๋ก ๋ ๋ฒ์ฃผ๊ฐ ์๋ ์ ์ ๋ฐ์ดํฐ, ๋ฒ์ฃผ๋ฅผ ์๋์ผ๋ก ์ค์ ํ๊ฑฐ๋ handle_unknown์ ๋ฌด์ํ๋๋ก ์ค์ ํ ์ ์๊ฑฐ๋ ์ํ์ง ์๋ ๊ฒฝ์ฐ.
๊ธด ํ ์คํธ์ ๋ํด ์ฃ์กํ์ง๋ง ์๋นํ ๋ณต์กํฉ๋๋ค. :)
์ฐ๋ฆฌ๋ n_values๊ฐ ์ค์ ๋์ง ์์ ๊ฒฝ์ฐ์ ๋ํด์๋ง ์ด์ผ๊ธฐํ๊ณ ์๋ ๊ฒ์ ๋๋ค. ๋ง์ต๋๊น?
๋๋ 1๋ก ๊ด์ฐฎ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ๋ ์ด์ ๋น์ธ์ง ์์ ๊ฒ์
๋๋ค.
์ด๋ฏธ ๋ ์ด๋ธ ์งํฉ์ ๊ฒ์ฌํด์ผ ํฉ๋๋ค. ๋๋ ๋ํ ๋ฐ์๋ค์ผ ์ ์์๋ค,
๋จ์์ฑ, 3์ ๋ณํ์
๋๋ค. ๊ทธ๊ฒ์ "๋ ๊ฑฐ์์์ ์คํ๋๋ OneHotEncoder
๋ฐฉ๋ฒ. ์์ด ์ฝ๊ฐ ๋ค๋ฅธ ๋์์ ๋ํด category='auto'๋ก ์ค์ ํ์ญ์์ค.
๊ฒฝ๊ณ ."
์ฐ๋ฆฌ๋ n_values๊ฐ ์ค์ ๋์ง ์์ ๊ฒฝ์ฐ์ ๋ํด์๋ง ์ด์ผ๊ธฐํ๊ณ ์๋ ๊ฒ์ ๋๋ค. ๋ง์ต๋๊น?
์(๋ค๋ฅธ ๊ฒฝ์ฐ์๋ ํด๋นํ๋ categories
๊ฐ์ผ๋ก ์ฝ๊ฒ ๋ณํ๋๊ณ , ์ข์ ์ฌ์ฉ ์ค๋จ ๊ฒฝ๊ณ ์ ํจ๊ป ์ ๋์๊ณผ ๋ ๊ฑฐ์ ๋์์ด ๋ค๋ฅด์ง ์์)
3์ ๋ณํ์ "๋ ๊ฑฐ์ ๋ชจ๋์์ ์คํ ์ค์ธ OneHotEncoder์ ๋๋ค. ๊ฒฝ๊ณ ์์ด ์ฝ๊ฐ ๋ค๋ฅธ ๋์์ ๋ํด ๋ฒ์ฃผ๋ฅผ '์๋'์ผ๋ก ์ค์ ํฉ๋๋ค."
์, ์ข์ ์๊ฐ์ด๊ตฐ์! (์ฐ์๋ ๋ฒ์ฃผ์ ๊ฒฝ์ฐ๋ฅผ ๊ฐ์งํ๋์ง ์ฌ๋ถ์ ๊ด๊ณ์์ด). ๊ทธ๋์ ์ฐ๋ฆฌ๋ ์ฝ๋์์ categories
์ ๊ธฐ๋ณธ๊ฐ์ None์ผ๋ก ์ค์ ํ์ต๋๋ค(๊ธฐ๋ณธ๊ฐ์ ์๋ฏธ๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ), ๊ทธ๋์ ์ฐ๋ฆฌ๋ ์ฌ์ฉ์๊ฐ ๊ทธ๊ฒ์ ๋ช
์์ ์ผ๋ก ์ค์ ํ๋์ง ์ ์ ์๊ณ , ๊ทธ๋ฐ ์์ผ๋ก legacy_mode=False
๋ฅผ ๋ํ๋ด๋ ์ข์ ๋ฐฉ๋ฒ์
๋๋ค ์ถ๊ฐ ํค์๋ ์์ด
์, ํ์ง๋ง ๋๊ตฐ๊ฐ ํต๊ณผํ์ง ์๊ณ ์ฌ์ฉํ ๋๋ง๋ค ๊ฒฝ๊ณ ํ๋ ค๋ ๊ฒฝ์ฐ์๋ง
์นดํ
๊ณ ๋ฆฌ. ์ ๋ ดํ ๊ตฌํ ๋ฐฉ์์ด์ง๋ง
์ฌ์ฉ์์๊ฒ ๋ถํ์ํ๊ฒ ์ฅํฉํ๋ฏ๋ก 1์ ์ ํธํฉ๋๋ค.
๊ฐ๋จํ๊ฒ ํ ์ ์์ต๋๋ค.
์ด ์ผ๋ง๋ ์ ์ ํ ์ง์ฅ์ ๋๊น :-/
๋๋ ์๋ก์ด ์ด๋ฆ์ DummyEncoder
;) (DummyClassifier์ ์ฝ๊ฐ ์ถฉ๋ํ์ง๋ง)
@amueller ์์ ๋ด์ฉ์ ๋ชจ๋ ์ฝ์ง ๋ง์ญ์์ค!
๋๋ ๋จ์ง ์ด ๋ฌธ์ ์ ์๋ก์ด ๋
์๋ค์ ์ํด ๋ฉ์ง ์์ฝ์ ํ ๊ณํ์ด์์ต๋๋ค. ์์ ๋
ผ์๋ ์ง๋์น๊ฒ ๋ณต์กํฉ๋๋ค (๋ํ OneHotEncoder์ ํ์ฌ ๋ณต์กํ ๋์์ ์์ง ์์ ํ ์ดํดํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ... :-))
๋๋ ์ ์ด๋ฆ์ DummyEncoder๋ก ์ง์ ํ ์ ์์ต๋๋ค.)
"one-hot"์ด ๋ ๋ง์ ๋ถ์ผ์์ ์๋ ค์ ธ ์๊ธฐ ๋๋ฌธ์ @GaelVaroquaux ๊ฐ ๋ฐ๋ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ด๋ฆ ์ง์ ์ ์ผ๊ด์ฑ์ ์ํด ์ด ์์ ์ ๋ค์ ์ํํ๋ ๊ฒ์ ๊ฐ์น๊ฐ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋์์๋ ๋ช ๋ช ์ ์ผ๊ด์ฑ์ด ์์ต๋๋ค. ์ด์ ๋ํ ๋ ผ์๋ฅผ ์์ฝํ ์ ์์ต๋๊น?
๋๋ "๋๋ฏธ"๊ฐ ํต๊ณํ์๊ฐ ์ฌ์ฉํ๋ ๊ฒ์ด๊ณ ํฌ๋๊ฐ ์ฌ์ฉํ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋งจ ์ ๊ฒ์๋ฌผ์ ์ฌ์ ํ โโ์ ํํ๊ณ ์ฝ์ ๊ฐ์น๊ฐ ์์ผ๋ฉฐ, CategoricalEncoder๋ฅผ ์ ์งํ์ง ์๋ ์ด์ ๋ฅผ ์์ฝํฉ๋๋ค(์ฆ, DummyEncoder ๋์ OneHotEncoder๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค๋ ์๋ฏธ๋ ์๋๋๋ค. ๋ณ๋์ ์ง๋ฌธ์ ๋๋ค)
์๊ธ ์ ์ฝ์์ต๋๋ค. ์ด๊ฒ์ด ๋ด๊ฐ "์ผ๊ด์ฑ์ ์ํด ์ด๊ฒ์ ๋ค์ ํ๋ ๊ฒ์ ๊ฐ์น๊ฐ ์๋ค"๊ณ ๋งํ์ ๋ ์ธ๊ธํ ๊ฒ์ ๋๋ค.
์ด๋ฆฐ ๋ฌธ์
๋น์ ์ ๊ทธ๊ฒ์ ์ค๋ช ํ ์ ์์ต๋๊น?
"์ผ๊ด์ฑ์ ์ํด ์ด ์์ ์ ๋ค์ ์ํํ๋ ๊ฒ์ ๊ฐ์น๊ฐ ์์ต๋๋ค"
์ผ๊ด์ฑ์ ๊ฐ์ง๊ณ "๋ฌด์์ ์์ฉํ๋๊ฐ"์ "๋ฌด์์ ํ๋๊ฐ"์ ๋ช ๋ช ์ฒด๊ณ๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์์ต๋๊น? ๊ทธ๋ ๋ค๋ฉด ๊ทธ๊ฒ์ ์ฌ์ํ ์ด์ ์ ๋ถ๊ณผํ์ต๋๋ค. ๋์๊ฒ ๊ทธ๊ฒ์ ์ฃผ๋ก ๋จ์ผ ํด๋์ค์ ๋ ๋ง์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๋ ํ์ฅ์ฑ์ ๋ฌธ์ ์ ๋๋ค.
์ด๋ฆฐ ๋ฌธ์
๋๋ฝ๋ ๊ฐ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค(https://github.com/scikit-learn/scikit-learn/issues/10465). ์ด๋ฅผ ์ํด ์์ ๋ฐ ์ ํซ ์ธ์ฝ๋ฉ(๋๋ ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ)์ ๋ํด ๋ค๋ฅธ ๋์์ ์ํ ์ ์์ต๋๋ค. ๋ชจ๋ ์ต์
์ ๋ ๋ค์ ๋ํด ์ ํจํฉ๋๋ค. ..). ์ฐ๋ฆฌ๋ ์ด๋ฏธ ๊ธฐ์กด handle_unknown
๊ฐ์ง๊ณ ์์ผ๋ฉฐ ์ด๋ ์์์๋ ์ ์ฉ๋์ง ์๊ณ ์-ํซ ์ธ์ฝ๋ฉ์๋ง ๊ด๋ จ์ด ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ onehot ์ธ์ฝ๋ฉ์ ๋ํ ๊ธฐ๋ฅ ๊ฐ์ค์น์ ๋ํ https://github.com/scikit-learn/scikit-learn/issues/10518์ด ์์์ง๋ง ์์์๋ ๊ด๋ จ์ด ์์์ต๋๋ค(๊ฒฐ๊ตญ ์ด ๋ฌธ์ ๋ ๋ฌธ์ ๊ฐ ์๋์์ต๋๋ค. ColumnTransformer transformer_weights ์ธ์๋ก ๊ฐ์ค์น ๋ถ์ฌ). ๋ํ ์-ํซ์ drop_first
์ ๊ฐ์ ๊ฒ์ ์ถ๊ฐํ๋ผ๋ ๊ธฐ๋ฅ ์์ฒญ๋ ์์ต๋๋ค. ์ด๋ ๋ค์ ์์ ์ธ์ฝ๋ฉ๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค.
์ ์๋ ๋ณ๊ฒฝ ์ฌํญ์ด ๋๋ฝ๋ ๊ฐ์ ์ผ๋ง๋ ๋์์ด ๋ ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ํธํ๋์ง ์๋ ์ต์ ์ ๊ฐ๋ ๊ฒ์ scikit-learn์์ ์์ฃผ ๋ฐ์ํ๋ ์ผ์ ๋๋ค. ์ด์์ ์ด์ง๋ ์์ง๋ง ํฐ ๋ฌธ์ ๋ ์๋๋๋ค.
์ ์๋ ๋ณ๊ฒฝ ์ฌํญ์ด ๋๋ฝ๋ ๊ฐ์ ์ผ๋ง๋ ๋์์ด ๋ ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์ด ๊ฐ์ ๋์์ด๋์ง ์์ต๋๋ค, ๊ทธ๋ฌ๋ ๋ ๋ณต์ก ํนํ ๋ค๋ฅธ ์ธ์ฝ๋ฉ ์ ํ์ ๋ง๋ ํน์ ์ต์ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ํธํ๋์ง ์๋ ์ต์ ์ ๊ฐ๋ ๊ฒ์ scikit-learn์์ ์์ฃผ ๋ฐ์ํ๋ ์ผ์ ๋๋ค. ์ด์์ ์ด์ง๋ ์์ง๋ง ํฐ ๋ฌธ์ ๋ ์๋๋๋ค.
ํ์ฌ๋ก์๋ ํ์คํ ๊ด์ฐฎ์ต๋๋ค. ํธํ๋์ง ์๋ ์ต์
์ด ๋๋ฌด ๋ง์ง ์์ต๋๋ค(ํ์ง๋ง ๋ถ๋ถ์ ์ผ๋ก๋ sparse=True/False
๋ฅผ encoding
์ต์
์ผ๋ก ์ฎ๊ฒผ๊ธฐ ๋๋ฌธ์ด๊ธฐ๋ ํฉ๋๋ค). ๊ทธ๋ฌ๋ ๋ฌธ์ ๋ ๋ฏธ๋์ scikit-learn์์ ์ธ์ฝ๋ฉ ๊ธฐ๋ฅ์ ์ด๋ ์ ๋๋ก ํ์ฅํ๊ธฐ๋ฅผ ์ํ๋์ง์
๋๋ค. ๋ฌผ๋ก ์ง๊ธ ๋๋ต ํ๊ธฐ ์ด๋ ค์ด ์ง๋ฌธ ์
๋๋ค .
์ฐ๋ฆฌ๋ ์ด๋ฏธ '๋จํญ ์ธ์ฝ๋ฉ'์ ๋ํ PR์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ ํด๋์ค UnaryEncoder๋ฅผ ์ถ๊ฐํ๋ ๋์ CategoricalEncoder์ ์ถ๊ฐํด์ผ ํ์ง ์์ต๋๊น? ๋๊ตฐ๊ฐ '๋ฐ์ด๋๋ฆฌ ์ธ์ฝ๋ฉ'์ ์ถ๊ฐํ๊ณ ์ถ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น์? ๋๋ '(ํ๊ท ) ๋์ ์ธ์ฝ๋'?
"ํ๊ท ๋์ ์ธ์ฝ๋"๋ CountTransformer
์ด๊ณ ์ด์ ๋ํ PR์ด ์์ต๋๋ค.)
๊ทธ๊ฒ์ ๋ํ ๋งํฌ๊ฐ ์์ต๋๊น? "CountTransformer"๋ฅผ ๊ฒ์ํด๋ ๊ฒฐ๊ณผ๊ฐ ํ์๋์ง ์์ต๋๋ค.
์ฃ์กํฉ๋๋ค, CountFeaturer #9614
ํ์คํ ๊ด๋ จ์ด ์์ง๋ง ์ ํํ ์๋ฏธ์๋ ๋์ ์ธ์ฝ๋ฉ์ ์๋๋๋ค. ๋ํ ๋์ฒด๊ฐ ์๋ ์ด์ ์ถ๊ฐํ๋ฏ๋ก ๋ฌธ์์ด ๋ฒ์ฃผํ ๋ฐ์ดํฐ์ ๋ํด ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ํ์ง ์์ต๋๋ค(ํ์ง๋ง ์ด๋ ํด๋น PR์ ๋ํ ๋ ๋ง์ ํผ๋๋ฐฑ์ด๋ฉฐ ์ฌ๊ธฐ์์ ๋ ผ์ํ์ง ์์).
๋์ ์ธ์ฝ๋ฉ์ ์๋ฏธํ์ง ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ํ์ง๋ง ์ฌ๊ธฐ์์ ๋๋ฌด ๋ง์ด ์ฐํํ์ง ๋ง์ ;)
๋ฐ๋ผ์ ์ฐ๋ฆฌ๊ฐ ๋๋ตํด์ผ ํ๋ ์ค์ ์ง๋ฌธ์ ์์ฝ์ผ๋ก (์ด ์์๋ก!):
ํ์ฌ CategoricalEncoder
ํฉ๋๊น? ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ์์ด๋์ด๋ ๊ฐ ์ธ์ฝ๋ฉ ์ ํ(ํ์ฌ 'onehot' ๋ฐ 'ordinal' ์ธ์ฝ๋ฉ)์ ๋ํด ํ๋์ ํด๋์ค์ธ ๋ค๋ฅธ ํด๋์ค๋ก ๋ถํ ํ๋ ๊ฒ์
๋๋ค.
์ฌ๋ฌ ํด๋์ค๋ก ๋ถํ ํ๋ฉด 'onehot' ์ธ์ฝ๋ฉ์ OneHotEncoder๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง(์ด์์ ์ผ๋ก๋?) ์ด ํด๋์ค๋ ์ด๋ฏธ ์กด์ฌํฉ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ๊ธฐ์กด OneHotEncoder ํด๋์ค์ ์๋ก์ด 'onehot' ์ธ์ฝ๋ฉ(๋ฌธ์์ด์ ์ง์ํ๊ณ ๋ค๋ฅธ ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ์ง)์ ํตํฉํฉ๋๊น? ์๋๋ฉด ๋ค๋ฅธ ์ด๋ฆ์ ์ ํํฉ๋๊น? (์: DummyEncoder)
๊ธฐ์กด OneHotEncoder์ ํตํฉํ๊ธฐ๋ก ์ ํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ํด๋ ๊ด์ฐฎ์ต๋๊น? OneHotEncoder์ ์ฌ๋ฌ ํค์๋/์์ฑ์ ๋ ์ด์ ์ฌ์ฉํ์ง ์์ผ๋ฉฐ ํน์ ์ฌ์ฉ ์ฌ๋ก(๋ณด์ด๋ ๊ฐ ๋ฒ์ ๋ด์์ ๋ณด์ด์ง ์๋ ๊ฐ์ ์๋์ผ๋ก ๋ฌด์)๋ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๋ ์ด์ ์ฌ์ฉ ์ค๋จ ๊ธฐ๊ฐ ์ดํ.
์์ ๋ ผ์์ ๋๋ถ๋ถ์ ์ง๋ฌธ 3(CategoricalEncoder(encoding='onehot')์ OneHotEncoder์ ํตํฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ณต์กํ ์ธ๋ถ ์ฌํญ)์ ๊ดํ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ๋จผ์ ์ฒ์ 2๊ฐ์ ์ง๋ฌธ์ ๋ํ ๊ฒฐ์ ์ ๋์ํฉ์๋ค.
๋์๊ฒ ๋ ๋ค๋ฅธ ์์ธ์ ๋ชจ๋ ์ฌ๋๋ค์ด ํ์ฌ ์๋ ๋ชจ๋๋ฅผ
OneHotEncoder๊ฐ ์ด์ํฉ๋๋ค. coo๋ฅผ csr๋ก ๋ณํํ๋ ๊ตฌํ๋
๊ธฐ์ด ํ. ์ฌ์ค๊ณํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ๋๋ค์๊ฒ "๋น์ ์ด ํ๋์ ๋จ๊ฑฐ์ด
๋ฌธ์์ด์ ์ธ์ฝ๋ฉํ๋ ค๋ฉด ๋์ CategoricalEncoder๋ก ์ด๋ํ์ญ์์ค."๋ OHE ๋๋ฌธ์ ์ด์ํฉ๋๋ค.
์(๋) ์ด๋ฏธ ๋ฒ์ฃผํ์ ์ํ ๊ฒ์
๋๋ค...
ํ . OneHotEncoder๋ ์ฌ์ฉํ ์ ์์ ๋ ๋ ํจ์จ์ ์ด๊ธฐ ๋๋ฌธ์ ์ ์งํ ๊ฒ ๊ฐ์ต๋๋ค. ์ด์์ ์ผ๋ก๋ ๋ชจ๋ ์ด์ํ ๋์์ ์ ๊ฑฐํ๋ ๊ฒ์ ๋๋ค. ๋๋ ๊ทธ๊ฒ์ ๋น์ถ์ฒํ๊ณ ์ถ์์ง๋ง ์ฐ๋ฆฌ๋ํ์ง ์์์ต๋๋ค ...
๋๋ ๊ทธ๊ฒ์ ๋น์ถ์ฒํ๊ณ ์ถ์์ง๋ง ์ฐ๋ฆฌ๋ํ์ง ์์์ต๋๋ค ...
๋ด POC PR(https://github.com/scikit-learn/scikit-learn/pull/10523)์์ ์ด๋ฆ์ ์ ์ธํ๊ณ OneHotEncoder์ ๊ฑฐ์ ๋ชจ๋ ๊ฒ์ ๋ ์ด์ ์ฌ์ฉํ์ง ์์ต๋๋ค...
ํจ์ฌ ๋ ํจ์จ์ ์ด์ง ์์ต๋๋ค. LabelEncoder์ int์ ๋ํ ๋น ๋ฅธ ๊ฒฝ๋ก๊ฐ ์๋ ๊ฒฝ์ฐ
[0, n_values-1] ๋ฒ์์์ ์ ๋นํ๋๋ค๋ฉด ์ถฉ๋ถํ ๊ฒ์
๋๋ค.
@amueller , ์ธ์ฝ๋ฉ์ ๋ฐ๋ผ ๊ถ๊ทน์ ์ผ๋ก ๋ค๋ฅธ ์ถ๊ฐ ๋งค๊ฐ๋ณ์(์: drop_first, nan ์ฒ๋ฆฌ)๊ฐ ํ์ํ๊ณ ๊ฐ ์ธ์ฝ๋ฉ ํ์์ ๋ํด ๋ค๋ฅธ ๊ฐ๋ณ ์ธ์ฝ๋๋ฅผ ๊ฐ๋ ๊ฒ์ด ์ ๋นํ๋๋ค๋ ๋ฌธ์ ์ ์ค๋๋์์ต๋๊น?
2์ฃผ๋ค์ ๋ด๋ฐฉํ๋ ์ด๊ฑธ ๋ณด๋ ค๊ณ ๋ ธ๋ ฅํ ๊ฒ, ์์์ง? ๊ทธ ์ ์ ์๊ฐ์ด ์์์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง :-/
์ด๊ฒ์ด ์๋ชป๋ ์ง๋ฌธ์ด ์๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๊ทธ๋ฌ๋ ํ์ฌ ๊ตฌํ์ ํ ์ด ๋ด์์ ๋ฒ์ฃผํ๊ณผ ๋น๋ฒ์ฃผํ์ด ํผํฉ๋ ํ ์ด๋ธ๋ก ๋ฌด์์ ํฉ๋๊น? https://github.com/pandas-dev/pandas/issues/17418 ์์ ์์ ๊ฐ์ ธ์ค๊ธฐ
๋ค์๊ณผ ๊ฐ์ ๋ฐ์ดํฐ ํ๋ ์ df = pd.DataFrame([{'apple': 1, 'pear':'a', 'carrot': 1}, {'apple':'a', 'pear':2, 'carrot':3}, {'apple': 2, 'pear':3, 'carrot':1}, {'apple': 3, 'pear':'b', 'carrot': 1}, {'apple': 4, 'pear':4, 'carrot': 1}])
์ ๊ณ ๋ คํ์ญ์์ค.
apple carrot pear
0 1 1 a
1 a 3 2
2 2 1 3
3 3 1 b
4 4 1 4
DictVectorizer๋ ์ด ๊ฒฝ์ฐ์ ๋ด๊ฐ ํ์ํ ๊ฒ์ ์ ํํ ์ ๊ณตํฉ๋๋ค.
from sklearn.feature_extraction import DictVectorizer
enc = DictVectorizer(sparse = False)
enc.fit_transform(df.to_dict(orient='r'))
์ด๊ฒ์ ๋ค์์ ์ ๊ณตํฉ๋๋ค.
array([[ 1., 0., 1., 0., 1., 0.],
[ 0., 1., 3., 2., 0., 0.],
[ 2., 0., 1., 3., 0., 0.],
[ 3., 0., 1., 0., 0., 1.],
[ 4., 0., 1., 4., 0., 0.]])
๋ค์์ ์ฌ์ฉํ์ฌ ์ด์ ๊ธฐ๋ฅ ์ด๋ฆ์ ๋ณผ ์ ์์ต๋๋ค.
enc.feature_names_
['apple', 'apple=a', 'carrot', 'pear', 'pear=a', 'pear=b']
์ CategoricalEncoder์ ๋์ผํ ์ต์ ์ด ์์ผ๋ฉด ์ข์ ๊ฒ์ ๋๋ค.
๋๋ ์ฐ๋ฆฌ๊ฐ ๊ทธ๋ฐ ์ข ๋ฅ์ ํผํฉ ์ฌ๋ก๋ฅผ ๋ค๋ฃฐ ์๊ฐ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ทธ๊ฑด ๋ถ๋๋ฌ์ด ์ผ์ด์ผ. ํ ๊ฐ์ง ๊ฐ๋จํ ํ์ ์ฌ๋ก๋ ์ด์ด ์ซ์์ด์ง๋ง ์ผ๋ถ ๋๋ฝ๋ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ์ ๋๋ค. ๊ฐ๋จํ ํด๊ฒฐ์ฑ ์ NaN์ ๋น ๋ฌธ์์ด๋ก ๋ณํํ ๋ค์ ์์ ์์์์ ๊ฐ์ด DictVectorizer๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๊ฐ์ด ๋๋ฝ๋ ๊ฒฝ์ฐ์ ๋ํ ์ ๊ธฐ๋ฅ์ด ํจ๊ณผ์ ์ผ๋ก ์์ฑ๋์ง๋ง ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ์ซ์ ๊ฐ์ด ๋ณ๊ฒฝ๋์ง ์์ ์ํ๋ก ์ ์ง๋ฉ๋๋ค. ๋๋ ์ด๊ฒ์ด ๋งค์ฐ ์ ์ฉํ ๊ธฐ์ ์์ ๋ฐ๊ฒฌํ์ต๋๋ค.
์๋ก์ด CategoricalEncoder๊ฐ ๋น์ทํ ์์ ์ ์ํํ ์ ์์ต๋๊น?
์ฐ๋ฆฌ๋ ์ฌ์ฉ์๊ฐ NaN์ ๋ณ๋์ ์นดํ
๊ณ ๋ฆฌ๋ก ์ทจ๊ธํ๋๋ก ํ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํ์ต๋๋ค.
๋๋ ์ ์ฌ. ๊ทธ๋ฌ๋ ์ด๋ ์์์ ์ซ์ ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ด ์ฒ๋ฆฌํ๋ ๊ฒ๊ณผ๋ ๋ค๋ฆ
๋๋ค.
๋ฌธ์์ด๊ณผ ๋ค๋ฆ
๋๋ค.
๊ทธ ์ข์ ์๋ฆฌ.
๋ ๊ฐ์ง ์ฌ์ฉ ์ฌ๋ก๊ฐ ์์ต๋๋ค. ์ซ์ ๊ฐ์ ๋ฌธ์์ด๊ณผ ๋ค๋ฅด๊ฒ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์ ์ฉํ ํน์ ์๋ฅผ ์ค๋ช ํ๊ฒ ์ต๋๋ค. ๋ ๋์ ์๋ฃจ์ ์ด ์์ ์ ์์ต๋๋ค.
ํฐ ๋ฒ์์ ๊ฐ์ ์ทจํ๋ ์ ์ ์ซ์ ๊ธฐ๋ฅ์ด ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ผ๋ถ ์์ ๊ฐ์ ๊ฒฝ์ฐ ์ ํํ ๊ฐ์ด ์ค์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ ํฐ ๊ฐ์ ๊ฒฝ์ฐ ๊ทธ๋ ์ง ์์ ๊ฒ์ผ๋ก ์์ฌ๋ฉ๋๋ค. ๊ฐ๋จํ ์์ ์ ๋ชจ๋ ์์ ๊ฐ์ ๋ฌธ์์ด๋ก ๋ณํํ๊ณ ์์ ๊ฐ์ด DictVectorizer๋ฅผ ์คํํ ๋ค์ ๊ธฐ๋ฅ ์ ํ์ ์ํํ๊ฑฐ๋ ์ ํธํ๋ ๋ถ๋ฅ๊ธฐ๋ฅผ ์ง์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.
๊ทธ๋์ ๋น์ ์ ๊ทธ๊ฒ์ ๋น์ ํ ์ด์ฐํ์ ์ฌ์ฉํ๊ณ ์์ต๋๊น? ๋ค์ ๋ฆด๋ฆฌ์ค๋
๊ณ ์ ๋๋น ์ด์ฐํ๊ธฐ๋ฅผ ํฌํจํ ๊ฐ๋ฅ์ฑ์ด ์์ง๋ง ๋ก๊ทธ์์ ๊ณ์
๋ณํ ๋๋ ๋ถ์์ ๋ณํ์ ์ฌ์ฉ์๊ฐ ์ํํ๋ ๊ฒ๊ณผ ๋งค์ฐ ์ ์ฌํ๊ฒ ์๋ํด์ผ ํฉ๋๋ค.
์ํ๋... ํ์ง๋ง ๋ก๊ทธ ๋ณํ๋ง์ผ๋ก๋ ์ค์ ์ ์ถฉ๋ถํ ์ ์์ต๋๋ค.
2018๋ 2์ 25์ผ 18์ 10๋ถ์ lesshaste [email protected]์์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
๊ทธ ์ข์ ์๋ฆฌ.
๋ ๊ฐ์ง ์ฌ์ฉ ์ฌ๋ก๊ฐ ์์ต๋๋ค. ํน์ ์๋ฅผ ์ค๋ช ํ๊ฒ ์ต๋๋ค
์ซ์ ๊ฐ์ ๋ฌธ์์ด๊ณผ ๋ค๋ฅธ ๊ฒ์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์ ์ฉํ ๊ฒฝ์ฐ
๋๋ฅผ์ํ. ๋ ๋์ ์๋ฃจ์ ์ด ์์ ์ ์์ต๋๋ค.ํฐ ๋ฒ์๋ฅผ ์ทจํ๋ ์ ์ ์ซ์ ๊ธฐ๋ฅ์ด ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
๊ฐ์น. ๊ทธ๋ฌ๋ ์ผ๋ถ ์์ ๊ฐ์ ๊ฒฝ์ฐ ์ ํํ ๊ฐ์ด
์ค์ํ๋ค. ๋ ํฐ ๊ฐ์ ๊ฒฝ์ฐ ๊ทธ๋ ์ง ์์ ๊ฒ์ผ๋ก ์์ฌ๋ฉ๋๋ค. ๊ฐ๋จํ
ํด์ผ ํ ์ผ์ ๋ชจ๋ ์์ ๊ฐ์ ๋ฌธ์์ด๋ก ๋ณํํ๊ณ DictVectorizer๋ฅผ ์คํํ๋ ๊ฒ์ ๋๋ค.
์์ ๊ฐ์ด ์ ํํ ๋ค์ ๊ธฐ๋ฅ ์ ํ์ ์ํํ๊ฑฐ๋ ์ข์ํ๋ ๊ฒ์ ์ฌ์ฉํ์ญ์์ค.
์ง์ ๋ถ๋ฅ๊ธฐ.โ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/scikit-learn/scikit-learn/issues/10521#issuecomment-368288727 ,
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AAEz60cmjwlDVKGyXc6oPyIC9oLbptSgks5tYQdvgaJpZM4RpUE8
.
@jnothman ํธ์์คํธ๋ฅผ ์ ์ธํ๊ณ ๋ ์ด๋ค ์๋ฏธ
์ ๋ค๋ฆญ์ ๋ํ ๋ณ์์ ๋ํด ๋๋ฌด ๋ง์ด ์๊ณ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
ํ์ํ ์ข
๋ฅ๋ก ๋ณํํ์ญ์์ค.
2018๋ 2์ 25์ผ 20์ 37๋ถ์ lesshaste [email protected]์์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
@jnothman https://github.com/jnothman
ํธ์์คํธ. 1...1024์ ๊ฐ ์ค ์ผ๋ถ๊ฐ ์๋ฏธ๊ฐ ์๋ค๊ณ ์๊ฐํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
์ฆ 22๋ 21๊ณผ ์๋นํ ๋ค๋ฅธ ํน์ ํ ๊ฒ์ ๋ํ๋ ๋๋ค.
- ์ฌ๊ธฐ์ ๋ก๊ทธ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ ๋์์ด ๋์ง ์์ต๋๋ค. ํ์ง๋ง ๋๋ ๋ชจ๋ ๊ฐ์น๋ฅผ ๋ ๋๊ณ ์ถ์ด
1024 ์ซ์๋งํผ์ ๊ทธ ํน์ ๊ฐ์ด ํฐ ์๋ฏธ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.โ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/scikit-learn/scikit-learn/issues/10521#issuecomment-368295895 ,
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AAEz65bOdVB6k7rCAcgLBYz_NslxXWV0ks5tYSnggaJpZM4RpUE8
.
@jnothman ์ข ๋ ๋ช ํํ๊ฒ ์ผ๋ถ ๊ฐ์ด ์๋ค๊ณ ์๊ฐํ์ง๋ง
@lesshaste NaN์ ๋ณ๋์ ์นดํ
๊ณ ๋ฆฌ๋ก ๋ถ๋ฅํ๋ ๋ฌธ์ ๋ https://github.com/scikit-learn/scikit-learn/issues/10465๋ฅผ ์ฐธ์กฐ
ํน์ ๋น์ ํ ์ด์ฐํ ๋๋ ํผํฉ ์ซ์/๋ฌธ์์ด ์ธ์ฝ๋ฉ์ ๋ํด ๋ ์์ธํ ๋
ผ์ํ๋ ค๋ฉด ์์ ๋กญ๊ฒ ์ ๋ฌธ์ ๋ฅผ ์ฌ์ญ์์ค. ๊ทธ๋ฌ๋ ์ด ๋ฌธ์ ๋ ์๋ ๋ฌธ์ , ์ฆ CategoricalEncoder/OneHotEncoder์ ๋ค๋ฅธ ํด๋์ค์์ ๋ช
๋ช
๋ฐ ๊ตฌ์ฑ์ ์ด์ ์ ๋ง์ถ๊ณ ์ถ์ต๋๋ค.
2์ฃผ๋ค์ ๋ด๋ฐฉํ๋ ์ด๊ฑธ ๋ณด๋ ค๊ณ ๋ ธ๋ ฅํ ๊ฒ, ์์์ง? ๊ทธ ์ ์ ์๊ฐ์ด ์์์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง :-/
@amueller ๊ด์ฐฎ์ต๋๋ค. ์ด์จ๋ ์ด๊ฒ์ ์ํด ์ฐจ๋จ๋ PR์ ๋ํด ์์ผ๋ก 2์ฃผ ๋์ ์์ ํ ์๊ฐ์ด ์์ ๊ฒ์ ๋๋ค. ๊ทธ ํ์๋ ๋ค์ ์์ ํ ์๊ฐ์ ๊ฐ์ ธ์ผ ํฉ๋๋ค.
@amueller ์๊ฐ์ด ์์๋์?
@amueller ๋ด๊ฐ OrdinalEncoder์ OneHotEncoder์์ CategoricalEncoder๋ฅผ ๋ถํ ํ๊ธฐ ์ํ PR ์์ ์ ์งํํ๋ ๊ฒ์ ๋ํด ๊ด์ฐฎ์ต๋๊น?
๊ฒฐ์ํด์ ์ฃ์กํฉ๋๋ค. ๊ด์ฐฎ์ ๋ณด์ด์ง๋ง ์ค์ ๋ก ๊ฒํ ํ ์ ์๋๋ก 2์ฃผ๋ฅผ ์ฃผ์ค ์ ์์ต๋๊น? ๊ฐ์ฌ ํด์!
@amueller ๋ฌธ์ ์์ต๋๋ค. ์ ์๊ฒ๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค :-)
ํ์ง๋ง, ๋๋ ์ง๊ธ ์ด๊ฒ์ ๋ค์ ๋ณผ ๊ณํ์ด๋ค. ๊ทธ๋์ ๋น์ ์ด ์ด๊ฒ์ ๋ณผ ์ ์๋ค๋ฉด ๊ทธ๊ฒ์ ํ์๋ฐ์ ๊ฒ์
๋๋ค. PR(https://github.com/scikit-learn/scikit-learn/pull/10523)์ ๋ํด ํด์ผ ํ ์ผ์ด ์์ผ๋ฏ๋ก ์์ง ์์ธํ ๊ฒํ ํ์ง ๋ง์ญ์์ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๊ฐ ์ ์ํ๋ ๊ฒ).
๋ง์ ์๊ฐ์ ๋ค์ด๊ธฐ ์ ์ ๋ต๋ณ์ ๋ณด๊ณ ์ถ์ ์ฃผ์ ์ง๋ฌธ์ CategoricalEncoder๋ฅผ ์ฌ๋ฌ ํด๋์ค๋ก ๋ถํ ํด๋ ๊ด์ฐฎ์์ง, ๊ทธ๋ฆฌ๊ณ ์ด ๊ฒฝ์ฐ OneHotEncoder๋ฅผ ์ฌ์ฌ์ฉํด๋ ๊ด์ฐฎ์์ง(์ฆ, ํ์ฌ (์ด์ํ) ๊ธฐ๋ฅ ์ค ์ผ๋ถ๋ฅผ ๋ ์ด์ ์ฌ์ฉํ์ง ์์). ํด๋น ์ง๋ฌธ์ https://github.com/scikit-learn/scikit-learn/issues/10521#issuecomment -363851328 ๋ฐ https://github.com/scikit-learn/scikit-learn/issues/10521#issuecomment์ ์์ฝ๋์ด
(๊ทธ๋ฆฌ๊ณ ์ผ๋จ ๊ทธ ๋ถ๋ถ์ ๋์ํ๋ฉด PR์์ ์ค์ ๊ตฌํ์ ๋ํด ๋ ผ์ํ ๊ฒ์ด ์ฌ์ ํ ๋ง์ต๋๋ค :))
PR์ ์ ๋ฐ์ดํธํ์ต๋๋ค https://github.com/scikit-learn/scikit-learn/pull/10523 , ๊ฒํ ์ค๋น
์กฐ์ฌ์ค๋ฝ๊ฒ ๋์์ค๊ฒ ์ต๋๋ค ;)
IMHO์์ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ์ฐ๋ฆฌ๊ฐ ๋ ผ์ํ๋ ๋ชจ๋ ์ธ์ฝ๋์ ๋ํ ๋ฒ์ฉ API(์: ๋งค๊ฐ๋ณ์ ๋ฐ ๋์ ํจํด)์ ๋๋ค.
์ถ์ https://github.com/scikit-learn-contrib/categorical-encoding ?
category_encoders
ํจํค์ง์์ ๋ชจ๋ ์ธ์ฝ๋์๋ ์ด์ OneHotEncoder์ categorical_features
์ ์ ์ฌํ cols
์ธ์๊ฐ ์์ต๋๋ค(์ ํํ ๊ฐ์ ์ข
๋ฅ์ ๊ฐ์ ํ์ฉํ์ง๋ ์์ง๋ง). ์๋ฅผ ๋ค์ด http://contrib.scikit-learn.org/categorical-encoding/onehot.html์ ์ฐธ์กฐํ์ญ์์ค
์ด๋ https://github.com/scikit-learn/scikit-learn/pull/10523 ์์ categorical_features
์ฌ์ฉ ์ค๋จ ์ฌ๋ถ์ ๋ํ ํ์ฌ ๋
ผ์์ ๊ด๋ จ์ด ์์ต๋๋ค.
๋๋จธ์ง๋ ์ค์ ๋ก ์ถฉ๋ํ๋ ํค์๋๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค(์ด ์์ ์์ sklearn์ ์ถ๊ฐํ์ง ์์ ๋ฐ์ดํฐ ํ๋ ์์ ํน์ ํ ๋ค๋ฅธ ํค์๋๊ฐ ์์). OneHotEncoder ๋ฐ OrdinalEncoder์ ์ด๋ฆ์ ์ต์ํ category_encoders
ํจํค์ง์ ์ผ์นํฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
CategoricalEncoder๋ฅผ ๋๋๋ฆฐ๋ค๋ ์์ด๋์ด๋ ๋๋ฅผ ์๋นํ ์ฌํ๊ฒ ํ์ง๋ง ์ ์๊ฐ์๋
๋ฏธ๋์ ์ฌ์ฉ์๊ฐ ์ต์ 2์ ๋ํด ๋ ์ ๋น์ค๋ฌ์ํ ๊ฒ์ด๋ผ๋ ๋ง์ด ์ณ์ต๋๋ค.
๋ฌธ์ ๋ ์ฐ๋ฆฌ๊ฐ ์ด๊ฒ์ OHE์ ๋ํ ๋ณ๊ฒฝ์ผ๋ก ๊ตฌํํ๋ ค๊ณ ์๋ํ๋ค๋ ๊ฒ์ ๋๋ค.
์ค๋ ์๊ฐ ๋์ ๊ทธ๊ฒ์ ๊ฒฐ์ฝ ๋ ์ง ์์์ต๋๋ค. ์๋ง๋ ์๋ํ๋ ๊ฒ์ด ์ข์ ๊ฒ์ ๋๋ค.
์ ์๋ ๋ด์ฉ์ ๋ฐ๋ฅธ OneHotEncoder ๋ ์คํธ๋ง ์์
๋ณ๊ฒฝํ์ฌ ์ ์์ ์ธ์ง ํ์ธํ ์ ์์ต๋๋ค.