为什么predict.lm给出的向量的长度与我解析的数据集不同?

问题描述 投票:0回答:1

我已经像这样在训练和测试之间分离了一个数据集。通过选择第 80% 的行索引并将其拆分。

# Eliminamos variables no útiles
df <- df[,!(colnames(df) %in% c("sqm_lot", "sqm_lot15"))]

df_train <- df[1:as.integer(nrow(df)*0.8),]
df_test <- df[as.integer(nrow(df)*0.8):nrow(df),]

nrow(df_test)
## [1] 4324
nrow(df_train)
## [1] 17290

顺便说一下,这个数据集有以下信息

## 'data.frame':    21613 obs. of  16 variables:
##  $ price_eur   : num  206367 500340 167400 561720 474300 ...
##  $ bedrooms    : int  3 3 2 4 3 4 3 3 3 3 ...
##  $ bathrooms   : int  1 2 1 3 2 4 2 1 1 2 ...
##  $ sqm_living  : num  109.6 238.8 71.5 182.1 156.1 ...
##  $ sqm_lot     : num  525 673 929 464 751 ...
##  $ floors      : int  1 2 1 1 1 1 2 1 1 2 ...
##  $ waterfront  : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ view        : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ condition   : int  3 3 3 5 3 3 3 3 3 3 ...
##  $ sqm_basement: num  0 37.2 0 84.5 0 ...
##  $ yr_built    : int  1955 1951 1933 1965 1987 2001 1995 1963 1960 2003 ...
##  $ yr_renovated: int  0 1991 0 0 0 0 0 0 0 0 ...
##  $ sqm_living15: num  124 157 253 126 167 ...
##  $ sqm_lot15   : num  525 710 749 464 697 ...

然后我训练了一个这样的线性模型。

x_train <- df_train[,!(colnames(df_train) %in% "price_eur")]
y_train <- df_train$price_eur

# Entrenamos el modelo

modelo.mlineal <- lm(formula = price_eur ~ ., data = df_train)
modelo.mlineal

## 
## Call:
## lm(formula = price_eur ~ ., data = df_train)
## 
## Coefficients:
##  (Intercept)      bedrooms     bathrooms    sqm_living       sqm_lot  
##    5.696e+06    -4.366e+04     5.886e+04     2.371e+03     3.063e-01  
##       floors    waterfront          view     condition  sqm_basement  
##    2.524e+04     5.327e+05     4.727e+04     2.125e+04    -3.477e+02  
##     yr_built  yr_renovated  sqm_living15     sqm_lot15  
##   -3.000e+03     1.571e+01     1.039e+03    -8.048e+00

然后我使用我的 df_test 数据集进行预测并与我的进行比较

# Tomamos los valores de y_test y x_test
y_test <- df_test$price_eur
x_test <- df_test[,!(colnames(df_test) %in% "price_eur")]

# Restamos sqm_living al modelo y lo metemos con tubería a predict.lm
prediccion_prueba <- modelo.mlineal %>% predict.lm( data = df_test )

print(length(prediccion_prueba))
## [1] 17290
print(length(y_test))
## [1] 4324

errores <- prediccion_prueba - y_test
## Warning in prediccion_prueba - y_test: length of larger object is not a multiple of the length of a smaller one

正如你所看到的,尽管我在

predict.lm
函数中解析 df_test,但我的 y_test 和 y_pred 的长度不同。相反,它给了我用来训练它的原始 df_train 的长度。为什么会出现这种情况?

我期望,嗯......显然我的变量 y_testprediccion_prueba 有相同的长度。

我想要的输出看起来像这样。

print(length(prediccion_prueba))
## [1] 4324
print(length(y_test))
## [1] 4324
r statistics
1个回答
0
投票

解决了。

唯一给我带来问题的是,我将所有内容解析为 Predict.lm 中名为“data”的标志。它应该是“newdata”,请参阅 RDocumentation 中有关该函数的文档。基本上,只需更改这行代码即可:

prediccion_prueba <- modelo.mlineal %>% predict.lm( newdata = df_test )

我不知道为什么它没有给我解析一个不应该存在的变量的错误。

© www.soinside.com 2019 - 2024. All rights reserved.