【问题标题】:Error while trying to predict numbers: Expected 2D array, got 1D array instead尝试预测数字时出错:预期 2D 数组,得到 1D 数组
【发布时间】:2020-11-05 05:44:32
【问题描述】:

我最近在 youtube 教程中开始学习 ML。根据教程中的内容,我决定改进并申请一种猜谜游戏。

游戏有多个场景和一些数字,玩家在进入下一阶段之前必须收集这些数字。所以我想把它应用到机器学习上,看看会发生什么。

在我的 CSV 文件中,我有 16 列(阶段和 1 到 15 个数字)和很多行。所以,为了预测最后阶段(1988)的数字是多少,我直接放入“...predict([[1988]]))”并得到了

ValueError: Expected 2D array, got 1D array instead.

我知道在这种情况下几乎无法预测,但我的主要目标是减少错误的数量,看看机器学习在解决这个问题上能做得多么出色。

你们能告诉我我做错了什么以及哪里做错了吗?为了更好地解释,代码如下:

import pandas
from sklearn.tree import DecisionTreeClassifier


game_data = pandas.read_csv('game_data2.csv')
game_list = game_data.drop(columns=['n1', 'n2', 'n3', 'n4', 'n5', 
                                    'n6', 'n7', 'n8', 'n9', 'n10', 
                                     'n11', 'n12', 'n13', 'n14', 'n15'])

game_stage = game_data['STAGE']

model = DecisionTreeClassifier()
model.fit(game_stage, game_list)


predictions = model.predict([[1988]])
predictions

提前谢谢你!

【问题讨论】:

    标签: python pandas scikit-learn sklearn-pandas


    【解决方案1】:

    您需要将game_stage 变量重新整形为二维数组,然后再将其传递给model.fit()

    如果您像这样修改代码,您不会收到错误消息:

    import pandas
    from sklearn.tree import DecisionTreeClassifier
    import numpy as np
    
    # Read data
    game_data = pandas.read_csv('game_data2.csv')
    game_list = game_data.drop(columns=['n1', 'n2', 'n3', 'n4', 'n5', 'n6', 'n7', 'n8', 'n9', 'n10', 'n11', 'n12', 'n13', 'n14', 'n15'])
    game_stage = game_data['STAGE']
    
    # Reshape into 2D array using numpy
    game_stage = np.asarray(game_stage)
    # -1 means this dimension is inferred from the data
    game_stage = game_stage.reshape(-1,1)
    
    # Train model
    model = DecisionTreeClassifier()
    model.fit(game_stage, game_list)
    
    # Prediction
    predictions = model.predict([[1988]])
    predictions
    

    【讨论】:

    • 谢谢!我不熟悉 NumPy,所以,我什至没有尝试过。感谢您抽出宝贵时间帮助我 :)
    【解决方案2】:

    您应该只为 predict 方法提供相同的 2D 数组,但需要处理一个(或多个)值。简而言之,你可以替换

    [1988]
    

    [[1988]]
    

    它应该可以工作。

    这个答案变得很流行,所以我想我会添加更多关于 ML 的解释。简短版本:我们只能对与训练数据 (X) 具有相同维度的数据使用预测。

    在有问题的示例中,我们给计算机 X 中的一堆行,并在 y 中显示正确的响应。当我们想要使用新值进行预测时,我们的程序期望相同 - 一堆行。即使我们只想对一行执行此操作,该行也必须是另一个数组的一部分。

    【讨论】:

      猜你喜欢
      • 2018-09-16
      • 2020-12-18
      • 2018-11-26
      • 2018-12-11
      • 2021-05-14
      • 2021-12-28
      • 2020-11-02
      • 2019-06-06
      相关资源
      最近更新 更多