์์ #970 .
#929์์ @freddyaboulton ๊ณผ์ ํ ๋ก ์ ๋ฐ๋ฅด๋ฉด DataCheck์ ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ ๋ฌํ ์ ์๋ค๋ฉด ์ข์ ๊ฒ์
๋๋ค. DataChecks ์ธ์คํด์ค๋ฅผ ์ธ์คํด์คํํ์ง ์๊ณ DataChecks ํด๋์ค๋ฅผ ๋งค๊ฐ๋ณ์๋ก search()
์ ๋ฌํ๊ธฐ ๋๋ฌธ์ DataCheck API๋ฅผ ์
๋ฐ์ดํธํ๊ณ AutoML๊ณผ ์ํธ์์ฉํ๋ ๋ฐฉ์์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
@angela97lin ์ด์ ๋ํ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ค๋ช ํด ์ฃผ์๊ฒ ์ต๋๊น?
@dsherry ๋ฌผ๋ก ์
๋๋ค! #929์์ @freddyaboulton ๊ณผ ๋๋ InvalidTargetDataCheck
๊ฐ ์ฒ๋ฆฌํ๊ณ ์๋ ๋ฌธ์ ์ ์ ํ์ ์๊ณ ์๋ค๋ฉด ํจ์ฌ ๋ ์ ์ฉํ ์ ์๋ค๋ฉด ์ผ๋ง๋ ์ข์์ง ๋
ผ์ํ๊ณ ์์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฌธ์ ๊ฐ ์ด์ง ๋ถ๋ฅ๋ผ๋ ๊ฒ์ ์์์ง๋ง ๋ฐ์ดํฐ ๊ฒ์ฌ์ ๋ํ ์
๋ ฅ์ ๋ ๊ฐ ์ด์์ ํด๋์ค๊ฐ ์๋ ๊ฒฝ์ฐ ๊ฒฝ๊ณ /์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ด๋ป๊ฒ๋ ์ ๋ฌํ๊ฑฐ๋ ๋ฐ์ดํฐ ๊ฒ์ฌ์ ๋ ๋ง์ ์ ๋ณด๋ฅผ ์ ๋ฌํ ์ ์์ผ๋ฉด ์ข์ ๊ฒ์
๋๋ค. ๋ถํํ๋ ์ด๊ฒ์ ์ธ์คํด์ค๊ฐ ์๋ ํด๋์ค๋ฅผ ์ ๋ฌํ๋ ํ์ฌ ๋์์ธ์์๋ ์ ์๋ํ์ง ์์ต๋๋ค.
๋๋ BinaryClassificationInvalidTargetDataCheck์ ๊ฐ์ ๊ฐ ๋ฌธ์ ์ ํ์ ๋ํ ๋ฐ์ดํฐ ๊ฒ์ฌ ํด๋์ค๋ฅผ ์์ฑํ ์ ์์ง๋ง ์ด๋ DefaultDataChecks์ ํฌํจํด์ผ ํ๋ ํญ๋ชฉ์ ๊ฒฐ์ ํ ๋(๋๋ DefaultBinaryClassificationDataChecks๋ก ๋ถ๋ฅํด์ผ ํ๋ ๊ฒฝ์ฐ) ๋งค์ฐ ๋ณต์กํด์ง ์ ์์ต๋๋ค.
@angela97lin @freddyaboulton ๊ณผ ๋ฐฉ๊ธ ๋ ผ์ํ์ต๋๋ค.
์ฐ๋ฆฌ๋ ํ์ดํ๋ผ์ธ์์ component_graph
์ ์ฌ์ฉํ๋ ํจํด์ ๋ฏธ๋ฌ๋งํ๋ ์์ด๋์ด๋ฅผ ์ข์ํฉ๋๋ค.
DataCheck
ํ์ ํด๋์ค(๋๋ ๋์ผํ์ง๋ง DataChecks
๋ด๋ถ) ๋ชฉ๋ก์ผ๋ก automl ๊ฒ์ํ๋๋ก ์ง์ ํ ์ ์์ต๋๋ค.DataChecks
ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.parameters
ํ์ดํ๋ผ์ธ๊ณผ ์ ์ฌํ data_check_parameters
dict๋ฅผ ์ ๋ฌํฉ๋๋ค.DataChecks
๋ฅผ ์ง์ ์ฌ์ฉํ๋ ค๋ ๊ฒฝ์ฐ ์ ์ฌํ ํจํด์ ๋ฐ๋ฅผ ์ ์์ต๋๋ค.data_check_parameters
๋ ๊ธฐ๋ณธ์ ์ผ๋ก None
$์ด์ด์ผ ํ๋ฏ๋ก ํ์ํ์ง ์์ ๊ฒฝ์ฐ ๋ง๋ค ํ์๊ฐ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ฐ์ดํฐ ๊ฒ์ฌ์์ ํ์ ์ธ์๊ฐ ๋๋ฝ๋ ๊ฒฝ์ฐ(์ problem_type
) ์ด๊ธฐํ ์ค๋ฅ๊ฐ ๋ฐ์ํด์ผ ํฉ๋๋ค.์ด๊ฒ์ด automl ๊ฒ์์์ ์ด๋ป๊ฒ ๋ณด์ผ ์ ์๋์ง์ ๋ํ ์ค์ผ์น์ ๋๋ค:
# today this helper standardizes the input to a list of `DataCheck` instances, and wraps that in a `DataChecks` instance
# after this work, this would standardize the input to a `DataChecks` class.
# if `data_checks` was already a `DataChecks` class, do nothing. else if `data_checks` is a list of `DataCheck` classes, define a `AutoMLDataChecks` class to wrap and return that
data_checks_class = self._validate_data_checks(data_checks)
# next we create the `DataChecks` instance by passing in data checks parameters
data_check_parameters = {'Target Datatype Data Check': {'problem_type': self.problem_type}}
data_checks = data_checks_class(data_check_parameters)
data_check_results = data_checks.validate(X, y)
์ง์ ์ ์ธ ์ฌ์ฉ๋ฒ์ ๋น์ทํ ๊ฒ์ ๋๋ค.
๋ค์ ๋จ๊ณ
TargetDatatype
๋ฐ์ดํฐ ๊ฒ์ฌ(์ด๋ฆ ๋ฏธ์ ) ์ถ๊ฐ๋ฅผ ์ถ์ ํ๋ ๋ฌธ์ ๋ฅผ ์ ์ถํ ๊ฒ์
๋๋ค. ํด๋น ๋ฐ์ดํฐ ๊ฒ์ฌ์๋ problem_type
๋งค๊ฐ๋ณ์๊ฐ ์ ๋ฌ๋์ด์ผ ํฉ๋๋ค.TargetDatatype
์ด์๋ ๋์์ ์ง์ด ๋ค๊ณ ์ด๊ฒ์ ๋น๋ํด์ผ ํฉ๋๋ค! ๐ ๏ธ ๐@dsherry ๊ณํ์ด ์ข์ ๋ณด์
๋๋ค! ๋ด๊ฐ ์ถ๊ฐํ ์ ์ผํ ๊ฒ์ ์ ๋ฐ์ดํฐ ๊ฒ์ฌ๋ฅผ ์์ฑํ๋ ๊ฒ๋ณด๋ค ์ด๋ฏธ ์กด์ฌํ๋ InvalidTargetDataCheck
๋ฅผ ๋ณด๊ฐํ๋ ๊ฒ์ ์ ํธํ์ง๋ง ๋ ๊ฐ์ง ์ ๊ทผ ๋ฐฉ์ ๋ชจ๋ ์ ์๊ฒ ์ ํฉํ๋ค๋ ๊ฒ์
๋๋ค. ์ด๊ฒ์ ์ ํํ๋ ์ฌ๋์ problem_type
๊ฐ ๋ฐ์ด๋๋ฆฌ์ผ ๋ ํ๊ฒ์ด ๊ณ ์ ํ ๊ฐ์ 2๊ฐ๋ง ๊ฐ์ง๊ณ ์๋์ง ํ์ธํ์ญ์์ค. ์ด๊ฒ์ #929์ ๋ํ ๋ฆฌ๋ทฐ์์ ์ธ๊ธ๋์์ต๋๋ค.
if problem_type == "binary" and len(set(y)) != 2:
# Warn that we do not have two unique values in y
@angela97lin @freddyaboulton ์ด ๋ฌธ์ ๋ฅผ ์ฌ์ฉํ์ฌ a) ๋งค๊ฐ๋ณ์ํ๋ฅผ ์ง์ํ๊ธฐ ์ํด automl ๋ฐ ๋ฐ์ดํฐ ๊ฒ์ฌ API๋ฅผ ์
๋ฐ์ดํธํ๊ณ b) ๋ชจ๋ ๋์์ ๋ํด ๋์์ ํ์ธํ๊ณ ์ง๋ฅํ ์ค๋ฅ๋ฅผ ๋ฐ์์ํค๊ธฐ ์ํด InvalidTargetDataCheck
์
๋ฐ์ดํธ๋ฅผ ๋ชจ๋ ์ถ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ง์ํ๋ ์ ํ.
๋ฐฉ๊ธ ๋ฒ๊ทธ #970์ ์ ์ถํ๊ธฐ ๋๋ฌธ์ ์ธ๊ธํ๊ณ ์์ธํ ์ดํด๋ณด๋ฉด ๋ฌธ์ ๊ฐ ์์์ ์์ ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋์ ์ด๊ฒ์ #970์ ๋ซ์ ๊ฒ์ ๋๋ค.
@dsherry ์ผ๋ง๋ ์์์ ์ ํ๊ฐ! ๋์๊ฒ ์ข์ ์๋ฆฌ์ ๋๋ค ๐
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@angela97lin @freddyaboulton ์ด ๋ฌธ์ ๋ฅผ ์ฌ์ฉํ์ฌ a) ๋งค๊ฐ๋ณ์ํ๋ฅผ ์ง์ํ๊ธฐ ์ํด automl ๋ฐ ๋ฐ์ดํฐ ๊ฒ์ฌ API๋ฅผ ์ ๋ฐ์ดํธํ๊ณ b) ๋ชจ๋ ๋์์ ๋ํด ๋์์ ํ์ธํ๊ณ ์ง๋ฅํ ์ค๋ฅ๋ฅผ ๋ฐ์์ํค๊ธฐ ์ํด
InvalidTargetDataCheck
์ ๋ฐ์ดํธ๋ฅผ ๋ชจ๋ ์ถ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ง์ํ๋ ์ ํ.๋ฐฉ๊ธ ๋ฒ๊ทธ #970์ ์ ์ถํ๊ธฐ ๋๋ฌธ์ ์ธ๊ธํ๊ณ ์์ธํ ์ดํด๋ณด๋ฉด ๋ฌธ์ ๊ฐ ์์์ ์์ ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋์ ์ด๊ฒ์ #970์ ๋ซ์ ๊ฒ์ ๋๋ค.