P(x1 = H) = 1/2 -> H:P(x2 = H |x1 = H) = 0.9
T:P(x2 = T |x1 = T) = 0.8
P(x2 = H) = 0.55
P(x2:h) = P(x2 = H| x1 = H)*P(x1 = h)+ P(x2=H | x1 = T)*P(x1= T)
P(Y) = Σi P(Y|X=i) P(x=i) :total probability
随机应变 ABCD: Always Be Coding and … : хороший
P(x1 = H) = 1/2 -> H:P(x2 = H |x1 = H) = 0.9
T:P(x2 = T |x1 = T) = 0.8
P(x2 = H) = 0.55
P(x2:h) = P(x2 = H| x1 = H)*P(x1 = h)+ P(x2=H | x1 = T)*P(x1= T)
P(Y) = Σi P(Y|X=i) P(x=i) :total probability
Bayes network
altenator broken, fanbelt broken ->
battery dead -> battery flat -> car won’t start
-battery meter, battery age
light, oil light, gas gague
no oil, no gas, fuel line blocked, starter broken
Binary events
Probability
Simple bayes networks
Conditional independence
Bayes networks
D-seperation
Parameter counts
Bayes networks -> diagnostics, prediction, machine learning
Finance, Google, Robotics
particle filters, HMM, MDP + POMDPs, KALMAN filters …
Probabilities is certainty in AI
P(head) = 1/2, P(Tail) = 1/2
P(h, h, h) = 1/8, P(h) = 1/2
P(x1=x2=x3=x4)=0.125,
P({x1,x2,x3,x4} contains >= 3 h) = 5 / 16
Breakth-frist
Cheapest-first
Depth-first
Greedy best-first search
A* algorithm
f = g + h
g(path) = path cost
h(path) = h(s) = estimated distance to goal
A* finds lowest cost path is:
h(s) < true cost
Sliding blocks puzzle (15puzzle)
h1 = #misplaced blocks
h2 = sum(distances of blocks)
a block can move A -> B
if (A adjacent to B)
and (B is blank)
h2 h1
h = max(h1, h2)
Problem-solving works when:
-fully observable
-known
-discrete
-deterministic
-static
AI as uncertainty management
AI = What to do when you don’t know what to do?
Reasons for uncertainty.
Sensor limits
Definition
-initial state
-action(s) -> {a1, a2, a3 …}
-result(s,a) -> s1
-GoalTest(s) -> T|F
-PATH Cost(s->a -> s ->a ->s)-> n
step cost(s, a, s’) -> n
Tree search
function TREE SEARCH(problem):
frontier = {[initial]}
loop:
if frontier is empty: return FAIL
path = remove.choice(frontier)
s = path.end
if s is a goal: return path
for a in actions:
add [path + a -> result(s, a)]
to frontier
1.Fully versus partially observablez
-perception action cycle
Agent, State
(sensors, actuators)
2.Deterministic versus stochastic
3.Discrete versus continuous
4.Benign(no objective) versus adversarial(such as chess, games)
for example:
robot car -> partially observable, stochastic, continuous, adverial
A AI Program is called
・INTELLIGENT AGENT
how does agent make a decision?
AI has successfully been used in
-finance
-robotics
-games
-medicine
-the web
ex.
trading agent for stock market, bonds market, commodity
->with online news, buy or sell decision
AI in Robotics
camera, microphone, touch
-> motors, voice
AI in games
game agent play against you. your moves and own moves.
AI in medicine
diagnostic agent get vital signals
AI on the web
crawler
def reducer():
salesTotal = 0
oldKey = None
for line in sys.stdin:
data = line.strip().split("\t")
if len(data) != 2
continue
thisKey, thisSale = data
if OldKey, thisSale = data
print "{0}\t{1}".format(oldKey, salesTotal)
salesTotal = 0
oldKey = thisKey
salesTotal += float(thisSale)
def mapper():
for line in sys.stdin:
data = line.strip().split("\t")
date, time, store, item, cost, payment = data
print "{0}\t{1}".format(store, cost)
def get_db(db_name):
from pymongo import MongoClient
client = MongoClient('localhost:27017')
db = client[db_name]
return db
def make_pipeline():
pipeline = [ ]
return pipeline
def aggregate(db, pipeline):
return [doc for doc in db.tweets.aggregate(pipeline)]
if __name__ == '__main__':
db = get_db('twitter')
pipeline = make_pipeline()
result = aggregate(db, pipeline)
import pprint
assert len(result) == 1
assert result[0]["followers"] == 17209
{
"_id" : ObjectID("xxxx"),
"text" : "Something interesting ...",
"entities" : {
"user_mentions" : [
{
"screen_name" : "somebody_else",
...
}
],
"urls" : [],
"hashtags": []
},
"user" : {
"friends_count" : 544,
"screen_name" : "somebody",
"followers_count" : 100,
}
}
from pymongo import MongoClient
import pprint
client = MongoClient("mongodb://localhost:27017")
db = client.twitter
def most_tweets():
result = db.tweets.aggregate([
{ "$group" : {"_id" : "$user.screen_name",
"count": {"$sum" : 1}}},
{ "$sort" : {"count" : -1 }}
])
return result
if __name__ == '__main__':
result = most_tweets()
pprint.pprint(result)