Hey,
The short answer is yes, you should almost always specify all your targets.
(Read below for the caveats.)
Now for the long answer:
Keep in mind the collective nature of PSL (and all SRL methods).
The goal is not to predict just one thing, but predict things with multiple and potentially complex dependencies.
Because of these dependencies, leaving out targets could severely impact performance.
For example, lets say you are trying to predict friendship.
We have three people: 'Alice', 'Bob', and 'Claire' and we are using a transitive rule like this:
Friends(A, B) & Friends(B, C) -> Friends(A, C)
Even if we were just interested in the target: Friends('Alice', 'Claire'), if we do not infer the value for dependent targets (Friends('Alice', 'Bob') and Friends('Bob', 'Claire') in this case) then we cannot properly reason about Friends('Alice', 'Claire').
ie, this ground would would not be generated: Friends('Alice', 'Bob') & Friends('Bob', 'Claire') -> Friends('Alice', 'Claire')
So in general, we recommend that people define all their targets.
However if you have cliques in your data, then you can just specify the clique the desired target is in as your targets.
Lazy inference will then grow the target set to all dependent atoms until it discovers no more.
Lazy inference is generally slower than normal inference (because it is iterative, whereas non-lazy is one-shot).
However, if you data does have a clique around your desired target, then lazy inference will typically find it and stop there.
-eriq