how do you visualize characteristic class? For cohomology, there are some equivalent definitions when the object we consider is sufficiently nice. Since I mainly work with algebraic variety, I will restrict the objects I am considering to be algebraic variety.
There are several ways I think of cohomology namely:


*

*singular cohomology (valuation of simplices)

*de Rham cohomology (differential form)

*Chow ring (closed subvariety)


I personal prefer thinking in the third way since it seems to be more geometric and easier for me to work with.
However, for characteristic classes, I find it hard to visualize. I know the technical details about them and some of their useful properties but I just don't get a feeling of it. Since I usually work over complex number, I personally more interested in how people think of Chern class.
Thank you!
 A: This is a variation on standard answers (to this standard question).  I'll start with a bit of philosophy since you mentioned different ways to think of cohomology.  Singular cohomology is fairly "transcendental" since to define a cochain one must assign a value to each and every chain.  When we teach basic topology, homology seems easier since we can draw/ conjure up finite linear combinations of such chains, at least in first examples.  
The latter two ways to define cohomology you cited make the assignments of values to chains geometrically - de Rham theory through integration, and sub manifolds through intersection.
So indeed, one can use your preferred intersection theory approach (which is mine too) to define characteristic classes as vanishing/independence loci.  But one can be slightly more direct in this setting.  First, triangulate your manifold and restrict to the simplicies, or if you wish just pull-back your bundle over a smooth chain (with some transversality assumptions so what's below works).
For the Stiefel-Whitney-Chern classes, take $n - i + 1$ sections of the original bundle.  The value of the $i$th SW or Chern class on a simplex will be the number of times these are linearly dependent over that simplex.
Schubert classes can be defined by embedding the bundle in a trivial bundle, and then counting the number of times a fiber over a simplex respects a given flag.
This Schubert style of geometry for characteristic classes is something I've also seen in my work on cohomology of symmetric groups, where Giusti, Salvatore and I give similar interpretations of characteristic classes of covering spaces.
A: Personally, I felt like I understood characteristic classes better once I stopped trying to understand them by visualizing them, and switched over to understanding them in an axiomatic context like you will find in Milnor-Stasheff or Bott-Tu. But I do still keep a few intuitions around about them. Since I work in geometry and topology some of this might be alien to a purely algebro-geometric point of view, but it may still be useful.
I think the clearest characteristic class to understand "visually" is the Euler class, which measures the primary obstruction for a (real, oriented) vector bundle over some space $X$ to have a nonvanishing section. A nonvanishing section of a vector bundle is equivalent to the associated unit sphere bundle admitting any section at all, so I'll switch to talking about sections of sphere bundles.
The picture is simplest for $S^1$ bundles. Fixing notation, let $S^1 \to E \to X$ be an $S^1$ bundle over $X$. Here, the class will be valued in $H^2(X, \mathbb Z)$. Via the universal coefficient theorem, (most of) the content of this class can be expressed in the following way: an element of $H^2(X, \mathbb Z)$ is a ``homologically coherent'' way of assigning elements in the coefficient ring ($\mathbb Z$) to the elements of $H_2(X, \mathbb Z)$, however you like to think of them. Working with cellular homology, what we need to do is assign integers to $2$-cells, and these integers should in some way measure the failure for the vector bundle in question to admit a section over this $2$-cell. 
Taken naively, this problem is stupid: a $2$-cell is contractible and so any bundle over it will admit a section. But this isn't a productive view to take if your aim is to attempt to patch together the various sections that you can construct over the $2$-cells individually. The right way to approach this is to start with a fixed section of the bundle over the entire $1$-skeleton of $X$, and then ask about extending this section over the $2$-cells. (A section will always exist over the $1$-skeleton, because the fiber is $0$-connected). 
So let $D$ be a $2$-cell. There's a fixed section of $E$ over $\partial D$. If we trivialize the restriction of $E$ over $D$ by choosing some identification with $D \times S^1$, in these coordinates, the section along the boundary is some copy of $S^1 = \partial D^2$ sitting above $D^2$. Projecting onto the fiber yields an element of $\pi_1(S^1)$, and this is what we define to be the value of the Euler class on the cell $D$! 
Why is this a useful invariant? Recall that the problem at hand is to study the obstruction to finding a section of $E$ over $D$. Once we have trivialized $E|_D \cong D \times S^1$, this is equivalent to finding a lift of $D = D^2$ to $D \times S^1$ that extends the section on the boundary. But this can be done if and only if the homotopy class of the section along the boundary is trivial, which is what the Euler class is measuring.
This is explained with some nice pictures in a book by Montesinos called Classical Tesselations and Three-Manifolds. I'm also sketching for you the basics of ``obstruction theory'', which provides a nice way of developing a topological theory of characteristic classes. In this context, one thinks of the Stiefel-Whitney classes (and the Chern classes, too, for that matter) as obstruction classes, where the obstruction problem at hand is to find a certain number of linearly independent sections of your vector bundle over a certain skeleton of your base space.
