Python 对于决策树的多类分类,特征必须是浮点数吗?

Python 对于决策树的多类分类,特征必须是浮点数吗?,python,pandas,decision-tree,multiclass-classification,ner,Python,Pandas,Decision Tree,Multiclass Classification,Ner,我正在尝试使用决策树进行名称实体识别(NER)。我的特性dataframe和标签dataframe与上面的一样。当我运行以下代码时,它返回ValueError:无法将字符串转换为float:“头痛,”。我的数据格式是否正确(我正在跟踪)?对于通过决策树进行的多类别分类,特征是否必须是浮点数?如果是这样的话,鉴于大多数令牌特性(如果不是全部的话)都是字符串或布尔值,我应该如何进行OBI标记 将熊猫作为pd导入 从sklearn.tree导入DecisionTreeClassifier DT=Dec

我正在尝试使用决策树进行名称实体识别(NER)。我的特性dataframe和标签dataframe与上面的一样。当我运行以下代码时,它返回
ValueError:无法将字符串转换为float:“头痛,”
。我的数据格式是否正确(我正在跟踪)?对于通过决策树进行的多类别分类,特征是否必须是浮点数?如果是这样的话,鉴于大多数令牌特性(如果不是全部的话)都是字符串或布尔值,我应该如何进行OBI标记

将熊猫作为pd导入
从sklearn.tree导入DecisionTreeClassifier
DT=DecisionTreeClassifier()
DT.fit(X\U系列、y\U系列)
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在里面
1 DT=DecisionTreeClassifier()
---->2 DT.配合(X_系列、y_系列)
d:\python\lib\site packages\sklearn\tree\\u classes.py适合(self,X,y,sample\u weight,check\u input,X\u idx\u sorted)
888         """
889
-->890 super().fit(
891 X,y,
892样品重量=样品重量,
d:\python\lib\site packages\sklearn\tree\\u classes.py适合(self,X,y,sample\u weight,check\u input,X\u idx\u sorted)
154检查\u X_params=dict(dtype=dtype,接受\u sparse=“csc”)
155检查参数=dict(确保2d=False,dtype=None)
-->156 X,y=自我验证数据(X,y,
157分别验证参数=(检查参数,
158检查(参数)
d:\python\lib\site packages\sklearn\base.py in\u validate\u数据(self、X、y、reset、validate\u分别,**检查参数)
427                 # :(
428检查X参数,检查y参数=单独验证
-->429 X=检查数组(X,**检查参数)
430 y=检查数组(y,**检查y参数)
431其他:
d:\python\lib\site packages\sklearn\utils\validation.py在内部文件中(*args,**kwargs)
70未来警告)
71 kwargs.update({k:arg代表k,arg在zip中(sig.parameters,args)})
--->72返回f(**kwargs)
73返回内部\u f
74
检查数组中的d:\python\lib\site packages\sklearn\utils\validation.py(数组、接受稀疏、接受大稀疏、数据类型、顺序、复制、强制所有有限、确保2d、允许nd、确保最小样本、确保最小特征、估计器)
596 array=array.astype(dtype,casting=“不安全”,copy=False)
597其他:
-->598数组=np.asarray(数组,顺序=order,dtype=dtype)
599除复杂警告外:
600提升值错误(“不支持复杂数据\n”
d:\python\lib\site packages\numpy\core\\u asarray.py在asarray中(a,数据类型,顺序)
83
84     """
--->85返回数组(a,数据类型,副本=False,顺序=order)
86
87
ValueError:无法将字符串转换为浮点:“头痛,”

是的,它们必须是数字的(不一定是浮动的)。因此,如果一列中有4个不同的文本标签,则需要将其转换为4个数字。为此,请使用sklearn的labelencoder。如果您的数据在数据框
df

X_train

------------------------------------------------------------------------------------------
   | bias | word.lower | word[-3:] | word.isupper | word.isdigit |  POS  |  BOS  |  EOS  |
------------------------------------------------------------------------------------------
0  |  1.0 | headache,  |      HE,  |         True |        False |   NNP |  True | False |
1  |  1.0 |    mostly  |      tly  |        False |        False |   NNP | False | False |
2  |  1.0 |       but  |      BUT  |         True |        False |   NNP | False | False |
...
...
...

y_train

------------
   |  OBI  |
------------
0  | B-ADR |
1  | O     |
2  | O     |
...
...
...
一旦您将所有列转换为数字,您可能还希望编码。对分类列和布尔列执行此操作(这里我仅为您的分类列显示此操作)

之后,您可以使用标签编码器的dict
d
从标签编码器检索值的名称

# you should probably also one-hot the categorical columns
df = pd.get_dummies(df, columns=cat_cols)

对于理解这些概念特别有用。

谢谢!我从collections import defaultdict中添加了
,效果非常好!哇!我在中添加了这个。
# you should probably also one-hot the categorical columns
df = pd.get_dummies(df, columns=cat_cols)
d[col_name].inverse_transform(value)