Skip to content

Instantly share code, notes, and snippets.

@SakshamInABox
Last active May 8, 2019 09:58
Show Gist options
  • Save SakshamInABox/f9dcd18da6ba7c85f84838b347488513 to your computer and use it in GitHub Desktop.
Save SakshamInABox/f9dcd18da6ba7c85f84838b347488513 to your computer and use it in GitHub Desktop.
#Load & Assign Files
TrainDataOrange <- read.arff("D:/Downloads/orange_train.arff")
colnames(TrainDataOrange)[colnames(TrainDataOrange)=="Var230"] <- "class"
TestDataOrange <- read.arff("D:/Downloads/orange_test.arff")
colnames(TestDataOrange)[colnames(TestDataOrange)=="Var230"] <- "class"
#Obtain Class Values
Actual <- TestDataOrange[, 230]
#Ranking
A <- GainRatioAttributeEval(class ~ . , data = TrainDataOrange,na.action=NULL )
ranked_list <- A[order(A)]
A[order(-A)]
HighestChurnScore <- 0
#Feature Drop
for (i in seq(225,5,-5)) {
D <- (225-i)
s <- ranked_list[1:D]
cols.dont.want <- c(names(s))
TrainDataOrange1 <- TrainDataOrange[, !names(TrainDataOrange) %in% cols.dont.want, drop=T]
# Classifier
NB <- make_Weka_classifier("weka/classifiers/bayes/NaiveBayes")
classifier <- NB(class~.,data=TrainDataOrange1,na.action=NULL)
TestDataOrange1 <- TestDataOrange[, !names(TrainDataOrange) %in% cols.dont.want, drop=T]
pred<-predict(classifier,TestDataOrange1, na.action=NULL,seed=1)
#Scoring
P11<-0
P12<-0
P21<-0
P22<-0
Actual[]
for(K in seq(1,1667))
{
if(Actual[K]==-1) #LOYAL
{
if(pred[K]==-1)
{
P11<-P11+1
}
else
{
P12<-P12+1
}
}
else if(Actual[K]==1) #CHURN
{
if(pred[K]==1)
{
P22<-P22+1
}
else
{
P21<-P21+1
}
}
}
#F_Score
Prec_1<-(P11/(P11+P21))
Prec_2<-(P22/(P22+P12))
Recall_1<-(P11/(P11+P12))
Recall_2<-(P22/(P22+P21))
F_1<-(5*Prec_1*Recall_1)/(4*Prec_1+Recall_1)
F_2<-(5*Prec_2*Recall_2)/(4*Prec_2+Recall_2)
if (F_1 >= 0.95) {
if (F_2 > HighestChurnScore) {
HighestChurnScore <- F_2
cat("Number of features selected:",i,"\n")
cat("This is the F2 Loyal score",F_1,"\n")
cat("This is the F2 Churn score",F_2,"\n")
}
cat("…\n")
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment