sklearn linearregression() 没有 return 矩阵
sklearn linearregression() doesn't return matrix
我有一个矩阵 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,)
,但我希望它再次return一个矩阵。
据我了解所有这些,我应该能够输入一组数据(矩阵的一行)并接收预测(与矩阵的该行具有相同的维度)。
有趣的是,当我使用单个向量来训练我的回归模型时,它会产生一个与输入向量大小相同的预测向量。但是,如果我用矩阵训练它,如果输入是向量,它会产生一个标量。
这是该示例的代码,我在其中获得矢量输入的矢量输出,因为回归模型是由矢量教授的。
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,)
。
如何为矩阵的每个输入行获得一个输出?
线性回归用于对可能有多个维度(输入 x)与一个标量变量(输出 y)的关系进行建模。
一次观察的每个预测都会产生一个标量。如果您要预测多行,它将是一个标量向量(就像在每一行上调用预测并连接结果)。
您不确定为什么返回向量的代码适合许多观察值,每个观察值具有 1 个维度。
像这样向您的代码添加打印:
regr.fit(diabetes_X_train, diabetes_y_train)
print(diabetes_X_train.shape)
# (422, 1)
由于您有 422 个观测值,预测将输出一个包含 422 个标量输出的向量。
我有一个矩阵 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,)
,但我希望它再次return一个矩阵。
据我了解所有这些,我应该能够输入一组数据(矩阵的一行)并接收预测(与矩阵的该行具有相同的维度)。
有趣的是,当我使用单个向量来训练我的回归模型时,它会产生一个与输入向量大小相同的预测向量。但是,如果我用矩阵训练它,如果输入是向量,它会产生一个标量。
这是该示例的代码,我在其中获得矢量输入的矢量输出,因为回归模型是由矢量教授的。
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,)
。
如何为矩阵的每个输入行获得一个输出?
线性回归用于对可能有多个维度(输入 x)与一个标量变量(输出 y)的关系进行建模。
一次观察的每个预测都会产生一个标量。如果您要预测多行,它将是一个标量向量(就像在每一行上调用预测并连接结果)。
您不确定为什么返回向量的代码适合许多观察值,每个观察值具有 1 个维度。
像这样向您的代码添加打印:
regr.fit(diabetes_X_train, diabetes_y_train)
print(diabetes_X_train.shape)
# (422, 1)
由于您有 422 个观测值,预测将输出一个包含 422 个标量输出的向量。