Sklearn 决策树分类器显示浮点错误 Python [不是重复的]

Posted

技术标签:

【中文标题】Sklearn 决策树分类器显示浮点错误 Python [不是重复的]【英文标题】:Sklearn Decision Tree Classifier showing float error Python [not a duplicate] 【发布时间】:2018-08-14 02:28:29 【问题描述】:

我想用sklearn DecisionTreeClassifier.做一个预测程序

我正在比较两个列表,ListOnePar 有浮点值,timelist 只有字符串。我总是得到同样的错误。我在网上搜索,我没有找到任何可以帮助我的东西。我所看到的可以在两个列表之间进行比较(一个带有浮点数,另一个带有字符串。) 这不是另一个问题的重复,在另一个问题中错误是完全不同的,整个程序是不同的。

这是错误:

Pred1=tree.DecisionTreeClassifier()
AttributeError: 'float' object has no attribute 'DecisionTreeClassifier'

这是代码:

from sklearn import tree

    ListOnePar=[]

    for child in tree1.get_children(id1):
        ListTwoPar=[]

        one=round(float(tree1.item(child,"values")[1]),2)
        two=round(float(tree1.item(child,"values")[2]),2)
        tree=round(float(tree1.item(child,"values")[3]),2)
        four=round(float(tree1.item(child,"values")[5]),1)
        five=round(float(tree1.item(child,"values")[6]),1)

        ListTwoPar.append(one)
        ListTwoPar.append(two)
        ListTwoPar.append(tree)
        ListTwoPar.append(four)
        ListTwoPar.append(five)

        ListOnePar.append(ListTwoPar)

    timelist=[]

    for child in tree1.get_children(id1):
        time=tree1.item(child,"values")[7]
        timelist.append(time)

    Pred1=tree.DecisionTreeClassifier()
    Pred1=Pred1.fit(ListOnePar,time)

    size=float(PredSizeEntry.get())
    time=float(PredTimeEntry.get())
    cost=float(PredCostEntry.get())
    level=float(PredLevelEntry.get())
    subcontractors=float(PredSubcontractorsEntry.get())

    ListForPrediction1=[]
    ListForPrediction2=[]

    ListForPrediction2.insert(0,size)
    ListForPrediction2.insert(1,time)
    ListForPrediction2.insert(2,cost)
    ListForPrediction2.insert(3,level)
    ListForPrediction2.insert(4,subcontractors)

    ListForPrediction1.append(ListForPrediction2)

    prediction1=Pred1.predict(ListForPrediction1) 
    print(prediction1[0])

【问题讨论】:

can't use scikit-learn - "AttributeError: 'module' object has no attribute ..."的可能重复 这就是预测的完整代码。我已经制作了完美运行的类似代码,唯一不同的是我的代码,我手动输入了列表值,在这段代码中我使用 for 循环来完成。使用for循环,我从树视图中获取值,并且树视图中的所有值都是浮点数,除了列表时间中的值,这些值都是字符串。 只需检查您是否安装了多个版本的sklearn。这可能是导致问题的原因。 我没有安装多个版本的(sklearn),我刚刚检查过。 【参考方案1】: 我认为你的程序中有一个变量tree 程序使用 import 语句 treetree 变量感到困惑,因为您将 tree 覆盖为浮动

将变量名改为three

for child in tree1.get_children(id1):
    ListTwoPar=[]

    one=round(float(tree1.item(child,"values")[1]),2)
    two=round(float(tree1.item(child,"values")[2]),2)
    tree=round(float(tree1.item(child,"values")[3]),2)   # <===== variable to be changed from tree to three
    four=round(float(tree1.item(child,"values")[5]),1)
    five=round(float(tree1.item(child,"values")[6]),1)

您在计算 tree=round(float(tree1.item(child,"values")[3]),2) 时将 tree 设为浮点数,因此您收到错误消息:AttributeError: 'float' object has no attribute 'DecisionTreeClassifier'

【讨论】:

tree1 是树视图的名称,我无法更改。我用它来获取树视图的值。 tree=round(float(tree1.item(child,"values")[3]),2) 你在这行有错字。你写的是树而不是三个 ooooh.. 是的...我会检查的 tree=round(float(tree1.item(child,"values")[3]),2)改成three=round(float(tree1.item(child,"values")[3]),2) 好吧,我想你帮我解决了这个问题,但现在我在运行程序时遇到了这个错误:TypeError: Singleton array array('nene', dtype='&lt;U4') cannot be considered a valid collection.

以上是关于Sklearn 决策树分类器显示浮点错误 Python [不是重复的]的主要内容,如果未能解决你的问题,请参考以下文章

使用 sklearn 的决策树分类器 100% 准确率

决策树分类器,多标签输出

sklearn-分类决策树

决策树唯一性sklearn

机器学习 sklearn 监督学习 分类算法 决策树 DecisionTree

机器学习 sklearn 监督学习 分类算法 决策树 DecisionTree