рдЖрдзреБрдирд┐рдХ рджреБрдирд┐рдпрд╛ рдореЗрдВ, рдЕрдХреНрд╕рд░ рдПрдХ рд╕реВрдЪрдирд╛ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рд╛рдорд╛рди рдпрд╛ рд╕реЗрд╡рд╛рдУрдВ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдкреБрд░рд╛рдиреЗ рджрд┐рдиреЛрдВ рдореЗрдВ, рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдЙрддреНрдкрд╛рджреЛрдВ рдХреЗ рд╕рд╛рд░рд╛рдВрд╢ рдХреЗ рд╕рд╛рде рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ рдХреА рдЧрдИ рдереАрдВ: рдпрд╣ рдЕрдм рднреА рдЙрд╕реА
Google Play рдХреЛ рдЦреЛрд▓рдХрд░ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕рдордп рдХреЗ рд╕рд╛рде, рдЗрд╕ рддрд░рд╣ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХреЛ рд▓рдХреНрд╖рд┐рдд (рд▓рдХреНрд╖рд┐рдд) рдСрдлрд╝рд░ рджреНрд╡рд╛рд░рд╛ рдЕрдзрд┐рдЧреГрд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд▓рдЧрд╛: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рди рдХреЗрд╡рд▓ рд▓реЛрдХрдкреНрд░рд┐рдп рдЙрддреНрдкрд╛рджреЛрдВ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ, рдмрд▓реНрдХрд┐ рд╡реЗ рдЙрддреНрдкрд╛рдж рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкрд╕рдВрдж рдЖрдПрдВрдЧреЗред рдЗрддрдиреА рджреЗрд░ рдкрд╣рд▓реЗ, рдиреЗрдЯрдлреНрд▓рд┐рдХреНрд╕ рдиреЗ $ 1 рдорд┐рд▓рд┐рдпрди рдХреЗ рдкреБрд░рд╕реНрдХрд╛рд░ рдкреВрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдЖрдпреЛрдЬрд┐рдд рдХреА, рдЬрд┐рд╕рдХрд╛ рдХрд╛рдо рдлрд┐рд▓реНрдореЛрдВ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдирд╛ рдерд╛ (
рдЕрдзрд┐рдХ )ред рдЗрд╕реА рддрд░рд╣ рдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ?
рдпрд╣ рд▓реЗрдЦ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдорд╛рдирддрд╛ рдХреЗ рд▓рд┐рдП рд╕рд╣рдпреЛрдЧреА рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдХреЙрд╢рди рдорд╛рдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЕрдЬрдЧрд░ рдореЗрдВ рдЗрд╕рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рднреА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛
рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрди рд░реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрддреНрдкрд╛рджреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВ, рдкреНрд░рд╕реНрддреБрддрд┐ рдХреА рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рдЙрддреНрдкрд╛рджреЛрдВ рдХреЛ 1-9 рдирдВрдмрд░ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ:

рдЖрдк рдЗрд╕реЗ рдПрдХ рд╕реАрдПрд╕рд╡реА рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓рд╛ рдХреЙрд▓рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рд╣реИ, рджреВрд╕рд░рд╛ рдЙрддреНрдкрд╛рдж рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реИ, рдФрд░ рддреАрд╕рд░рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рд░реЗрдЯрд┐рдВрдЧ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реАрдПрд╕рд╡реА рдлрд╝рд╛рдЗрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
alex,1,5.0 alex,2,3.0 alex,5,4.0 ivan,1,4.0 ivan,6,1.0 ivan,8,2.0 ivan,9,3.0 bob,2,5.0 bob,3,5.0 david,3,4.0 david,4,3.0 david,6,2.0 david,7,1.0
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдЙрдкрд░реЛрдХреНрдд рд╕реАрдПрд╕рд╡реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИред рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдЬрдЧрд░ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рддрд╛рдирд╛ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ: рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ "рдЙрддреНрдкрд╛рдж": "рд░реЗрдЯрд┐рдВрдЧ" рдлреЙрд░реНрдо рдХреА рдЕрдкрдиреА рд░реЗрдЯрд┐рдВрдЧ рдХреА рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реМрдВрдкреА рдЬрд╛рддреА рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдирд┐рдХрд▓реЗрдЧрд╛:
import csv def ReadFile (filename = "<csv_file_location>"): f = open (filename) r = csv.reader (f) mentions = dict() for line in r: user = line[0] product = line[1] rate = float(line[2]) if not user in mentions: mentions[user] = dict() mentions[user][product] = rate f.close() return mentions
рд╕рдорд╛рдирддрд╛ рдХрд╛ рдорд╛рдк
рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирдВрдмрд░ 1 рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрддреНрдкрд╛рдж рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрди рдЙрддреНрдкрд╛рджреЛрдВ рд╕реЗ рдЪреБрдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдХреБрдЫ 2-3-4-рдЖрджрд┐ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрдЦреНрдпрд╛ 1 рдореЗрдВ рдЙрдирдХреА рд░реЗрдЯрд┐рдВрдЧ рдХреЗ рд╕рдорд╛рди рд╣реИрдВред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдЗрд╕ "рд╕рдорд╛рдирддрд╛" рдХреА рдПрдХ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ? рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ M рдЙрддреНрдкрд╛рдж рд╣реИрдВред рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЧрдИ рд░реЗрдЯрд┐рдВрдЧ рдЙрддреНрдкрд╛рджреЛрдВ рдХреЗ рдПрдо-рдЖрдпрд╛рдореА рд╕реНрдерд╛рди рдореЗрдВ рдПрдХ рд╡реЗрдХреНрдЯрд░ рд╣реИ, рдФрд░ рд╣рдо рд╡реИрдХреНрдЯрд░ рдХреА рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдВрднрд╛рд╡рд┐рдд рдЙрдкрд╛рдпреЛрдВ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИрдВ:
- рдХреЛрд╕рд╛рдЗрди рдорд╛рдк
- рдкреАрдпрд░рд╕рди рд╕рд╣рд╕рдВрдмрдВрдз рдЧреБрдгрд╛рдВрдХ
- рдпреВрдХреНрд▓рд┐рдбрд┐рдпрди рджреВрд░реА
- рддрдирд┐рдореЛрдЯреЛ рдЧреБрдгрд╛рдВрдХ
- рдореИрдирд╣рдЯреНрдЯрди рджреВрд░реА, рдЖрджрд┐ред
рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ, рдЙрдирдХреЗ рдЖрд╡реЗрджрди рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЙрдкрд╛рдпреЛрдВ рдФрд░ рдкрд╣рд▓реБрдУрдВ, рдореИрдВ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред рдЕрднреА рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХрд┐ рд╕рд┐рдлрд╛рд░рд┐рд╢рдХрд░реНрддрд╛ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рдХреЛрд╕рд╛рдЗрди рдорд╛рдк рдФрд░ рддрдиреАрдореЛрддреЛ рдХреЗ рд╕рд╣рд╕рдВрдмрдВрдз рдЧреБрдгрд╛рдВрдХ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЖрдЗрдП рд╣рдо рдХреЛрд╕рд╛рдЗрди рдЙрдкрд╛рдп рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдЬрд┐рд╕реЗ рд╣рдо рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рджреЛ рд╡реИрдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП рдХреЛрд╕рд╛рдЗрди рдорд╛рдк рдЙрдирдХреЗ рдмреАрдЪ рдХреЗ рдХреЛрдг рдХрд╛ рдХреЛрд╕рд╛рдЗрди рд╣реИред рдЧрдгрд┐рдд рдореЗрдВ рд╕реНрдХреВрд▓ рдХреЗ рдкрд╛рдареНрдпрдХреНрд░рдо рд╕реЗ, рд╣рдореЗрдВ рдпрд╛рдж рд╣реИ рдХрд┐ рджреЛ рд╡реИрдХреНрдЯрд░реЛрдВ рдХреЗ рдмреАрдЪ рдХрд╛ рдХреЛрд╕рд╛рдЗрди рдЙрдирдХрд╛ рд╕реНрдХреЗрд▓рд░ рдЙрддреНрдкрд╛рдж рд╣реИ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рджреЛ рд╡реИрдХреНрдЯрд░реЛрдВ рдХреА рд▓рдВрдмрд╛рдИ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛрддрд╛ рд╣реИ:

рд╣рдо рдЗрд╕ рдорд╛рдк рдХреА рдЧрдгрдирд╛ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдирд╣реАрдВ рднреВрд▓рддреЗ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд░реЗрдЯрд┐рдВрдЧ рд╣реИрдВ рдЬреЛ рдкреНрд░рдкрддреНрд░ "рдЙрддреНрдкрд╛рдж" рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХреА рдЧрдИ рд╣реИрдВ: "рд░реЗрдЯрд┐рдВрдЧ"
def distCosine (vecA, vecB): def dotProduct (vecA, vecB): d = 0.0 for dim in vecA: if dim in vecB: d += vecA[dim]*vecB[dim] return d return dotProduct (vecA,vecB) / math.sqrt(dotProduct(vecA,vecA)) / math.sqrt(dotProduct(vecB,vecB))
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рджреМрд░рд╛рди, рдЗрд╕ рддрдереНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рд╡реЗрдХреНрдЯрд░ рдХрд╛ рд╕реНрдХреЗрд▓рд░ рдЙрддреНрдкрд╛рдж рд╕реНрд╡рдпрдВ рд╡реЗрдХреНрдЯрд░ рдХреА рд▓рдВрдмрд╛рдИ рдХрд╛ рд╡рд░реНрдЧ рджреЗрддрд╛ рд╣реИ - рдпрд╣ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЧрддрд┐ рдореМрд▓рд┐рдХ рдирд╣реАрдВ рд╣реИред
рд╕рд╣рдпреЛрдЧрд╛рддреНрдордХ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо
рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХрд╛ рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╣реИ рдФрд░ рд╣рдо рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ рдХрд┐ рджреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рдорд╛рди рдХреИрд╕реЗ рд╣реИрдВред рдЕрдм рдпрд╣ рд╕рд╣рдпреЛрдЧреА рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
- L рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, рдЬрд┐рдирдХрд╛ рд╕реНрд╡рд╛рдж рдкреНрд░рд╢реНрди рдХреЗ рд╕реНрд╡рд╛рдж рдХреЗ рд╕рдорд╛рди рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП, рдкреНрд░рд╢реНрди рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЪрдпрдирд┐рдд рдорд╛рдк (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЛрд╕рд╛рдЗрди) рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдФрд░ рдПрд▓ рд╕рдмрд╕реЗ рдмрдбрд╝реЗ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред рдЗрд╡рд╛рди рдХреЗ рд▓рд┐рдП, рдЙрдкрд░реЛрдХреНрдд рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореВрд▓реНрдп рдорд┐рд▓рддреЗ рд╣реИрдВ:

- рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП, рдкрд░рд┐рдХрд▓рд┐рдд рдорд╛рдк рдорд╛рди рджреНрд╡рд╛рд░рд╛ рдЙрд╕рдХреА рд░реЗрдЯрд┐рдВрдЧ рдХреЛ рдЧреБрдгрд╛ рдХрд░реЗрдВ, рдЗрд╕рд▓рд┐рдП рдЕрдзрд┐рдХ "рд╕рдорд╛рди" рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд░реЗрдЯрд┐рдВрдЧ рд╕реЗ рдЙрддреНрдкрд╛рдж рдХреА рдЕрдВрддрд┐рдо рд╕реНрдерд┐рддрд┐ рдкрд░ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡ рдкрдбрд╝реЗрдЧрд╛, рдЬрд┐рд╕реЗ рдиреАрдЪреЗ рджреА рдЧрдИ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- рдкреНрд░рддреНрдпреЗрдХ рдЙрддреНрдкрд╛рдж рдХреЗ рд▓рд┐рдП, рдирд┐рдХрдЯрддрдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ L рдХреЗ рдХреИрд▓рд┐рдмреНрд░реЗрдЯреЗрдб рдЕрдиреБрдорд╛рдиреЛрдВ рдХреА рд░рд╛рд╢рд┐ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ, рдЪрдпрдирд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдЙрдкрд╛рдпреЛрдВ L рдХреЗ рдпреЛрдЧ рд╕реЗ рдкрд░рд┐рдгрд╛рдореА рд░рд╛рд╢рд┐ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВред рд░рд╛рд╢рд┐ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ "рдпреЛрдЧ" рдореЗрдВ рдЪрд┐рддреНрд░рдг рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдХреБрд▓ рдореВрд▓реНрдп "рдкрд░рд┐рдгрд╛рдо"

рдЙрди рдЙрддреНрдкрд╛рджреЛрдВ рдХреЗ рдХреЙрд▓рдо рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╢реНрди рдореЗрдВ рджрд┐рдП рдЧрдП рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдЧреНрд░реЗ рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рдкреЗрд╢ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ
рд╕реВрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

рдЬрд╣рд╛рдВ рд╕рд┐рдо рдлрд╝рдВрдХреНрд╢рди рдЙрди рджреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд╕рдорд╛рдирддрд╛ рдХрд╛ рдорд╛рдк рд╣реИ, рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдордиреЗ рдЪреБрдирд╛ рд╣реИ, рдпреВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рд╕реЗрдЯ рд╣реИ, рдЖрд░ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЧреНрд░реЗрдб рд╣реИ, рдХрд╢реНрдореАрд░ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдЧреБрдгрд╛рдВрдХ рд╣реИ:

рдЕрдм рдпрд╣ рдХреЗрд╡рд▓ рдЙрдкрдпреБрдХреНрдд рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣ рдЧрдпрд╛ рд╣реИ
import math def makeRecommendation (userID, userRates, nBestUsers, nBestProducts): matches = [(u, distCosine(userRates[userID], userRates[u])) for u in userRates if u <> userID] bestMatches = sorted(matches, key=lambda(x,y):(y,x), reverse=True)[:nBestUsers] print "Most correlated with '%s' users:" % userID for line in bestMatches: print " UserID: %6s Coeff: %6.4f" % (line[0], line[1]) sim = dict() sim_all = sum([x[1] for x in bestMatches]) bestMatches = dict([x for x in bestMatches if x[1] > 0.0]) for relatedUser in bestMatches: for product in userRates[relatedUser]: if not product in userRates[userID]: if not product in sim: sim[product] = 0.0 sim[product] += userRates[relatedUser][product] * bestMatches[relatedUser] for product in sim: sim[product] /= sim_all bestProducts = sorted(sim.iteritems(), key=lambda(x,y):(y,x), reverse=True)[:nBestProducts] print "Most correlated products:" for prodInfo in bestProducts: print " ProductID: %6s CorrelationCoeff: %6.4f" % (prodInfo[0], prodInfo[1]) return [(x[0], x[1]) for x in bestProducts]
рдЗрд╕рдХреЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ:
rec = makeRecommendation ('ivan', ReadFile(), 5, 5)
рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдирд┐рдореНрди рдкрд░рд┐рдгрд╛рдо рд╣реЛрдВрдЧреЗ:

рдирд┐рд╖реНрдХрд░реНрд╖
рд╣рдордиреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрд╛ рдФрд░ рдПрдХ рдХреЛрд╕рд╛рдЗрдирд┐рдЯреА тАЛтАЛрд╕рдорд╛рдирддрд╛ рдорд╛рдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╣рдпреЛрдЧреА рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред рдпрд╣ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рд╕рд╣рдпреЛрдЧреА рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХреЗ
рдЕрдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИрдВ, рдЙрддреНрдкрд╛рдж рд░реЗрдЯрд┐рдВрдЧ рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП
рдЕрдиреНрдп рд╕реВрддреНрд░ , рд╕рдорд╛рдирддрд╛ рдХреЗ рдЕрдиреНрдп рдЙрдкрд╛рдп (
рд▓реЗрдЦ , рдЕрдиреБрднрд╛рдЧ "рдпрд╣ рднреА рджреЗрдЦреЗрдВ")ред рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдФрд░ рд╡рд┐рдХрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
- рдкреНрд░рдпреБрдХреНрдд рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдЕрдиреБрдХреВрд▓рди ред рдЬрдм рдкрд╛рдпрдерди рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рддрд╛рдирд╛рд╢рд╛рд╣ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рд░ рдмрд╛рд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдореВрд▓реНрдп рддрдХ рдкрд╣реБрдБрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рд╣реИрд╢ рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рд╕реНрдерд┐рддрд┐ рдмрджрддрд░ рд╣реЛ рдЬрд╛рддреА рд╣реИ рдирд╛рдо рд╕реНрдЯреНрд░рд┐рдВрдЧред рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ, рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд░рд▓ рдореИрдЯреНрд░рд┐рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдкрд╛рда рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдЙрддреНрдкрд╛рдж рдирд╛рдо рдХреЗ рдмрдЬрд╛рдп рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ (рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдФрд░ рд╕рднреА рдЙрддреНрдкрд╛рджреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
- рдкреНрд░рджрд░реНрд╢рди рдЕрдиреБрдХреВрд▓рди ред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрдкрд░реНрдХ рдХреЗ рд▓рд┐рдП рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдмреЗрд╣рдж рдорд╣рдВрдЧрд╛ рд╣реИред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рдХрдИ рд╕рдорд╛рдзрд╛рди рд╣реИрдВ:
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХреНрд▓рд╕реНрдЯрд░ рдХрд░рдирд╛ рдФрд░ рд╕рдорд╛рди рдХреНрд▓рд╕реНрдЯрд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕рдорд╛рдирддрд╛ рдХреЗ рдЙрдкрд╛рдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛
- рдЙрддреНрдкрд╛рдж-рдЙрддреНрдкрд╛рдж рд╕рдорд╛рдирддрд╛ рдХрд╛рд░рдХреЛрдВ рдХреА рдЧрдгрдирд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧ-рдЙрддреНрдкрд╛рдж рдореИрдЯреНрд░рд┐рдХреНрд╕ (рдЖрдкрдХреЛ рдЙрддреНрдкрд╛рдж-рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ) рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдкреНрд░рддреНрдпреЗрдХ рдЙрддреНрдкрд╛рджреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдХреЛрд╕рд╛рдЗрди рдорд╛рдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдФрд░ рдХреЗ рдХрд░реАрдмреА рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реБрдП рд╕рдмрд╕реЗ рд╕рдорд╛рди рдЙрддреНрдкрд╛рджреЛрдВ рдХреЗ рд╕реЗрдЯ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╣рд░ M рдШрдВрдЯреЗ / рджрд┐рди рдореЗрдВ рдПрдХ рдмрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд╕рдорд╛рди рдЙрддреНрдкрд╛рджреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ, рдФрд░ рдЙрддреНрдкрд╛рдж рдХреА рд╕рдорд╛рдирддрд╛ рдХреЗ рдорд╛рдк рдХреЗ рдореВрд▓реНрдп рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд░реЗрдЯрд┐рдВрдЧ рдХреЛ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╣реБрдП, рд╣рдореЗрдВ O (N * k) рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд╢рдВрд╕рд╛ рдорд┐рд▓рддреА рд╣реИ, рдЬрд╣рд╛рдВ N рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд░реЗрдЯрд┐рдВрдЧ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ
- рд╕рдорд╛рдирддрд╛ рдХреЗ рдЙрдкрд╛рдпреЛрдВ рдХрд╛ рдЪрдпрди ред рдХреЛрд╕рд╛рдЗрди рдорд╛рдк рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд┐рд╕реНрдЯрдо рдбреЗрдЯрд╛ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╣реА рдорд╛рдк рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
- рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рд╕рдВрд╢реЛрдзрди ред рд╢рд╛рдпрдж рдПрдХ рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ рджреЗрдЧрд╛ред рдлрд┐рд░ рд╕реЗ, рд╡рд┐рднрд┐рдиреНрди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рддреБрд▓рдирд╛ рдХреЗрд╡рд▓ рддрднреА рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдЬрдм рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рд╛рд╣рд┐рддреНрдп
- рд╣рдо рд╕рд╛рдореВрд╣рд┐рдХ рдорди рдХрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд░рддреЗ рд╣реИрдВ
- рд╕рд╣рдпреЛрдЧрд╛рддреНрдордХ рд╡рд┐рдХреА рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ
- рдХреЛрд╕рд╛рдЗрди рдЙрдкрд╛рдп
- рд╡рд┐рд░рд▓ Matrices