Ale*_*rti 10 python-3.x scikit-learn categorical-data
我正在使用 OrdinalEncoder,但找不到如何指定编码顺序。我的意思是我有像“坏”、“一般”、“好”这样的类别,它们自然有顺序。但我想指定该顺序,因为编码器本身无法知道类别的含义。实际上,对于categories='auto',某些类别相对于其他类别的编码方向错误,我不希望这样,因为我知道,至少对于其中一些类别,相关性是正的还是负的。
但是在拟合过程中指定类别会导致错误:
“OrdinalEncoder”对象没有“handle_unknown”属性。
如果我不指定类别,拟合过程会顺利进行,我不明白为什么(拟合后属性“categories_”显示我尝试指定它们时手动输入的相同类别)。
我将类别指定为列表列表。这里没有指定类别会发生什么。
import pandas as pd
from sklearn.preprocessing import OrdinalEncoder
df = pd.DataFrame(np.array([['a','a','a'], ['b','c','c']]).transpose())
oE = OrdinalEncoder(categories='auto')
oE.fit(df)
print(oE.categories_)
Run Code Online (Sandbox Code Playgroud)
导致: [array(['a'], dtype=object), array(['b', 'c'], dtype=object)]
明确指定类别:
df = pd.DataFrame(np.array([['a','a','a'], ['b','c','c']]).transpose())
oE = OrdinalEncoder(categories=[['a'], ['b', 'c']])
oE.fit(df)
Run Code Online (Sandbox Code Playgroud)
结果是这个错误:
回溯(最近一次调用最后一次):
文件“”,第 3 行,oE.fit(df)
文件“/home/alessio/anaconda3/lib/python3.6/site-packages/sklearn/preprocessing/_encoders.py”,第774行,适合self._fit(X)
文件“/home/alessio/anaconda3/lib/python3.6/site-packages/sklearn/preprocessing/_encoders.py”,第 85 行,在 _fit 如果 self.handle_unknown == 'error':
AttributeError: 'OrdinalEncoder' 对象没有属性 'handle_unknown'
小智 1
我有同样的问题。这是 scikit-learn 中的错误,已修复并添加到版本 0.20.1,但尚未发布。 https://github.com/scikit-learn/scikit-learn/issues/12365
我通过将修复复制_encoders.py到我的项目并使用来暂时解决了这个问题。
from _encoders import OrdinalEncoder
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3635 次 |
| 最近记录: |