2016-10-03 6 views
0

R에서 지원 벡터 회귀를 사용하여 미래의 에너지 소비를 예측하고 싶습니다.이 코드는 있지만 정확한 날씨인지는 확실하지 않습니다.지원 벡터 회귀를 사용하여 예측하기 R

`#gathering the data 
data<-read.csv("C:\\2003_smd_hourly.csv",header=TRUE) #these are the values which are used to train the given model# 
data 
#data1<-read.csv("C:\\pr.csv",header=TRUE)#this file/ddata is used for checking the accuracy of prediction# 
#data1 
#y1<-data1[,15] 
#x0<-data1[,2] 
y<-data[,15] #sysload 
x1<-data[,2] #houroftheday 
x2<-data[,13]  #drybulb temp(actualtemp) 
x3<-data[,14]  #dewpnttemp 
#train<-sample(744,447) 
#train 
library(e1071) 
model<-svm(y~x1+x2+x3,data=data[1:48,],cost=2.52*10^11,epsilon=0.0150,gamma=1) 
model 
#pr<-data[-train,] 
#pr 
predict1<-predict(model,newdata=data[49:72,]) 
predict1 
par(mfrow=c(2,2)) 
plot(x1,y,col="red",pch=4) 
#par(new=TRUE) 
plot(x1,predict1,col="blue",pch=5) #plotting the values that have been predicted 
#par(new=TRUE) 
plot(x0,y1,col="black",pch=1) 
error=y1-predict1 
error 
mae <- function(error) 
{ 
    mean(abs(error)) 
} 
mae(error) 

error <- y1 - predict1 

error 
rmse <- function(error) 
{ 
    sqrt(mean(error^2)) 
} 
svrPredictionRMSE <- rmse(error) 
svrPredictionRMSE 
max(error) 
min(error) 

mape <- function(y1,predict1) 
mape 
mean(abs((y1 - predict1)/y1))*100 
mape 

는`예는 : 데이터는 여기 http://pastebin.com/MUfWFCPM

+0

이미 어떤 코드가 있습니까? – blacksite

+0

이 코드입니다. 저는 48 개의 값을 사용하여 모델을 훈련 시켰습니다. 그러나 모델이 24 개의 값만 예측하도록하고 싶습니다. –

+0

데이터를 입력하는 데 사용하고있는 현재의 방법에 대해서는 조언 할 것입니다. 두 개의'data.frames'를 설정하고 훈련과 테스트/밸리데이션 세트를 제공하고'predict'를 호출 한 다음 두 번째'data.frame'을 사용할 때 교육 세트 만 제공합니다. 현재 메소드에는 사용자 환경에 중복 정보가 있습니다. – zacdav

답변

0

발견 예측에 대한 newData의 매개 변수를 (당신이 훈련 데이터와 동일한 기능 세트가 있어야 시험 newData의)를 사용 할 수 있습니다. 예 : mtcars 데이터 세트

library(e1071) 
model<-svm(mpg~wt+disp+qsec,data=mtcars[1:24,],cost=512,epsilon=0.01) 
model 
predict1<-predict(model,newdata=mtcars[25:32,]) 
predict1 # prediction for the new 8 data points 
Pontiac Firebird  Fiat X1-9 Porsche 914-2  Lotus Europa Ford Pantera L  Ferrari Dino Maserati Bora  Volvo 142E 
     28.514002  31.184527  23.022863  22.603601   6.228431  30.482475   6.801507  22.939945 
+0

코드가 잘 작동하고 있습니다.하지만 내 데이터와 잘 작동하지 않습니다. 데이터 링크가 http://pastebin.com/MUfWFCPM –

+0

과 같은 경우 실수를 수정할 수 있습니까? 데이터 포인트는 48 개뿐입니다. 당신은 전체 데이터 세트에 대해 교육을하고 있습니다. 무엇을 예측하고 싶습니까? 귀하의 코드는 행 49:72에 존재하지 않는 것을 예측하려고합니다 @Akash Joshi –

+0

선생님, 내가 묻고 싶었던 개념적 차이가있는 것처럼 보입니다. 훈련을 통해 보이지 않는 데이터를 다음 날 예측할 수 있습니까? 2 일 동안 모델? –

0

다음 2 일간에 어떤 일이 발생하는지 예상하려면 2 일 전에 예측하도록 모델을 훈련해야합니다. 간단한 예제를 선택하고 나서 SVR로 옮깁니다. 우리가 선형 AR 직접 예측 모델을 사용한다고 가정하고, 어떤 방법을 통해 두 개의 지연이 충분하다고 결정했습니다. 그래서 우리는이 모델이 있습니다

Y_ {t의 + h를} = 알파 + phi_1 Y_ {t} + phi_2 Y_ {t-1} + E_ {t + H}를

경제학 문헌이를 호출 예측을 통해 재귀 관계를 제공하여 간접적으로 y_ {t + h}를 생성하는 것과는 대조적으로 y_ {t + h}를 직접 실행하기 때문에 AR 직접 예측. 'y'는 섭씨 온도입니다. 따라서 오늘까지 온도 데이터를 사용하여 2 일 동안 온도를 예측하고 싶습니다. 지난 달의 일별 기온을 사용한다고 가정 해보십시오.

일반 최소 자승은 알파, phi_1 및 phi_2의 수렴 추정기이므로 우리는 1의 열을 포함하는 행렬 X를 형성 할 수 있습니다. 한 열의 열이 h 시간 지연되고 한 열의 열이 h 시간 지연되었습니다. + 1 번. 그런 다음, 추정 된 [α, phi_1, phi_2] = (X'X)^- 1X'Y와 같이 X에 대한 온도 벡터 y의 선형 투영을 계산합니다.

이제 전체 샘플에 대한 매개 변수를 추정했습니다. y_ {t + h}를 알고 싶다면 상수가 필요합니다 (모델을 추정하기 위해 '1'을 임의로 선택 했으므로 '1'을 사용합니다), 오늘의 기온과 어제의 기온입니다. 여기에 가정하자 H = 2 :

이틀에 온화한 예측 = 알파 + phi_1 X 온도 오늘 + phi_2 X 온도 어제 당신이 볼

, 모델을 훈련하고 모델을 적용의 차이는 간단한 변화에있다 : y_ {t} = alpha + phi_1 y_ {th} + phi_2 y_ {th-1} + e_ {t}는 우리가 훈련 샘플에 맞춘 것입니다. 이 모델을 사용하여 만든 샘플 내 예측은 최근 3 일과 4 일 전후의 온대를 사용하여 예측 한 것입니다. 우리는 또한 처음 세 가지 관측치를 제외하고 다른 모든 관측 된 온도에 대한 최소 자승 예측치를 산출했습니다.이 모델로 예측하기 위해서는 두 가지 관측치와 2 일 간격이 필요합니다.

이제 SVM 및 SVR의 경우 매우 유사합니다. 예측 결과는 회귀 문제의 경우 실제 값 레이블입니다. 같은 데이터를 사용하고 동일한 회귀 분석기를 사용하여 미리 이틀 온도를 예측하기를 원한다고 가정 해 봅니다. 그런 다음 SVR의 입력 공간은 두 개의 벡터로 정의됩니다. 두 개의 벡터는 우리가 사용한 온도 벡터와 같습니다.

전체 데이터 세트에서 SVR을 학습하면 처음 세 번의 관찰을 제외하고 데이터 세트의 각 관측치에 대한 예측을 생성합니다.

e-insensitive SVR의 경우 K()는 우리가 사용하는 커널, x_i는 지원 벡터 (y_ {t}, y_ {t-1} 공간의 한 점), n_sv는 지원 벡터 :

Y_ {t의 + h를} = sum_ {I = 1}^{n_sv} (alpha_i이 - alpha_i *) K가 (x_i로부터는, X)

예측 Y_ {t + h는} 요구 같다 x의 실제 값 레이블은 무엇입니까? SVR의 숙련 된 결정 규칙에서 마지막 p (이 경우, p = 2) 관측 값을 입력하면 레이블이 부여됩니다. 분류를위한 지원 벡터 머신 인 경우, 훈련은 초경량의 초평면을 만들어 내고 입력 공간에 좌표가있는 점의 레이블을 '비행기의 어느면에 있는지'묻는 방식으로 결정하게됩니다. 당신이 진정한 가치를 찾고 있다는 것을 제외하고는 똑같은 것입니다.

그래서 프로그래밍 - 현명한, 당신은 단지 '예측'에 대한 권리 차원과 벡터를 제공해야합니다 : predict(best_model_you_picked, newdata=appropriate_input_space_vector)

참고가 '전체 샘플'에 모델을 훈련하지만, 일부 변수 경우 그 당신이 사용하는 변수가 뒤떨어져 있다면 모델은 Liggged 변수의 마지막 관찰에 적합하지 않습니다 ... OLS로 추정 된 AR 모델이 샘플 내 예측을위한 마지막 H 관측치를 사용하지 않는 것과 같습니다.