मेरे पास 3 चर (वी 1, वी 2 और वी 3) के साथ यह सर्कल डेटासेट है, जहां वी 1 एक्स-अक्ष पर यादृच्छिक बिंदु हैं और वाई-अक्ष पर वी 2 हैं। और V3 एक क्लासिफायरियर है यदि बिंदु एक वृत्त है या नहीं।

वृत्त समीकरण x^2 + y^2

मैं ggplot2 की मदद से निर्णय पेड़, बहुपद रसद प्रतिगमन और Naïve Bayes प्रमेय जैसे मॉडलों का उपयोग करके सर्कल के चारों ओर एक निर्णय सीमा तैयार करने की कोशिश कर रहा हूं, लेकिन मैं ऐसा करने में असमर्थ हूं।

यह डेटा का लिंक है: https://drive.google.com /file/d/1ZEuwrBN6ilKIDVVT8WGH1SRLTi3diL9Q/view?usp=sharing

नीचे मेरा कोड है:

library(ggplot2)
circle = read.csv("unknown.arff", header=FALSE, comment.char = "@")

######################## MODEL 1: Decision Tree
#Loading the decision tree library
library(rpart)

#Fitting the decision tree model
Circle_tree = rpart(V3 ~V1+V2, data=circle)

# Predicting the probability of having a circle
tree_p = predict(Circle_tree, circle)

#Making 0.5 or more as a cutoff rate for having circle 
Tree = ifelse(tree_p >= 0.5, 1, 0)

#ploting the expected output as per Decision tree
ggplot(circle, aes(x = V1, y =V2, color = Tree)) + 
  geom_point(size = 2) + 
  ggtitle("Decision Tree")


######################## MODEL 2: Logistics Regression with Polynomial terms
#Fitting the Logistics Regression
glm.fit = glm(V3~V2+V1+ I(V1^2)+ I(V2^2), family = "binomial", data = circle)

# Predicting the probability of having a circle
p =predict(glm.fit, circle, type = "response")

#Making 0.5 or more as a cutoff rate for having circle 
Logistic_poly = ifelse(p >= 0.5, 1, 0)

#ploting the expected output as per logistics regression with polynomial terms
ggplot(circle, aes(x = V1, y =V2, color = Logistic_poly)) + 
  geom_point(size = 2) +
  ggtitle("Logistics Regression with Polynomial Terms")



######################## MODEL 3: Naive Bayes Classifier
# Loading the library
library(e1071)

#Fitting the naive bayes classifier
circle_nb = naiveBayes(V3 ~V1+V2, data=circle)


# Predicting the probability of having a circle
nb_p = predict(circle_nb, circle, type = "raw")

#Making 0.5 or more as a cutoff rate for having circle 
Naive_Bayes = ifelse(nb_p >= 0.5, 1, 0)

#ploting the expected output as per Naive Bayes Classifier
ggplot(circle, aes(x = V1, y =V2, color = Naive_Bayes[,2])) + 
  geom_point(size = 2) + 
  ggtitle("Naive Bayes Classifier")
2
Karan 21 नवम्बर 2019, 05:45

1 उत्तर

सबसे बढ़िया उत्तर

आप उन बिंदुओं का सबसेट प्राप्त कर सकते हैं जो grDevices::chull के साथ निर्दिष्ट बिंदुओं के सेट के उत्तल पतवार पर स्थित हैं और बोर्डर को geom_polygon() से ड्रा करें।
(मैंने उदाहरण के तौर पर डिसीजन ट्री मॉडल का इस्तेमाल किया)।
जब आप grDevices::chull x और y निर्देशांक देते हैं, तो यह उत्तल पतवार पर बिंदुओं के सूचकांकों को दक्षिणावर्त क्रम में लौटाता है (उत्तल पतवार विकि)

# making a lot of points to use predict

new_d <- expand.grid(V1 = seq(-5, 5, 0.01), V2 = seq(-5, 5, 0.01))


# predicting and get inner points

new_tree_p <- predict(Circle_tree, new_d)
new_Tree <- ifelse(new_tree_p >= 0.5, 1, 0)

inner_points_set <- new_d[new_Tree == 0,]


# getting the subset of points which lie on the convex hull

convex_points_set <- inner_points_set[grDevices::chull(inner_points_set$V1, inner_points_set$V2),]

# or if you want to use circle data

inner_points_set2 <- circle[Tree == 0, ]
convex_points_set2 <- inner_points_set2[grDevices::chull(inner_points_set2$V1, inner_points_set2$V2),]


## drawing with geom_polygon()

ggplot(circle, aes(x = V1, y =V2, color = Tree)) + 
  geom_point(size = 2) + 
  geom_polygon(data = convex_points_set, fill = NA, colour = "red") +
  geom_polygon(data = convex_points_set2, fill = NA, colour = "green3") +
  ggtitle("Decision Tree")
1
cuttlefish44 22 नवम्बर 2019, 07:27