原理:先计算出与物品最近的物品(用manhattan距离),然后以最相似物品的评分来估计现在的。
users = {"Angelica": {"Dr Dog/Fate": "L", "Phoenix/Lisztomania": "L",
"Heartless Bastards/Out at Sea": "D",
"Todd Snider/Don't Tempt Me": "D", "The Black Keys/Magic Potion": "D",
"Glee Cast/Jessie's Girl": "L", "La Roux/Bulletproof": "D",
"Mike Posner": "D", "Black Eyed Peas/Rock That Body": "D",
"Lady Gaga/Alejandro": "L"},
"Bill": {"Dr Dog/Fate": "L", "Phoenix/Lisztomania": "L",
"Heartless Bastards/Out at Sea": "L", "Todd Snider/Don't Tempt Me": "D",
"The Black Keys/Magic Potion": "L", "Glee Cast/Jessie's Girl": "D",
"La Roux/Bulletproof": "D", "Mike Posner": "D",
"Black Eyed Peas/Rock That Body": "D", "Lady Gaga/Alejandro": "D"}
}
items = {"Dr Dog/Fate": [2.5, 4, 3.5, 3, 5, 4, 1],
"Phoenix/Lisztomania": [2, 5, 5, 3, 2, 1, 1],
"Heartless Bastards/Out at Sea": [1, 5, 4, 2, 4, 1, 1],
"Todd Snider/Don't Tempt Me": [4, 5, 4, 4, 1, 5, 1],
"The Black Keys/Magic Potion": [1, 4, 5, 3.5, 5, 1, 1],
"Glee Cast/Jessie's Girl": [1, 5, 3.5, 3, 4, 5, 1],
"La Roux/Bulletproof": [5, 5, 4, 2, 1, 1, 1],
"Mike Posner": [2.5, 4, 4, 1, 1, 1, 1],
"Black Eyed Peas/Rock That Body": [2, 5, 5, 1, 2, 2, 4],
"Lady Gaga/Alejandro": [1, 5, 3, 2, 1, 2, 1]
}
def manhattan(v1, v2):
"""Computes the Manhattan distance."""
distance = 0
n = len(v1)
for i in range(n):
distance += abs(v1[i]-v2[i])
return distance
def computeNearestNeighbor(itemName,itemVector, items):
"""creates a sorted list of items based on their distance to item"""
distances = []
for otherItem in items:
if otherItem<>itemName:
distance = manhattan(itemVector, items[otherItem])
distances.append((distance,otherItem))
distances.sort()
return distances
def classify(user, itemName, itemVector):
"""Classify the itemName based on user ratings
Should really have items and users as parameters"""
# first find nearest neighbor
nearest = computeNearestNeighbor(itemName, itemVector,items)[0][1]
rating = users[user][nearest]
return rating
print classify('Angelica', 'Enya/Wild Child', [1, 5, 2.5, 1, 1, 5, 1])
版权声明:本文为博主原创文章,未经博主允许不得转载。