sklearn linearregression()不会返回矩阵

时间:2017-03-12 15:41:33

标签: python scikit-learn linear-regression

我有一个矩阵x_train,它由10个输入数据集组成。 y_train是唯一的培训输出。每个输入或输出都有422个元素。

对于测试我有类似的设置,每个输入或输出只有20个元素。

x_train.shape = (422, 10)
y_train.shape = (422,)
x_test.shape = (20, 10)
y_test.shape = (20,)

在这里,我用矩阵训练模型r。

r = linear_model.LinearRegression()
r.fit(x_train, y_train)

现在,当我将测试输入作为矩阵给出时,我会收到一个矢量作为预测输出

y_predict = r.predict(x_test)

使用y_predict.shape = (20,),但我希望它再次返回矩阵。

据我了解所有这些,我应该能够输入一组数据(矩阵的一行)并接收预测(与矩阵的那一行具有相同的维度)。

有趣的是,当我使用单个向量训练我的回归模型时,它会产生一个与输入向量大小相同的预测向量。但是,如果我使用矩阵训练它,如果输入是向量,则会产生标量。

以下是该示例的代码,其中我获得了向量输入的向量输出,因为回归模型是由向量教授的。

from sklearn import datasets, linear_model
# Load the diabetes dataset
diabetes = datasets.load_diabetes()
# Use only one feature
diabetes_X = diabetes.data[:, np.newaxis, 2] # change 2 to something else for other features
# Split the data into training/testing sets
diabetes_X_train = diabetes_X[:-20]
diabetes_X_test = diabetes_X[-20:]
# Split the targets into training/testing sets
diabetes_y_train = diabetes.target[:-20]
diabetes_y_test = diabetes.target[-20:]
# Create linear regression object
regr = linear_model.LinearRegression()
# Train the model using the training sets
regr.fit(diabetes_X_train, diabetes_y_train)
y_predict=regr.predict(diabetes_X_train)
print("y_predict.shape =", y_predict.shape)

形状为y_predict.shape = (422,)

如何为矩阵的每个输入行获取一个输出?

1 个答案:

答案 0 :(得分:2)

线性回归用于建模可能多维度(输入x)与一个标量变量(输出y)的关系。

每次预测一次观察都会产生一个标量。如果您预测多行,它将是一个标量向量(比如在每一行上调用预测并连接结果)。

你的代码,你不确定为什么返回一个向量是适合许多观察,每个观察1维。

在代码中添加打印件:

regr.fit(diabetes_X_train, diabetes_y_train)
print(diabetes_X_train.shape)
# (422, 1)

当您有422个观测值时,预测将输出422个标量输出的矢量。