νλμ ν« μΈμ½λλ μλ λ²μ£Όν κΈ°λ₯μ λͺ¨λ μμ€μ λν κΈ°λ₯μ μμ±ν©λλ€.
from evalml.pipelines import OneHotEncoder
import pandas as pd
df = pd.DataFrame({"category": ["a", "b"], "number": [4,5 ]})
OneHotEncoder().fit_transform(df).to_dataframe()
category_a
λ° category_b
μ΄μ μμ ν λμΌμ μμ μμΌλ―λ‘ νλκ° μ€λ³΅λ©λλ€. μ΄λ μΆμ κΈ° νΌν
μ λΆμ μ μΈ μν₯μ λ―ΈμΉ μ μμ΅λλ€. κΈ°λ³Έμ μΌλ‘ νλλ₯Ό μμ ν΄μΌ νλ€κ³ μκ°ν©λλ€.
μ°Έκ³ λ‘ @rpeck
π― % λΆμ μ μΈ κ²½μ° μ΄μ μμ ν΄μΌ ν©λλ€.
μ°λ¦¬κ° λ¨Όμ OHEλ₯Ό μννλ©΄ sklearnμ΄ μ΄λ₯Ό νμ₯νμ§ μκΈ°λ₯Ό λ°λλλ€. Freddyκ° λ§νλ―μ΄ μλ²½ν 곡μ μ±μ κ°λ λ κ°μ μ΄μ μμ±νλ κ²μΌλ‘ μκ°ν μ μμ΅λλ€.
λ°μ΄λ리λ₯Ό νλκ° μλ λ κ°μ μ΄λ‘ νμ₯νλ λ° λ κ°μ§ λ¬Έμ κ° μμ΅λλ€.
@freddyaboulton Q: OHE μ΄μ λν μμ λ°μ΄ν° νλ μμ μ΄μ λΆλ μμμ μΌλ‘ νμν©λλ€. μ΄κ² μ λ§ μ¬μ€μΈκ°μ?
@rpeck λ€!
@freddyaboulton λλ°? μ΄μ νλ€. λλ μ§μ ν λΆμΈ λλ 0/1 μ μ μΈμλ λ³Έ μ μ΄ μμ΅λλ€. νΈλ¦¬ λͺ¨λΈμ΄ μ€μ λ‘ μ΄κ²μ μ΄λ»κ² μ²λ¦¬νλμ§ κΆκΈν©λλ€. κ·Έκ²μ λμκ² λμ λμκ° μμ΅λλ€.
μ½λμ μ 3λ²μΉ: Thou Shalt Not Make == λΆλ μμμ λΉκ΅
(OK, Math.NaN
μλ ν)
ν , λλ μ°λ¦¬κ° μ΄κ²μνκ³ μλ€κ³ μκ°νμ΅λλ€!
λμν©λλ€. κΈ°λ³Έ implμ μ€μ ν΄μΌ νλ νλκ·ΈμΌ λΏμ΄λΌκ³ μκ°νμ΅λλ€.
@dsherry @freddyaboulton drop
맀κ°λ³μλ₯Ό ν΅ν΄ μ§μνλ κ²μ²λΌ 보μ΄μ§λ§ μ¬μ©μ μ
λ ₯λ§ κ³ λ €νκ³ implμμ μ¬μ©νμ§ μμΌλ―λ‘ μ΄ λ¬Έμ λ drop
λν κΈ°λ³Έκ° μ€μ μ μΆμ ν©λλ€. μμ μ΄μΈμ λ€λ₯Έ κ²μΌλ‘?
https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html
μ°λ¦¬λ first
λλ if_binary
λ‘ κ° μ μμΌλ©°, μ¬λ°λ₯Έ νΈμΆμ΄ 무μμΈμ§ νμ ν μ μμ΅λλ€.
@angela97lin κΈ°λ³Έκ°μ λ³κ²½νλ κ²μΌλ‘ μΆ©λΆνλ€λ κ²μ΄ λ§μ΅λλ€! first
λ λ²μ£Ό μκ° > 2μΈ κ²½μ°μλ μλ²½νκ² κ³΅μ νΉμ±μ νΌν΄μΌ νκΈ° λλ¬Έμ κ°μΌ ν κΈΈμ΄λΌκ³ μκ°ν©λλ€. @rpeck μ 무μμ΄λΌκ³ μκ°
μ΄κ²μ μ‘°κΈ μ½κ³ μ΄ λ§ν¬λ₯Ό μ°Ύμμ΅λλ€: https://inmachineswetrust.com/posts/drop-first-columns/
μ£Όμ λ΄μ©:
RE @rpeck μ 첫 λ²μ§Έ μ견: "λ€λ₯Έ ννμ κΈ°λ₯ 곡μ
μ΄κ²μ μ΄μ§ μ¬λ‘μ μ ν©νμ§λ§ μ¬λ¬ λ²μ£Όκ° μλ κ²½μ° νλμ μ΄μ μμ ν΄λ μ΄ λ¬Έμ κ° κ³μ λ°μν©λλ€.
μλ§λ κΈ°λ³Έμ μΌλ‘ μ΄ μμ
μ μνν΄μλ μ λμ§λ§ μΆμ κΈ°κ° μ ν νκ·μΈ κ²½μ° λ§€κ°λ³μλ‘ first
λ₯Ό μ¬μ©νμ¬ OHEλ₯Ό μμ±νλλ‘ make_pipeline
λ₯Ό μ
λ°μ΄νΈν΄μΌ ν©λκΉ?
μμ, μ λ νλ¨μ λ΄λ¦¬κΈ° μν κΈ°λ³Έ μνμ μ μ΄ν΄νμ§ λͺ»νλ―λ‘ μ¬λ¬λΆμ μκ°μ λ£κ³ μΆμ΅λλ€. @freddyaboulton @rpeck @dsherry
@freddyaboulton @rpeck @dsherry @chukarsten @jeremyliweishih μμ ν λ‘ ν
@angela97linμ μ’μ RE κΈ°λ³Έ λμμΌλ‘ λ€λ¦½λλ€. λ λ€λ₯Έ μ’μ μ : κ΅¬μ± μμ 맀κ°λ³μλ₯Ό ν΅ν΄ κΈ°λ³Έ λμμ μ¬μ μνλ κΈ°λ₯
@dsherry λ΄κ° μ¬λ°λ₯΄κ² μ΄ν΄νκ³ μλ€λ©΄ drop
(맀κ°λ³μ)μ κΈ°λ³Έκ°μ μ
λ°μ΄νΈνκ³ μμΌλ―λ‘ μ¬μ©μλ ꡬμ±μμ 맀κ°λ³μλ₯Ό μλμΌλ‘ μ€μ νμ¬ μ΄λ₯Ό 무μν μ μμ΅λκΉ?
μ΄κ²μ ꡬννλ λ° νμν κ²μ΄ 무μμΈμ§ μμ보기 μν΄ μ£Όλ³μ νν€μ³€μ΅λλ€. νΉν λ°μ΄λ리μ κ²½μ° νμ μμ ν΄λμ€λ₯Ό μ κ±°νλ κ²μ΄ μΌλ§λ μ΄λ €μ΄μ§ κΆκΈνμ΅λλ€.
νν€μΉ κ²°κ³Όλ λ€μκ³Ό κ°μ΅λλ€.
drop
맀κ°λ³μμ λν λ°°μ΄ μ΅μ
μ ν΅ν΄ μ€ν κ°λ₯ν κ²μΌλ‘ 보μ
λλ€(https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html). κ·Έλ¬λ μλν νμλ λͺ¨λ μ΄μ λν΄ μΈλ±μ€ κ°μ μ§μ ν΄μΌ ν©λλ€. λ°λΌμ λ€μμ μ΄ 0μ λν΄ μΈλ±μ€ 0μ μ§μ λ λ²μ£Όλ₯Ό μ κ±°νκ³ μ΄ 1 λ° 2μ λν΄ λ€λ₯Έ κ°μ΄ μλ μ€λ₯λ₯Ό μ κ±°νλ €κ³ ν©λλ€.import pandas as pd
import numpy as np
from sklearn.preprocessing import OneHotEncoder
X = pd.DataFrame({'col_1': ["a", "b", "b", "a", "b"],
'col_2': ["a", "b", "a", "c", "b"],
'col_3': ["a", "a", "a", "a", "a"]})
indices_to_drop = np.array([0, None, None])
ohe = OneHotEncoder(drop=indices_to_drop)
ohe.fit(X)
ValueError Traceback (most recent call last)
<ipython-input-4-a099fa2fc4a7> in <module>
----> 1 ohe.fit(X)
~/Desktop/venv/lib/python3.7/site-packages/sklearn/preprocessing/_encoders.py in fit(self, X, y)
417 self._fit(X, handle_unknown=self.handle_unknown,
418 force_all_finite='allow-nan')
--> 419 self.drop_idx_ = self._compute_drop_idx()
420 return self
421
~/Desktop/venv/lib/python3.7/site-packages/sklearn/preprocessing/_encoders.py in _compute_drop_idx(self)
394 ["Category: {}, Feature: {}".format(c, v)
395 for c, v in missing_drops])))
--> 396 raise ValueError(msg)
397 return np.array(drop_indices, dtype=object)
398
ValueError: The following categories were supposed to be dropped, but were not found in the training data.
Category: 0, Feature: 0
Category: 1, Feature: None
Category: 2, Feature: None
λλ μ΄κ²μ΄ λν μ΄ λ¬Έμ κ° μ§μ νλ κ²μ μ λ°μ΄λΌκ³ μκ°ν©λλ€: https://github.com/scikit-learn/scikit-learn/issues/16511
μ΄λ₯Ό μ§μνκΈ° μν΄ μ°λ¦¬κ° ν μ μλ λμμ νΌν
μ€μ μμ νλ €λ μ΄κ³Ό κ°μ μλμΌλ‘ μΆμ νλ κ²μ
λλ€. scikit-learnμ λ°μ΄ν°λ₯Ό μ λ¬ν©λλ€. κ·Έλ° λ€μ μ μ₯νκ³ μμ νλ €λ μ΄μ μ κ±°ν©λλ€. κ·Έλ¬λ μ΄κ²μ λ³νλ μ΄ μ΄λ¦μμ μλ(κΈ°λ₯, κ°)λ₯Ό κ²°μ νκΈ° μν΄ μ½κ°μ λ
Όλ¦¬ μ²λ¦¬κ° νμν©λλ€. ( get_feature_names
μ μ΄ λ
Όλ¦¬κ° μμ§λ§ μμ νμ§ μμμΌ νλ€κ³ κ°μ νκ³ μ΄ μ΄λ¦μ μ°κ²°νλ λ° λμμ΄ λ©λλ€...)
μ΄ λͺ¨λ κ²μ΄ μ§κΈμ κΈ°λ³Έ scikit-learn if_binary
μ μ¬μ©νλ κ²μΌλ‘ μΆ©λΆν μ μμΌλ©° νμ μμ ν΄λμ€λ₯Ό μ¬μ©νλλ‘ λ³λμ λ¬Έμ λ₯Ό μ μΆν μ μλ€λ κ²μ
λλ€. μμ§ν λ§ν΄μ μ°λ¦¬κ° ν΄κ²°ν΄μΌ νλ μΌμ κ°μν λ scikit-learnμ OHE ꡬνμμ λ©μ΄μ§λ κ²μ μ°¬μ±ν©λλ€.
μ μ©ν 리μμ€:
OHE λ¬Έμ: https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html
μ μ°μ±μ μ λ°νλ scikit-learnμ μ½λ: https://github.com/scikit-learn/scikit-learn/blob/95119c13af77c76e150b753485c662b7c52a41a2/sklearn/preprocessing/_encoders.py#L338
κ΄λ ¨ λ¬Έμ : https://github.com/scikit-learn/scikit-learn/issues/16511
if_binary
: scikit-learnμ handle_unknown
κ° error
μ΄μ΄μΌ ν©λλ€. μ΄κ²μ top_n
맀κ°λ³μμ μ μ΄μΈλ¦¬μ§ μμ΅λλ€. μ΄ λ§€κ°λ³μλ μμ Nκ° λ²μ£Όλ₯Ό μ μΈν λͺ¨λ νλͺ©μ μμ ν©λλ€. λ³νν λ°μ΄ν°κ° μ λ²μ£Όλ‘ 무μμ ν μ§ λͺ¨λ₯΄κΈ° λλ¬Έμ
λλ€. Beccaκ° https://github.com/alteryx/evalml/pull/830 μμ μΈκΈνλ―μ΄ μ΄ λ§€κ°λ³μκ° μλνλ €λ©΄ top_n
λ₯Ό NoneμΌλ‘ μ€μ ν΄μΌ ν©λλ€.
μ΄λ₯Ό μΌλμ λκ³ μ°λ¦¬λ§μ μνμ ꡴리λ κ²μ΄ κ°μ₯ μ’μ΅λλ€ π€
κ°μ₯ μ μ©ν λκΈ
μ½λμ μ 3λ²μΉ: Thou Shalt Not Make == λΆλ μμμ λΉκ΅