Python 决策树-处理字符串值需要很长时间,但处理浮点值效果良好。如何理解?

Python 决策树-处理字符串值需要很长时间,但处理浮点值效果良好。如何理解?,python,machine-learning,decision-tree,Python,Machine Learning,Decision Tree,我正在尝试使用下面的代码构建一个决策树分类器 从sklearn.tree导入DecisionTreeClassifier clf=DecisionTreeClassifier() 我的数据是 年龄类型收入贷款目的贷款金额优惠 18学生学习500是的 18学生学习600是的 18学生学习700是的 18学生学习800是的 . . . 因此,决策树给出了一个错误,说明它无法将Student转换为浮点值 我能做些什么来解决这个问题? 我不希望通过预处理将数据手动转换为浮点,我希望算法本身能够处理

我正在尝试使用下面的代码构建一个决策树分类器


从sklearn.tree导入DecisionTreeClassifier
clf=DecisionTreeClassifier()

我的数据是

年龄类型收入贷款目的贷款金额优惠
18学生学习500是的
18学生学习600是的
18学生学习700是的
18学生学习800是的
. . .
因此,决策树给出了一个错误,说明它无法将Student转换为浮点值

我能做些什么来解决这个问题?
我不希望通过预处理将数据手动转换为浮点,我希望算法本身能够处理这个问题。是否有任何要传递的参数可以自动修复此问题?

sklearn
希望所有输入都是连续的,这就是为什么没有模块可以自动将分类变量转换为浮点。您必须手动执行某种预处理

然而,有一个相当方便的选择:对分类数据进行一次热编码(假设在您的示例中,这些因素没有太多不同的级别
type\u income
loan\u purpose
)。仅将字符串转换为浮点数(例如
Student
->
0
Employee
->
1
)是不可取的,因为这样
sklearn
将假定存在关系
Student


我建议您看一下

的第4.3.5节,它不能手动完成,也不能通过传递一些参数由决策树算法处理

注:机器学习或其他相关领域最大的工作不是实际的算法,而是数据收集和预处理。因此,你真的不能逃避这些事情,也不能指望函数自己处理它们

您需要将字符串转换为相应的数字(如映射),可以使用一个热编码。上面对
DecisionTree
的函数调用无法为您实现这一点,但是,有一些预处理函数可以帮助您实现这一点

(原因是后台的许多计算都是计算和标识符密集型的。字符串会消耗额外的内存,从而减慢计算速度-因此,使用整数要快得多。)

如果重要的话,你也可以自己写。退房

一些附加信息

另一种使热编码和算法有效的方法是使用矩阵。由于数据集可能是密集的和巨大的,稀疏矩阵只是一种“压缩”一个热编码数组,以便它可以有效地存储在内存中