我们可以同时预测数据帧的两列吗?

Posted

技术标签:

【中文标题】我们可以同时预测数据帧的两列吗?【英文标题】:can we predict two columns of a dataframe at same time? 【发布时间】:2018-06-12 17:36:03 【问题描述】:

这是一个 sample.csv 文件,其中我有 3 列 int 类型的数据。 它可以很好地预测一列数据但在预测两列 col2 和 col3 时显示错误。

col1,col2,col3
1,5,1
3,6,5
8,5,2
6,4,2
6,9,5

import pandas as pd
data = pd.read_csv('sample.csv')
input = data
objective = data[["col2","col3"]]
xtr,xtst,ytr,ytst = train_test_split(input,objective,test_size=0.25,
                                       train_size=0.75,random_state=4)
from sklearn.svm import SVR
classifier = SVR()
classifier.fit(xtr,ytr)


 Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\User\Anaconda3\lib\site-packages\sklearn\svm\base.py", line 149, in fit
    X, y = check_X_y(X, y, dtype=np.float64, order='C', accept_sparse='csr')
  File "C:\Users\User\Anaconda3\lib\site-packages\sklearn\utils\validation.py", line 547, in check_X_y
    y = column_or_1d(y, warn=True)
  File "C:\Users\User\Anaconda3\lib\site-packages\sklearn\utils\validation.py", line 583, in column_or_1d
    raise ValueError("bad input shape 0".format(shape))
ValueError: bad input shape (3, 2) 

【问题讨论】:

【参考方案1】:

如果您愿意使用除支持向量机以外的任何其他回归器,请看这里:

http://scikit-learn.org/stable/modules/multiclass.html

在这里检查本质上是多类的分类器,并尝试它们对应的回归估计量。例如,此处提到了 DecisionTreeClassifier,因此 DecisionTreeRegressos 也将支持多个输出。我之所以说固有的多类,是因为它们将能够使用输出值之间的相关性来获得更好的学习。

如果你想使用 SVR,那么你可以使用MultiOutputRegressor。见例子here:-

from sklearn.datasets import make_regression
from sklearn.multioutput import MultiOutputRegressor
from sklearn.svm import SVR

classifier = MultiOutputRegressor(SVR())
classifier.fit(xtr,ytr)

请记住,它只会使您的代码更容易,但仍然在内部一次只适合一个输出。所以在这种情况下,它将在内部适合两个 svm(每个输出一个),并且可能无法使用输出之间的相关性。

【讨论】:

谢谢@Vivek Kumar 它帮助了我:)【参考方案2】:

您一次只能训练一个目标/一个自变量。所以你的ytr 有两列导致错误。来自classifer.fit 上的文档字符串(参见形状规范):

y
: array-like, shape (n_samples,)
Target values (class labels in classification, real numbers in regression)

【讨论】:

以上是关于我们可以同时预测数据帧的两列吗?的主要内容,如果未能解决你的问题,请参考以下文章

连接单独处理的火花数据帧的两列时的顺序保证是啥?

Pandas - 匹配来自两个数据帧的两列并在 df1 中创建新列

根据原始数据帧的两列之间的条件创建新的数据帧[关闭]

组合框可以在其文本框部分显示多于一列吗?

如何在 Pandas 中连接包含列表(系列)的两列

我可以在引导面板中有两列吗?