[comp.ai.neural-nets] Responses on the Normal vs. Abnormal Problem

loren@tristan.llnl.gov (Loren Petrich) (08/04/90)

	I did get some responses to the problem of distinguishing
normal and abnormal conditions using Neural Nets.

	First off, I was told by one person that I had not posed the
problem, that one has to define "normal" and "abnormal". But I think I
should give an example of what I mean: Consider a system that is
intended to recognize printed or handwritten letters. Anything that
looks like a letter is "normal"; anything that does not is "abnormal".
I am sure that most of you net.people can think of problems that you
are familiar with where one may want to distinguish "normal" and
"abnormal" data.

	Now for actual ideas:

	Bernd Fritzke (fritzke@immd2.informatik.uni-erlangen.de)
suggested to me to train a Kohonen net on a mixture of normal and
random data (he recommends 80% and 20% each); and checking which nodes
respond strongest to normal data and which ones do not.

	One decides if a new data vector is normal or abnormal by
seeing whether it is closest to a "normal" or an "abnormal"
Kohonen-net vector.

	Matt Kennel (mbk%inls1@ucsd.edu) suggested constructing a k-d
tree based on the training set and finding the nearest neighbor of a
data point with the use of it. I am not sure that that is quite
practical; I think that one ought to try to "summarize" the training
set of "normal" data in some way.

	Evan Manning (manning%chamber.caltech.edu@Tybalt.Caltech.Edu)
suggested that ART might be a good system to use. Unfortunately, I
don't know how to set up an ART NN. Can anyone help me on that subject
-- and explain the pros and cons of it?

	Paul Hess (abtech@acci.com) suggested that one use the
following appropriate. For a data vector x1,x2,...,xn, train n nets:
one to find x1 given x2,...,xn, one to find x2 given x1,x3,...,xn,
etc. -- all on "normal" examples. Trying a new data vector will give
"normal" if the "self-predicted" values of the data points are close
to their true values, "abnormal" if otherwise.

	Paul Hess's technique seems impractical for large data sets,
but it did give me an idea. It is to train an auto-associative NN on a
training set of "normal" data.

	Once trained, give it a data vector as input. As output, it
will give what it "thinks" the data vector really is -- some "normal"
data vector. If the data vector is "normal" then input and output will
be close. Otherwise, the two will be noticeably different. And this
system will even give a measure of the "abnormality" in the distance
between the input and the output. For practical applications, it may
be desirable to train several different networks on the same data set;
and check on what degree of "normality" that each of them finds. That
way, one may get around any quirks in the training of any one of them.

	Has anyone else thought of this scheme? I have not seen it
suggested anywhere else.

						        ^    
Loren Petrich, the Master Blaster		     \  ^  /
	loren@sunlight.llnl.gov			      \ ^ /
One may need to route through any of:		       \^/
						<<<<<<<<+>>>>>>>>
	lll-lcc.llnl.gov			       /v\
	lll-crg.llnl.gov			      / v \
	star.stanford.edu			     /  v  \
						        v    
For example, use:
loren%sunlight.llnl.gov@star.stanford.edu

J. Danforth Quayle: political bimbo extraordinaire