如何在 sklearn/python 中修复“ValueError: Expected 2D array, got 1D array”?

Posted

技术标签:

【中文标题】如何在 sklearn/python 中修复“ValueError: Expected 2D array, got 1D array”?【英文标题】:How to fix "ValueError: Expected 2D array, got 1D array instead" in sklearn/python? 【发布时间】:2018-03-20 04:51:17 【问题描述】:

我在那儿。我刚开始用一个简单的例子来尝试学习机器学习。因此,我想通过使用分类器根据文件类型对磁盘中的文件进行分类。我写的代码是,

import sklearn
import numpy as np


#Importing a local data set from the desktop
import pandas as pd
mydata = pd.read_csv('file_format.csv',skipinitialspace=True)
print mydata


x_train = mydata.script
y_train = mydata.label

#print x_train
#print y_train
x_test = mydata.script

from sklearn import tree
classi = tree.DecisionTreeClassifier()

classi.fit(x_train, y_train)

predictions = classi.predict(x_test)
print predictions

我得到的错误是,

  script  class  div   label
0       5      6    7    html
1       0      0    0  python
2       1      1    1     csv
Traceback (most recent call last):
  File "newtest.py", line 21, in <module>
  classi.fit(x_train, y_train)
  File "/home/initiouser2/.local/lib/python2.7/site-
packages/sklearn/tree/tree.py", line 790, in fit
    X_idx_sorted=X_idx_sorted)
  File "/home/initiouser2/.local/lib/python2.7/site-
packages/sklearn/tree/tree.py", line 116, in fit
    X = check_array(X, dtype=DTYPE, accept_sparse="csc")
  File "/home/initiouser2/.local/lib/python2.7/site-
packages/sklearn/utils/validation.py", line 410, in check_array
    "if it contains a single sample.".format(array))
ValueError: Expected 2D array, got 1D array instead:
array=[ 5.  0.  1.].
Reshape your data either using array.reshape(-1, 1) if your data has a 
single feature or array.reshape(1, -1) if it contains a single sample.

如果有人可以帮助我编写代码,那对我很有帮助!

【问题讨论】:

提示:阅读错误信息。 【参考方案1】:

将输入传递给分类器时,传递二维数组(形状为 (M, N),其中 N >= 1),而不是一维数组(形状为 @987654322 @)。错误信息很清楚,

如果您的数据有 单个特征或array.reshape(1, -1),如果它包含单个样本。

from sklearn.model_selection import train_test_split

# X.shape should be (N, M) where M >= 1
X = mydata[['script']]  
# y.shape should be (N, 1)
y = mydata['label'] 
# perform label encoding if "label" contains strings
# y = pd.factorize(mydata['label'])[0].reshape(-1, 1) 
X_train, X_test, y_train, y_test = train_test_split(
                      X, y, test_size=0.33, random_state=42)
...

clf.fit(X_train, y_train) 
print(clf.score(X_test, y_test))

其他一些有用的提示 -

    将您的数据拆分为有效的训练和测试部分。不要使用您的训练数据进行测试 - 这会导致对分类器强度的估计不准确 我建议对标签进行因式分解,以便处理整数。这更容易。

【讨论】:

【参考方案2】:
X=dataset.iloc[:, 0].values
y=dataset.iloc[:, 1].values

regressor=LinearRegression()
X=X.reshape(-1,1)
regressor.fit(X,y)

我有以下代码。 reshape 运算符不是就地运算符。所以我们必须用上面给出的整形后的值替换它的值。

【讨论】:

【参考方案3】:

你必须创建一个二维数组

你可能会这样输入:

model.predict([1,2,0,4])

但这是错误

你必须这样输入:-

model.predict([[1,2,0,4]])

2个方括号而不是一个

【讨论】:

【参考方案4】:

自动重塑它的简单解决方案是 而不是使用:

X=dataset.iloc[:, 0].values

你可以使用:

X=dataset.iloc[:, :-1].values

也就是说,如果您只有两列,而您正在尝试获取第一列 代码获取除最后一列之外的所有列

【讨论】:

【参考方案5】:

假设最初你有,

X = dataset.iloc[:, 1].values

这表明您有第一列,包括所有行。 现在使其如下

X = dataset.iloc[:, 1:2].values

这里的 1:2 表示 [1,2) 类似于上限形成。

【讨论】:

【参考方案6】:

选择列时轻松将其设为 2 d。

x_train = mydata[['script']]
y_train = mydata[['label']]

【讨论】:

以上是关于如何在 sklearn/python 中修复“ValueError: Expected 2D array, got 1D array”?的主要内容,如果未能解决你的问题,请参考以下文章

在sklearn python中撤消L2规范化

sklearn Python 和逻辑回归

使用简单的 malloc() 时如何修复 libc 中止错误

如何解决此 ValueError:仅接受 2 个非关键字参数 sklearn python

如何使用 sklearn python 预测未来的数据帧?

在 sklearn python 中使用高斯过程回归时出错