gpt4 book ai didi

python - 尽管没有一维数组,但在 Sklearn 中通过一维数组获取弃用警告

转载 作者:太空狗 更新时间:2023-10-29 17:03:27 25 4
gpt4 key购买 nike

我正在尝试使用 SKLearn 来运行 SVM 模型。我现在只是用一些示例数据来尝试一下。这是数据和代码:

import numpy as np
from sklearn import svm
import random as random

A = np.array([[random.randint(0, 20) for i in range(2)] for i in range(10)])
lab = [0, 1, 0, 1, 0, 1, 0, 1, 0, 1]

clf = svm.SVC(kernel='linear', C=1.0)
clf.fit(A, lab)

仅供引用,当我运行时

import sklearn
sklearn.__version__

它输出 0.17。

现在,当我运行 print(clf.predict([1, 1])) 时,我收到以下警告:

C:\Users\me\AppData\Local\Continuum\Anaconda2\lib\site-packages\sklearn\ut
ils\validation.py:386: DeprecationWarning: Passing 1d arrays as data is deprecat
ed in 0.17 and willraise ValueError in 0.19. Reshape your data either using X.re
shape(-1, 1) if your data has a single feature or X.reshape(1, -1) if it contain
s a single sample.
DeprecationWarning)

它确实给了我一个预测,这很棒。但是,出于某些原因,我觉得这很奇怪。

我没有一维数组。如果你打印 A,你会得到

array([[ 9, 12],
[ 2, 16],
[14, 14],
[ 4, 2],
[ 8, 4],
[12, 3],
[ 0, 0],
[ 3, 13],
[15, 17],
[15, 16]])

在我看来是二维的。但是好吧,我们只是说我所拥有的实际上是一个一维数组。让我们按照错误提示,尝试使用 reshape 来更改它。

和上面的代码一样,但是现在我们有

A = np.array([[random.randint(0, 20) for i in range(2)] for i in range(10)]).reshape(-1,1)

但是这会输出一个长度为 20 的数组,这没有任何意义,也不是我想要的。我也用 reshape(1, -1) 尝试过,但这给了我一个包含 20 个项目的观察/列表。

我怎样才能在 numpy 数组中 reshape 我的数据,这样我就不会收到这个警告?


我看了两个关于 SO 的答案,但都不适合我。 Question 1Question 2 .似乎 Q1 实际上是一维数据,并使用 reshape 解决,我尝试过但失败了。 Q2 有一个关于如何跟踪警告和错误的答案,这不是我想要的。另一个答案同样是一维数组的实例。

最佳答案

错误来自预测方法。 Numpy 会将 [1,1] 解释为一维数组。所以这应该避免警告:

clf.predict(np.array([[1,1]]))

注意:

In [14]: p1 = np.array([1,1])

In [15]: p1.shape
Out[15]: (2,)

In [16]: p2 = np.array([[1,1]])

In [17]: p2.shape
Out[17]: (1, 2)

此外,请注意,您不能使用形状为 (2,1) 的数组

In [21]: p3 = np.array([[1],[1]])

In [22]: p3.shape
Out[22]: (2, 1)

In [23]: clf.predict(p3)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-23-e4070c037d78> in <module>()
----> 1 clf.predict(p3)

/home/juan/anaconda3/lib/python3.5/site-packages/sklearn/svm/base.py in predict(self, X)
566 Class labels for samples in X.
567 """
--> 568 y = super(BaseSVC, self).predict(X)
569 return self.classes_.take(np.asarray(y, dtype=np.intp))
570

/home/juan/anaconda3/lib/python3.5/site-packages/sklearn/svm/base.py in predict(self, X)
303 y_pred : array, shape (n_samples,)
304 """
--> 305 X = self._validate_for_predict(X)
306 predict = self._sparse_predict if self._sparse else self._dense_predict
307 return predict(X)

/home/juan/anaconda3/lib/python3.5/site-packages/sklearn/svm/base.py in _validate_for_predict(self, X)
472 raise ValueError("X.shape[1] = %d should be equal to %d, "
473 "the number of features at training time" %
--> 474 (n_features, self.shape_fit_[1]))
475 return X
476

ValueError: X.shape[1] = 1 should be equal to 2, the number of features at training time

关于python - 尽管没有一维数组,但在 Sklearn 中通过一维数组获取弃用警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37798056/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com