Bad input shape error on SVM training using scikit
ML System Design practice on Codemia
Design recommenders, ranking systems and training pipelines the way ML interviews actually ask for them, with worked solutions.
Introduction
Most "bad input shape" errors in scikit-learn SVM code come from one rule: X must be a two-dimensional array of shape (n_samples, n_features), while y must usually be a one-dimensional target vector. If either side has the wrong shape, SVC.fit raises a ValueError.
The confusing part is that NumPy, pandas, and slicing operations can quietly change dimensionality. A column can turn into a one-dimensional series, or a target can become a two-dimensional frame, and the SVM then rejects it.
What Shape the SVM Expects
For a normal classification task:
- '
Xis a matrix' - each row is one sample
- each column is one feature
- '
yis a vector with one label per sample'
This is correct:
Here X.shape is (4, 2) and y.shape is (4,), which is exactly what the estimator wants.
The Most Common Shape Mistake
The most frequent bug appears when you have a single feature and pass a flat array instead of a two-dimensional matrix.
This fails:
Typical error text looks like this:
The fix is to reshape the input so each value becomes a row with one feature:
The -1 tells NumPy to infer the number of rows, and 1 means one feature column.
pandas-Specific Issues
With pandas, the difference between df["feature"] and df[["feature"]] matters.
df["height"] is a series, so it is one-dimensional. For an SVM feature matrix, use:
df[["height"]] keeps the two-dimensional table shape.
The same idea applies when selecting multiple columns. Make sure your column list stays inside double brackets so you still get a frame instead of a series.
Mismatched Training and Prediction Shapes
You can also get shape errors during prediction. If the model was trained on two features, a future call to predict must also provide two features per sample.
This is correct because sample.shape is (1, 2): one sample, two features.
This is wrong:
That is a one-dimensional array. Wrap it in another list or reshape it:
Practical Debugging Checklist
Before calling fit or predict, print shapes directly:
For classification with scikit-learn SVMs, a good default checklist is:
- '
X.ndim == 2' - '
y.ndim == 1' - '
len(X) == len(y)' - training and prediction inputs use the same number of feature columns
If you use preprocessing pipelines, check the output of the transformer too. A custom preprocessing step can flatten arrays accidentally.
Common Pitfalls
The biggest pitfall is assuming a single feature can be passed as a simple list. In scikit-learn, one feature still needs a two-dimensional matrix with one column.
Another common mistake is passing y as a data frame with shape (n, 1) instead of a series or flat array. Some estimators handle that quietly, but many workflows behave better when the target is explicitly one-dimensional.
Slicing is another source of bugs. In pandas, df["col"] and df[["col"]] are not interchangeable. One gives a series, the other gives a frame.
Finally, do not guess. Print X.shape and y.shape before training. Most shape bugs become obvious immediately once you inspect the arrays.
Summary
- '
Xfor an SVM must usually have shape(n_samples, n_features).' - '
yshould usually be a one-dimensional label array.' - A single feature still needs a two-dimensional input such as
reshape(-1, 1). - In pandas, use
df[["col"]]for feature matrices anddf["label"]for targets. - Training and prediction must use the same number of feature columns.
- Printing shapes is the fastest way to diagnose these errors.
Related reading
- Bag Of Visual Words Implementation in Python is giving terrible accuracy
- Balanced Accuracy \`Score\` in Tensorflow
- Basic tensorflow classification example
- Basic Tensorflow Question Input and Output Array
- Bayesian networks in Scala
- Beginner's resources/introductions to classification algorithms
- Bad Request - This combination of host and port requires TLS. with Spring Boot
- Bad Request No indexed columns present in by-columns clause with Equal operator CQL error?
.png&w=3840&q=75)
Tackling System Design Interview Problems
A short course that equips you with the skills to approach system design interviews methodically.
Start the free courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
ML System Design practice on Codemia
Design recommenders, ranking systems and training pipelines the way ML interviews actually ask for them, with worked solutions.