2016-11-28 112 views
1

我有兩列的數據幀錯誤多項式迴歸使用預測中的R

var_1<-seq(1:252) 
var_2<-runif(1:252)*1000 

my_new_df<-data.frame(var_1,var_2) 
names(my_new_df)<-c("Time_values","Count") 

train_poly_data<-my_new_df[1:150,c("Time_values","Count")] # training data set 
valid_poly_data<-my_new_df[151:200,c("Time_values","Count")] # validation data set 

test_poly_data<-my_new_df[201:252,c("Time_values","Count")] # test data set 

#obtain a polymomial regression model with 20 Degrees 
poly_tr<-lm(train_poly_data$Count ~ poly(train_poly_data$Time_values,degree=20,raw = TRUE)) 
summary(poly_tr) 

#getting the following warnings 
Warning messages: 
1: 'newdata' had 50 rows but variables found have 150 rows 
2: In predict.lm(poly_tr, valid_poly_data) : 
    prediction from a rank-deficient fit may be misleading 

這是我需要做的,

我需要分割的訓練數據幀,驗證,測試數據設置 接下來,我想使用訓練數據使用多項式迴歸並使用驗證數據驗證它

但是我一直在收到錯誤,我將如何解決該問題,我也有興趣找到最佳程度的多項式爲我想看看隨機選取的20的多項式是否正確?

任何建議或幫助指出我的錯誤將永遠受歡迎。

如何解決此警告?我知道警告是因爲我們在訓練數據集中有150個值,在驗證數據集中有50個值

+0

哪裏是你predict.lm代碼? –

+0

my_pred <-predict(poly_tr,valid_poly_data) 警告信息: 1: 'newdata' 有50行,但發現變量具有150行 2:在predict.lm(poly_tr,valid_poly_data): 預測從秩虧配合可能會誤導 – Q007

+0

對不起,我忘了粘貼它 – Q007

回答

1

第一個警告將消失,您需要將驗證數據轉換爲與之前的訓練數據相同的格式運行預測,以確保訓練/驗證數據具有完全相同的一組迴歸/預測變量。

第二個警告仍然存在,因爲您正在擬合一個非常高度的多項式,這是一個缺乏等級的擬合(也很有可能過度擬合您的訓練數據,因此該模型可能不是一般化/有用的) 。

爲了減少過度擬合/消除等級不足,你可以做些什麼來擬合一個較低次數的多項式,在這種情況下,這兩個警告都將消失。

嘗試使用此方法擺脫兩個警告:

my_new_df<-data.frame(var_1,var_2) 
names(my_new_df)<-c("Time_values","Count") 

n <- 10 # lower degree polynomial 
# first generate all the polynomial regressors on the entire data 
my_new_df <- cbind.data.frame(my_new_df[-1], poly(my_new_df$Time_values, degree=n, raw=TRUE)) 
names(my_new_df)[-1] <- paste0('X', names(my_new_df)[-1]) 

train_poly_data<-my_new_df[1:150,] # training data set 
valid_poly_data<-my_new_df[151:200,] # validation data set 

test_poly_data<-my_new_df[201:252,] # test data set 

#obtain a polymomial regression model with n Degrees 
poly_tr<-lm(Count ~ ., train_poly_data) 
summary(poly_tr) 
pred <- predict(poly_tr, newdata=valid_poly_data) 
pred 


# 151   152   153   154   155   156   
# 796.5672  982.6862 1219.7434 1517.9844 1889.2235 2347.0258 
+0

@ Q007更新瞭解決方案 –

+1

Sandipan,非常感謝您的努力並幫助我學習。不勝感激! – Q007