基于纯分类变量神经网络的预测计算问题咨询
Hey there! Let's break down the most common issues that pop up when predicting with your all-categorical neuralnet setup—especially with that many dummy variables (64 from 6 predictors) and 15 target classes. Here are actionable fixes to get your 2018 January predictions working:
1. Fix Dummy Variable Alignment Between Training and Prediction Data
This is the #1 culprit for prediction errors with categorical data. If your 2018 Jan data has missing categories, or you encoded it separately from the training set, the feature dimensions/order will mismatch, breaking the model.
- Do this instead: Use the training set's category levels to encode the prediction data. Merge both datasets first to ensure consistent dummy variables, then split back:
# Assume train_df = your training data, pred_df = 2018 Jan data # First, align factor levels for all predictors pred_df[] <- lapply(pred_df, function(col) { factor(col, levels = levels(train_df[[deparse(substitute(col))]])) }) # Combine only predictor columns, encode together combined_preds <- rbind(train_df[, names(pred_df)], pred_df) dummy_matrix <- model.matrix(~ . - 1, data = combined_preds) # -1 removes intercept # Split back to training and prediction dummies train_dummies <- dummy_matrix[1:nrow(train_df), ] pred_dummies <- dummy_matrix[(nrow(train_df)+1):nrow(combined_preds), ] - Double-check that
dim(train_dummies)anddim(pred_dummies)have the same number of columns—this is non-negotiable for neuralnet.
2. Correctly Process Model Output for Multi-Class Prediction
Since you have 15 target labels, the neuralnet's compute() function returns raw probability scores, not direct class labels. You need to map these to your categories:
# Assume nn_model is your trained neuralnet model pred_output <- compute(nn_model, pred_dummies) # Grab the column name (class) with the highest probability for each row predicted_classes <- colnames(pred_output$net.result)[max.col(pred_output$net.result)]
- Also, make sure you're only passing predictor dummies to
compute()—don't include the target column from your training data by mistake!
3. Fix Data Type Mismatches
Even a single character-type variable in your prediction data can throw off dummy encoding. Verify all predictors are factors matching the training set's levels:
# Check data types str(pred_df) # Convert any character columns to factors (using training set levels) for (col in names(pred_df)) { if (is.character(pred_df[[col]])) { pred_df[[col]] <- factor(pred_df[[col]], levels = levels(train_df[[col]])) } }
4. Address Overfitting Risks (Critical for Small Datasets)
You mentioned 2 years of monthly data—that's only 24 training samples, paired with 64 dummy variables. This is a classic high-dimensionality vs small sample size problem, which leads to overfitting. Your model might perform great on training data but fail on new predictions.
- Quick fixes:
- Reduce feature count: Merge rare categories in your predictors (e.g., if a variable has a level with <5% of samples, combine it with another similar level).
- Add regularization: Use cross-entropy loss (
err.fct = "ce") in neuralnet, which works better for classification than MSE. Adjust thethresholdparameter to control training stopping, and keep hidden layer neuron counts low (start with 10-15 neurons total).
5. Verify Neuralnet Formula Consistency
If you trained your model using a formula (e.g., neuralnet(target ~ ., data = train_dummies)), ensure the column names in pred_dummies exactly match those in train_dummies. Even a tiny difference (like var1_level1 vs var1.level1) will cause an error.
内容的提问来源于stack exchange,提问作者user3639100

