मैं कहाँ एक सरल नियम आधारित वर्गीकरण डेटा सेट का निर्माण होता है नीचे दिए गए कोड है में असफल रहे हैं:क्यों तंत्रिका नेटवर्क एक सरल classifcation मामले
# # Data preparation
data = data.frame(A = round(runif(100)), B = round(runif(100)), C = round(runif(100)))
# Y - is the classification output column
data$Y = ifelse((data$A == 1 & data$B == 1 & data$C == 0), 1, ifelse((data$A == 0 & data$B == 1 & data$C == 1), 1, ifelse((data$A == 0 & data$B ==0 & data$C == 0), 1, 0)))
# Shuffling the data set
data = data[sample(rownames(data)), ]
मैं डेटा प्रशिक्षण और परीक्षण में सेट बांट दिया है ताकि मैं
# # Divide into train and test
library(caret)
trainIndex = createDataPartition(data[, "Y"], p = .7, list = FALSE, times = 1) # for balanced sampling
train = data[trainIndex, ]
test = data[-trainIndex, ]
मैं पाशन (के रूप में उल्लेख here) द्वारा छिपी परत में न्यूरॉन्स की संख्या के साथ एक सरल तंत्रिका शुद्ध के निर्माण की कोशिश की है चुना जाता है
0,123,516: परीक्षण सेट पर मेरे परिणाम मान्य# # Build a neural net
library(neuralnet)
for(alpha in 2:10)
{
nHidden = round(nrow(train)/(alpha*(3+1)))
nn = neuralnet(Y ~ A + B + C, train, linear.output = F, likelihood = T, err.fct = "ce", hidden = nHidden)
# Calculate Mean Squared Error for Train and Test
trainMSE = mean((round(nn$net.result[[1]]) - train$Y)^2)
testPred = round(compute(nn,test[-length(ncol(test))])$net.result)
testMSE = mean((testPred - test$Y)^2)
print(paste("Train Error: " , round(trainMSE, 4), ", Test Error: ", round(testMSE, 4), ", #. Hidden = ", nHidden, sep = ""))
}
[1] "Train Error: 0, Test Error: 0.6, #. Hidden = 9"
[1] "Train Error: 0, Test Error: 0.6, #. Hidden = 6"
[1] "Train Error: 0, Test Error: 0.6, #. Hidden = 4"
[1] "Train Error: 0, Test Error: 0.6, #. Hidden = 4"
[1] "Train Error: 0.1429, Test Error: 0.8333, #. Hidden = 3"
[1] "Train Error: 0.1429, Test Error: 0.8333, #. Hidden = 2"
[1] "Train Error: 0.0857, Test Error: 0.6, #. Hidden = 2"
[1] "Train Error: 0.1429, Test Error: 0.8333, #. Hidden = 2"
[1] "Train Error: 0.0857, Test Error: 0.6, #. Hidden = 2"
यह फिट परिणामों पर खराब दे रहा था। लेकिन, जब मैंने एक ही डेटा सेट पर एक साधारण यादृच्छिक वन बनाया है। मैं के रूप में ट्रेन और परीक्षण त्रुटियों हो रही है - 0
# # Build a Random Forest
trainRF = train
trainRF$Y = as.factor(trainRF$Y)
testRF = test
library(randomForest)
rf = randomForest(Y ~ ., data = trainRF, mtry = 2)
# Calculate Mean Squared Error for Train and Test
trainMSE = mean((round(rf$votes[,2]) - as.numeric(as.character(trainRF$Y)))^2)
testMSE = mean((round(predict(rf, testRF, type = "prob")[,2]) - as.numeric(as.character(testRF$Y)))^2)
print(paste("Train Error: " , round(trainMSE, 4), ", Test Error: ", round(testMSE, 4), sep = ""))
[1] "Train Error: 0, Test Error: 0"
कृपया मुझे समझ क्यों तंत्रिका जाल एक सरल मामले में असफल रहे हैं जहां यादृच्छिक वन 100 प्रतिशत सटीकता के साथ काम कर रहा है में मदद करते हैं।
नोट: मैंने केवल एक छिपी हुई परत का उपयोग किया है (माना जाता है कि एक छिपी हुई परत इतनी सरल वर्गीकरण के लिए पर्याप्त है) और छिपी हुई परत में न्यूरॉन्स की संख्या पर पुनरावृत्ति की जाती है।
इसके अलावा, अगर मेरी तंत्रिका नेटवर्क पैरामीटर की मेरी समझ गलत है तो मेरी मदद करें।
पूरा कोड पाया जा सकता है here
ग्रेट, मैं सोच रहा था कि मैंने इस छोटी सी बग को कैसे याद किया है। धन्यवाद अब इसके परिणामस्वरूप '0 एमएसई 'ट्रेन' और 'टेस्ट' सेट हैं। –
आपने उल्लेख किया है ** 'एक समान प्रश्न मुझे कुछ समय के लिए शिकार कर रहा है' **। क्या मुझे यह मानने में आपका प्रश्न पता चल सकता है कि यह मुझे तंत्रिका नेटवर्क के साथ मेरी समझ में सुधार करने में मदद करेगा। –
निश्चित रूप से। मुझे लगता है कि मैं इसके लिए एक अलग पोस्ट लिखने वाला हूं। मैं आपको बता दूँगा। अनिवार्य रूप से, मेरे पास एक साधारण प्रतिगमन समस्या है जो, यादृच्छिक रूप से, लगभग पूरी तरह से मॉडलिंग की जाती है, और दूसरी बार बल्कि खराब होती है। यह स्पष्ट रूप से वजन के यादृच्छिक intialization से संबंधित है, लेकिन यह सब मुझे पता है। – sebastianmm