What makes a classifier misclassify data? Could it be from the data itself? Or is it because the model can't detect efficiently the similarities between data, or are there other reasons for misclassification? 
 A: Let's assume you are talking about mis-classification on training data, i.e., difficult to minimize the loss on training data set, no testing data over-fitting problem involved.
You are correct that, in most cases, the mis-classification can coming from "model is too simple" or "the data is too noisy". I would like to give two examples to further illustrate.


*

*The model is "too simple" to capture the "patterns in data". 


*

*The example is shown in the left figure. Suppose we want to use a logistic regression / a line to separate two classes, but the two classes are not linear separable. 

*In this case, there still are "notable patterns in the data", and if we change the model, we may getting better. For example, if we use KNN classifier, instead of logistic regression, we can have very good performance.


*The data has too much noise, that it is very hard to do the classification task. 


*

*The example is shown in the right figure, where, if you check the code, you will see two classes are very similar (two classes are 2D Gaussian, the mean is $0.01\times 2$ apart, but the standard deviation for each class is $1.0$ ). It is essentially a very challenging task.




Note that the two examples are trivial, since we can visualize the data and the classifier. In the real world, it is not the case, when we have millions of data points and super complicated classifiers.
Code:
library(mlbench)
set.seed(0)
par(mfrow=c(1,2))
d=mlbench.spirals(500)
plot(d)
lg_fit=glm(d$classes~d$x[,1]+d$x[,2]-1,family=binomial())
abline(0,-lg_fit$coefficients[1]/lg_fit$coefficients[2])

d2=mlbench.2dnormals(500,r=0.01)
plot(d2)

A: In addition to @hxd1011 (+1).


*

*Class imbalance in relative terms or absolute terms. In both cases we build an inadequate representation of the class of interest. Usually the later is more difficult to overcome. (Example reference: Learning from Imbalanced Data by He and Garcia)

*Improper classification criteria. We train our classifier using an inappropriate evaluation function and/or use inappropriate criteria to derive our final solution. Very common issue when using "canned solutions". (Example reference: Damage Caused by Classification Accuracy and Other Discontinuous Improper Accuracy Scoring Rules  by Harrell)

*There is no class in reality. We wish there is something there but really there is nothing. Usually domain-expertise steers people away from this but as a new comer this is always an issue. (Example reference: Our daily life. Publication bias probably is an issue here too...)

*Overfitting. We have a decent model and a decent dataset but we fail to train appropriate building an unrealistic model. Usually this relates to point 2. (Extra-points for under-fitting!) (Example reference: The Problem of Overfitting by Hawkings)

*Concept drift. Things change and we don't retrain. Our classifier has excellent performance in our "Christmas sales" marketing sample - yeah, using this model in July probably will be a pain...(Example reference: A Survey on Concept Drift Adaptation by Gama et al.)

*Data leakage / Magic features. We train from information that will be unavailable at the time of prediction. Common when having event/time-series like data. (Example reference: Leakage in Data Mining: Formulation, Detection, and Avoidance by Kaufman et al.)

