Scikit-learn: LabelBinarizer 및 LabelEncoderλŠ” νŒŒμ΄ν”„λΌμΈκ³Ό ν˜Έν™˜λ˜μ§€ μ•ŠλŠ” μ„œλͺ…을 λ§žμΆ”κ³  λ³€ν™˜ν•©λ‹ˆλ‹€.

에 λ§Œλ“  2014λ…„ 04μ›” 26일  Β·  6μ½”λ©˜νŠΈ  Β·  좜처: scikit-learn/scikit-learn

νŒŒμ΄ν”„λΌμΈμ—μ„œ LabelBinarizer 및 LabelEncoder λ₯Ό μ‚¬μš©ν•˜λ €κ³  ν•˜λ©΄ 이 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

sklearn/pipeline.pyc in fit_transform(self, X, y, **fit_params)
    141         Xt, fit_params = self._pre_transform(X, y, **fit_params)
    142         if hasattr(self.steps[-1][-1], 'fit_transform'):
--> 143             return self.steps[-1][-1].fit_transform(Xt, y, **fit_params)
    144         else:
    145             return self.steps[-1][-1].fit(Xt, y, **fit_params).transform(Xt)

TypeError: fit_transform() takes exactly 2 arguments (3 given)

μ΄λŠ” 클래슀의 fit 및 transform μ‹œκ·Έλ‹ˆμ²˜ κ°€ λŒ€λΆ€λΆ„μ˜ λ‹€λ₯Έ 좔정기와 λ‹€λ₯΄κ³  단일 인수만 ν—ˆμš©ν•˜κΈ° λ•Œλ¬ΈμΈ 것 κ°™μŠ΅λ‹ˆλ‹€.

이것은 κ½€ μ‰¬μš΄ μˆ˜μ •μ΄λΌκ³  μƒκ°ν•©λ‹ˆλ‹€(μ„œλͺ…을 def(self, X, y=None) ). 기꺼이 ν’€ λ¦¬ν€˜μŠ€νŠΈλ₯Ό 보낼 수 μžˆμ§€λ§Œ μ„œλͺ…에 λ‹€λ₯Έ μ΄μœ κ°€ μžˆλŠ”μ§€ ν™•μΈν•˜κ³  μ‹Άμ—ˆμŠ΅λ‹ˆλ‹€. λ‚΄κ°€ μƒκ°ν•˜μ§€ λͺ»ν•œ λ°©μ‹μœΌλ‘œ.

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

λ‚˜λŠ” 이 νŽ˜μ΄μ§€μ—μ„œ λ§Žμ€ 뢀정적인 λ°˜μ‘μ΄ μžˆμ—ˆλ‹€λŠ” 것을 μ•ˆλ‹€. LabelBinarizer 및 LabelEncoder의 λͺ©μ μ— λŒ€ν•΄ μ˜€λž«λ™μ•ˆ μ˜€ν•΄κ°€ μžˆμ—ˆλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€. μ΄λŠ” κΈ°λŠ₯이 μ•„λ‹ˆλΌ λŒ€μƒμ„ μœ„ν•œ κ²ƒμž…λ‹ˆλ‹€. λΆ„λͺ…νžˆ 그듀은 λ‚΄ μ‹œλŒ€ 이전에 μ„€κ³„λ˜μ—ˆμœΌλ©° 이름이 잘λͺ»λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

μ‚¬μš©μžκ°€ μ˜€λž«λ™μ•ˆ 이 λͺ©μ μœΌλ‘œ CountVectorizer(λ˜λŠ” 데이터 ν”„λ ˆμž„μ—μ„œ 온 경우 dataframe.to_dict(orient='records') κ°€ μžˆλŠ” DictVectorizer)λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€κ³  μƒκ°ν•˜μ§€λ§Œ μ΅œκ·Όμ— CategoricalEncoder (#9151 )λ₯Ό λ§ˆμŠ€ν„°λ‘œ κ°€μ Έκ°ˆ 수 μžˆμ§€λ§Œ 릴리슀 전에 OneHotEncoer 및 μƒˆ OrdinalEncoder둜 둀링될 수 μžˆμŠ΅λ‹ˆλ‹€(#10521).

λ‚˜λŠ” 이것이 λΆ„λͺ…νžˆ λΆˆλ§Œμ„ 가진 λŒ€μ€‘μ˜ μš”κ΅¬λ₯Ό μΆ©μ‘±μ‹œν‚€κΈ°λ₯Ό λ°”λžλ‹ˆλ‹€.

거의 5λ…„ λ™μ•ˆ 이 ν”„λ‘œμ νŠΈμ˜ κ°œλ°œμ„ μœ„ν•΄ μ—„μ²­λ‚œ μ–‘μ˜ 자유 μ‹œκ°„μ„ μžμ› 봉사해 온 μ‚¬λžŒμœΌλ‘œμ„œ(μ΅œκ·Όμ—λŠ” 이 ν”„λ‘œμ νŠΈμ— μ°Έμ—¬ν•˜κΈ°λ„ ν–ˆμŠ΅λ‹ˆλ‹€) 건섀적인 κΈ°μ—¬λ³΄λ‹€λŠ” 뢀정적인 λ°˜μ‘μ˜ 크기λ₯Ό 보고 μžˆμŠ΅λ‹ˆλ‹€. λ„μ„œκ΄€μ— κ°€λŠ” 것은 맀우 μŠ¬ν”„λ‹€. λ²”μ£Όν˜• μž…λ ₯을 μœ„ν•œ μƒˆλ‘œμš΄ λ³€ν™˜κΈ°κ°€ μ•„λ‹ˆλΌ μƒˆλ‘œμš΄ νŒŒμ΄ν”„λΌμΈκ³Ό 같은 것을 μž‘μ„±ν•΄μ•Ό ν•œλ‹€λŠ” μœ„μ˜ λ‚΄ 응닡은 λ‚΄ 뢀뢄에 λŒ€ν•œ μ˜€ν•΄μ˜€μŠ΅λ‹ˆλ‹€. 이 ν”„λ‘œμ νŠΈλ₯Ό μœ μ§€ κ΄€λ¦¬ν•˜λŠ” μ—„μ²­λ‚œ μž‘μ—…λŸ‰.

λͺ¨λ“  6 λŒ“κΈ€

λ‚˜λŠ” 당신이 그것을 μˆ˜μ •ν•˜λŠ” 것이 μ˜³λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

2014λ…„ 4μ›” 26일 19μ‹œ 37뢄에 hxu [email protected]이 λ‹€μŒκ³Ό 같이 μΌμŠ΅λ‹ˆλ‹€.

LabelBinarizer 및 LabelEncoderλ₯Ό μ‚¬μš©ν•˜λ €κ³  ν•˜λ©΄ 이 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.
κ΄€λ‘œ:

fit_transform(self, X, y, *_fit_params)의 sklearn/pipeline.pyc
141ν™”
142 if hasattr(self.steps[-1][-1], 'fit_transform'):--> 143 return self.steps[-1][-1].fit_transform(Xt, y, *_fit_params)
144 기타:
145 return self.steps[-1][-1].fit(Xt, y, *_fit_params).transform(Xt)
TypeError: fit_transform()은 μ •ν™•νžˆ 2개의 인수λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€(3개 제곡).

이것은 클래슀의 적합 및 λ³€ν™˜ μ„œλͺ… https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/preprocessing/label.py#L85 κ°€ λŒ€λΆ€λΆ„μ˜ λ‹€λ₯Έ 좔정기와 λ‹€λ₯΄κ³ 

λ‚˜λŠ” 이것이 κ½€ μ‰¬μš΄ μˆ˜μ •μ΄λΌκ³  μƒκ°ν•©λ‹ˆλ‹€(κ·Έλƒ₯ μ„œλͺ…을 def(self,
X, y=None)) ν’€ λ¦¬ν€˜μŠ€νŠΈλ₯Ό 보내고 μ‹Άμ§€λ§Œ
μ„œλͺ…이 μ›λž˜λŒ€λ‘œμΈ λ‹€λ₯Έ μ΄μœ κ°€ μžˆλŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€.
λ‚΄κ°€ μƒκ°ν•˜μ§€ λͺ»ν•œ κ²ƒμž…λ‹ˆλ‹€.

β€”
이 이메일에 직접 λ‹΅μž₯ν•˜κ±°λ‚˜ Gi tHubhttps://github.com/scikit-learn/scikit-learn/issues/3112μ—μ„œ ν™•μΈν•˜μ„Έμš”.
.

#3113μ—μ„œ λ ˆμ΄λΈ” 인코딩이 μ‹€μ œλ‘œ Pipeline μ†ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 이 문제λ₯Ό μˆ˜μ •ν•˜μ§€ μ•ŠκΈ°λ‘œ κ²°μ •ν–ˆμŠ΅λ‹ˆλ‹€.

@jnothman , μ•Œκ³  싢은 λŒ€λ‘œ: νŒŒμ΄ν”„λΌμΈμ—μ„œ λ²”μ£Όν˜• κΈ°λŠ₯을 벑터화해야 ν•˜λŠ” 경우 λŒ€μ‹  무엇을 ν•΄μ•Ό ν•©λ‹ˆκΉŒ?

νŠΉμ • 사둀λ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ κ³ μœ ν•œ Pipeline-like μ½”λ“œ(κΈ°μ‘΄ μ½”λ“œμ—μ„œ 상속)λ₯Ό μž‘μ„±ν•˜λŠ” 것이 κ°€μž₯ μ’‹μŠ΅λ‹ˆλ‹€.

νŒŒμ΄ν”„λΌμΈμ—μ„œ LabelBinarizerλ₯Ό μ‚¬μš©ν•˜λŠ” λŒ€μ‹ μ— λ‚˜λ§Œμ˜ λ³€ν™˜κΈ°λ₯Ό κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€.

class CustomBinarizer(BaseEstimator, TransformerMixin):
    def fit(self, X, y=None,**fit_params):
        return self
    def transform(self, X):
        return LabelBinarizer().fit(X).transform(X)

νŠΈλ¦­μ„ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€!

νŽΈμ§‘ν•˜λ‹€:

이것은 더 λ‚˜μ€ μ†”λ£¨μ…˜μž…λ‹ˆλ‹€:
https://github.com/scikit-learn/scikit-learn/pull/7375/files#diff -1e175ddb0d84aad0a578d34553f6f9c6

λ‚˜λŠ” 이 νŽ˜μ΄μ§€μ—μ„œ λ§Žμ€ 뢀정적인 λ°˜μ‘μ΄ μžˆμ—ˆλ‹€λŠ” 것을 μ•ˆλ‹€. LabelBinarizer 및 LabelEncoder의 λͺ©μ μ— λŒ€ν•΄ μ˜€λž«λ™μ•ˆ μ˜€ν•΄κ°€ μžˆμ—ˆλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€. μ΄λŠ” κΈ°λŠ₯이 μ•„λ‹ˆλΌ λŒ€μƒμ„ μœ„ν•œ κ²ƒμž…λ‹ˆλ‹€. λΆ„λͺ…νžˆ 그듀은 λ‚΄ μ‹œλŒ€ 이전에 μ„€κ³„λ˜μ—ˆμœΌλ©° 이름이 잘λͺ»λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

μ‚¬μš©μžκ°€ μ˜€λž«λ™μ•ˆ 이 λͺ©μ μœΌλ‘œ CountVectorizer(λ˜λŠ” 데이터 ν”„λ ˆμž„μ—μ„œ 온 경우 dataframe.to_dict(orient='records') κ°€ μžˆλŠ” DictVectorizer)λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€κ³  μƒκ°ν•˜μ§€λ§Œ μ΅œκ·Όμ— CategoricalEncoder (#9151 )λ₯Ό λ§ˆμŠ€ν„°λ‘œ κ°€μ Έκ°ˆ 수 μžˆμ§€λ§Œ 릴리슀 전에 OneHotEncoer 및 μƒˆ OrdinalEncoder둜 둀링될 수 μžˆμŠ΅λ‹ˆλ‹€(#10521).

λ‚˜λŠ” 이것이 λΆ„λͺ…νžˆ λΆˆλ§Œμ„ 가진 λŒ€μ€‘μ˜ μš”κ΅¬λ₯Ό μΆ©μ‘±μ‹œν‚€κΈ°λ₯Ό λ°”λžλ‹ˆλ‹€.

거의 5λ…„ λ™μ•ˆ 이 ν”„λ‘œμ νŠΈμ˜ κ°œλ°œμ„ μœ„ν•΄ μ—„μ²­λ‚œ μ–‘μ˜ 자유 μ‹œκ°„μ„ μžμ› 봉사해 온 μ‚¬λžŒμœΌλ‘œμ„œ(μ΅œκ·Όμ—λŠ” 이 ν”„λ‘œμ νŠΈμ— μ°Έμ—¬ν•˜κΈ°λ„ ν–ˆμŠ΅λ‹ˆλ‹€) 건섀적인 κΈ°μ—¬λ³΄λ‹€λŠ” 뢀정적인 λ°˜μ‘μ˜ 크기λ₯Ό 보고 μžˆμŠ΅λ‹ˆλ‹€. λ„μ„œκ΄€μ— κ°€λŠ” 것은 맀우 μŠ¬ν”„λ‹€. λ²”μ£Όν˜• μž…λ ₯을 μœ„ν•œ μƒˆλ‘œμš΄ λ³€ν™˜κΈ°κ°€ μ•„λ‹ˆλΌ μƒˆλ‘œμš΄ νŒŒμ΄ν”„λΌμΈκ³Ό 같은 것을 μž‘μ„±ν•΄μ•Ό ν•œλ‹€λŠ” μœ„μ˜ λ‚΄ 응닡은 λ‚΄ 뢀뢄에 λŒ€ν•œ μ˜€ν•΄μ˜€μŠ΅λ‹ˆλ‹€. 이 ν”„λ‘œμ νŠΈλ₯Ό μœ μ§€ κ΄€λ¦¬ν•˜λŠ” μ—„μ²­λ‚œ μž‘μ—…λŸ‰.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰