【问题标题】:Python: "ValueError: setting an array element with a sequence" when using sklearnPython:使用 sklearn 时出现“ValueError:使用序列设置数组元素”
【发布时间】:2018-03-25 01:47:42
【问题描述】:

这是几行:


from sklearn import tree


X = [[181,80,44], [177, 70, 43], [160, 60, 38], 154, 54, 37],
[166,64,40], [190,90,47], [175,64,39],[177,70,40],[159,55,37],
[171,75,42],[181,85,43]

Y = ['male', 'female', 'female', 'female', 'male', 'male', 'male',
'female', 'male', 'female', 'male']

clf = tree.DecisionTreeClassifier()

clf = clf.fit(X,Y)

prediction = clf.predict([[182,78,43]])

print (prediction)

结果:

Traceback (most recent call last):


File "C:\Python\code\test.py", line 14, in <module>
clf = clf.fit(X,Y)
File "C:\Python\lib\site-packages\sklearn\tree\tree.py", line 790, in fit
X_idx_sorted=X_idx_sorted)
File "C:\Python\lib\site-packages\sklearn\tree\tree.py", line 116, in fit
X = check_array(X, dtype=DTYPE, accept_sparse="csc")
File "C:\Python\lib\site-packages\sklearn\utils\validation.py", line 402, 

in check_array
array = np.array(array, dtype=dtype, order=order, copy=copy)
in check_array
array = np.array(array, dtype=dtype, order=order, copy=copy)
ValueError: setting an array element with a sequence.
[Finished in 0.5s]

预期结果:

应该显示根据身体测量预测的性别:"182,78,43"

例如:男性或女性

在 Sublime 上使用 sklearn、numpy+mkl 和 scipy 运行 Python 3.6。

代码来源于:https://www.youtube.com/watch?v=T5pRlIbr6gg。 整个 youtube 评论部分对此没有答案。 感谢您是否可以在此处找到答案,但找不到任何答案。

【问题讨论】:

    标签: python numpy scipy


    【解决方案1】:

    如果这真的是你的代码,问题就从头开始:

    X = [[181,80,44], [177, 70, 43], [160, 60, 38], 154, 54, 37], 
    [166,64,40], [190,90,47], [175,64,39],[177,70,40],[159,55,37],
    [171,75,42],[181,85,43]
    

    正在创造远离可用的东西:

    print(X)
    # ([[181, 80, 44], [177, 70, 43], [160, 60, 38], 154, 54, 37],)
    

    因此,每个方向都有一个括号要添加(如果您不清楚:阅读 sklearn 的有关数据格式的文档:形状的二维数组(n_samples,n_features);还可以考虑阅读一些对 numpy 的介绍,其中字形来自 -> 内部一切都是基于 numpy 的):

    X = [[181,80,44], [177, 70, 43], [160, 60, 38], [154, 54, 37],  # before 154
    [166,64,40], [190,90,47], [175,64,39],[177,70,40],[159,55,37],
    [171,75,42],[181,85,43]]                                        # at end
    

    我不得不承认:这是应该立即找到的东西,我不明白为什么有人会花时间为 SO 创建帖子,而不是花时间检查简单数组创建的语法。

    说句公道话:一开始我以为它不会经过语法检查(如上所述,这确实是一个奇怪的结构)。

    编辑:说句公道话#2:链接的视频也确实很糟糕...我不知道该怎么想(好吧,使用 DTree 来完成这项任务可能是已经疯了,甚至 LinearRegression 似乎更可行)!

    是的,在完成上述更正后,代码会预测male

    【讨论】:

    • 最初的方法正如我所想象的那样,就像视频中解释的依赖关系(sklearn)一样,需要有一个坚实的基础才能工作,而且要从中检索的东西很容易相关对这种现象也是如此。感谢您能够在您的陈述中简洁而详细。我从中吸取了教训!
    • 确保掌握基础知识:numpy、sklearn。这一点很重要。乍一看,我不认为这个视频频道质量很高(破代码,这个问题的有趣算法决策,演示文稿,尤其是关于页面)!我不得不承认:没有查看 python 的文档,我并没有真正理解你的 X 到底是什么(外部结构是一个元组),但这并不重要,因为它没有遵循所需的假设。
    • 在可用于学习基础知识的大量教程、文档等中,对于自学者有什么建议吗?至于第二种表达方式,倒着学习就是答案。
    • 我不知道你想学什么。但是理解理论然后理解技术就足够了。这意味着:寻找开放的大学 ML 课程,然后遵循官方的 numpy/scipy/sklearn 文档。
    猜你喜欢
    • 2019-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-08
    • 2018-08-04
    • 2019-08-04
    相关资源
    最近更新 更多