Below is a narrative of what I did, but in class I may have, at least partially, referred to these slides.
How do you learn in a system where knowledge comes in over time and you want to use prior knowledge along with the new knowledge? We looked at this from an abstract point of view last week when we looked at how a system can evolve the definition for a "Frinkle" (an arch actually) as new information came in. That was in principle. How do we do it in practice?
First of all, we have to review how we represent knowledge. So far this semester, we have done that using predicate logic. Thus, one way to represent what we know about the restaurant example from chapter 18 is to represent it in logic...
Alternate(X1) ^ ¬Bar(X1) ^ ¬Frid(X1) ^ Hungry(X1) .... -> WillWait(X1)
But this is just one example. We would need to encode all 12 examples, and then join them with disjunction to illustrate that either one of those 12 cases is valid. The problem is, that is VERY restrictive. It suggests that we don't know anything more than those 12 cases. In fact, the book PROPOSED that we know more than that through the construction of the decision tree (Figure 18.6). If we consider this tree, we get a much more logical definition
ForAll x WillWait(x) <=> Patrons(x,Some)
V Patrons(x,Full) ^ Hungry(x) ^ Type(x,French)
V Patrons(x,Full) ^ Hungry(x) ^ Type(x,Thai) ^ Fri(x)
V Patrons(x,Full) ^ Hungry(x) ^ Type(x,Burger)
The question is, how can we use this type of representation to help us modify our current set of Hypotheses as new knowledge comes in?
To do this, we want to address the concepts of false positives and false negatives.
A false positive is an example whose known outcome is negative, but which is classified as positive by a hypothesis.
A false negative is an example whose known outcome is positive, but which is classified as negative by a hypothesis.
In both cases, we know that we have to make modifications to our current hypotheses. When we obtain a false positive, then we know that we have a hypothesis which is too general. That is, it allows things to be classified as positive, when they should not be. The way to fix this is to add another condition to our hypothesis.
When we obtain a false negative, then we know that we have a hypothesis which is too restrictive. That is, it throws out things which should be classified as positive. The way to fix this is to remove a condition from our hypothesis.
This sounds really easy, and in fact, it is to a certain extent. However, it can also be very complicated.
Consider the process of learning the WillWait(x) predicate starting with X1 (see page 682).
Let's consider this again. Consider the same process starting with X4 (IN CLASS: I handed out a revision of this table that STARTED with X4 and).
H1 : ForAll x WillWait(x) <=> Alternate(x).
H2 : ForAll x WillWait(x) <=> Alterante(x) ^ Hungry(x).
H3 : ForAll x WillWait(x) <=> Hungry(x)
H4 : ForAll x WillWait(x) <=> Hungry(x) ^ ¬Cost(x,$$$)
H5 : ForAll x WillWait(x) <=> Hungry(x) ^ ¬Cost(x,$$$)
V Hungry(x) ^ Cost(x,$$$) ^ Patrons(x,Some)
...