2017-03-17 59 views
0

我試圖在我的火車和測試數據集上運行不同類型的SVM迴歸。我所有的代碼都在工作,但是我覺得我沒有正確地運行它,因爲在火車和測試中準確度都高於0.95,這個數字太高了。火車上的支持向量機和測試

以下是我如何運行迴歸的代碼。數據集太大而無法上傳(10000行等),但包含已縮放的所有數值變量。

我想我在自己的模型上而不是在火車模型上運行測試,但無法解決如何改變它。我想這是所有類型的SVM的同一個錯誤,所以我剛剛上傳了兩種方法,我正在做它的整潔。

我希望我解釋得很好,如果不能更改的話。

##non linear methods 
set.seed(123) 
poly.tune = tune.svm(default_flag~., data=train, kernel="polynomial",degree=c(3), coef0=c(0.1)) 
#summary(poly.tune) 
#train 
best.poly = poly.tune$best.model 
poly.train = predict(best.poly, newdata=train) 
svmnonlintrain<-table(poly.train, train$default_flag) 
##accuracy from table 
nonlineartrain<-(svmnonlintrain[1,1]+svmnonlintrain[2,2])/(svmnonlintrain[1,1]+svmnonlintrain[1,2]+svmnonlintrain[2,1]+svmnonlintrain[2,2]) 

#test 
best.poly = poly.tune$best.model 
poly.test = predict(best.poly, newdata=test) 
svmnonlin<-table(poly.test, test$default_flag) 
##accuracy from table 
nonlineartest<-(svmnonlin[1,1]+svmnonlin[2,2])/(svmnonlin[1,1]+svmnonlin[1,2]+svmnonlin[2,1]+svmnonlin[2,2]) 

##radial basis function 
set.seed(123) 
rbf.tune = tune.svm(default_flag~., data=train, kernel="radial",gamma=c(0.1,0.5)) 
#summary(rbf.tune) 

#train 
best.rbf = rbf.tune$best.model 
rbf.train = predict(best.rbf, newdata=train) 
svmradialtrain <- table(rbf.train, train$default_flag) 
radialtrain<-(svmradialtrain[1,1]+svmradialtrain[2,2])/(svmradialtrain[1,1]+svmradialtrain[1,2]+svmradialtrain[2,1]+svmradialtrain[2,2]) 

#test 
best.rbf = rbf.tune$best.model 
rbf.test = predict(best.rbf, newdata=test) 
svmradial <- table(rbf.test, test$default_flag) 
radialtest<-(svmradial[1,1]+svmradial[2,2])/(svmradial[1,1]+svmradial[1,2]+svmradial[2,1]+svmradial[2,2]) 

回答

4

讓我猜:這是一個信用風險的數據集,而您預測違約概率(響應變量default_flag)。如果這與其他所有信用風險數據集一樣,那麼您的非響應變量就會非常不平衡,並且會有比默認值更多的非缺省值。我會再次猜測它超過90%的非默認值。

如果是這樣,只要預測每個人都不會默認,我就可以獲得90%的準確度。當然,這不是很有用。

錯誤率並不是衡量不平衡數據的性能的非常有意義的度量。使用另一種度量,如AUC或基尼係數,或者甚至是熵(二元對數似然度)。