p@15
|
1 # -*- coding: utf-8 -*-
|
p@15
|
2 """
|
p@15
|
3 Created on Wed Jul 22 17:42:09 2015
|
p@15
|
4
|
p@15
|
5 @author: paulochiliguano
|
p@15
|
6 """
|
p@15
|
7
|
p@16
|
8
|
p@16
|
9 import random
|
p@15
|
10 import numpy as np
|
p@15
|
11 from sklearn import mixture
|
p@15
|
12
|
p@15
|
13 #User-item dictionary
|
p@15
|
14 users = {"Angelica": {"SOAJJPC12AB017D63F": 3.5, "SOAKIXJ12AC3DF7152": 2.0,
|
p@15
|
15 "SOAKPFH12A8C13BA4A": 4.5, "SOAGTJW12A6701F1F5": 5.0,
|
p@15
|
16 "SOAKWCK12A8C139F81": 1.5, "SOAKNZI12A58A79CAC": 2.5,
|
p@15
|
17 "SOAJZEP12A8C14379B": 2.0},
|
p@15
|
18 "Bill":{"SOAJJPC12AB017D63F": 2.0, "SOAKIXJ12AC3DF7152": 3.5,
|
p@15
|
19 "SOAHQFM12A8C134B65": 4.0, "SOAGTJW12A6701F1F5": 2.0,
|
p@15
|
20 "SOAKWCK12A8C139F81": 3.5, "SOAJZEP12A8C14379B": 3.0},
|
p@15
|
21 "Chan": {"SOAJJPC12AB017D63F": 5.0, "SOAKIXJ12AC3DF7152": 1.0,
|
p@15
|
22 "SOAHQFM12A8C134B65": 1.0, "SOAKPFH12A8C13BA4A": 3.0,
|
p@15
|
23 "SOAGTJW12A6701F1F5": 5, "SOAKWCK12A8C139F81": 1.0},
|
p@15
|
24 "Dan": {"SOAJJPC12AB017D63F": 3.0, "SOAKIXJ12AC3DF7152": 4.0,
|
p@15
|
25 "SOAHQFM12A8C134B65": 4.5, "SOAGTJW12A6701F1F5": 3.0,
|
p@15
|
26 "SOAKWCK12A8C139F81": 4.5, "SOAKNZI12A58A79CAC": 4.0,
|
p@15
|
27 "SOAJZEP12A8C14379B": 2.0},
|
p@15
|
28 "Hailey": {"SOAKIXJ12AC3DF7152": 4.0, "SOAHQFM12A8C134B65": 1.0,
|
p@15
|
29 "SOAKPFH12A8C13BA4A": 4.0, "SOAKNZI12A58A79CAC": 4.0,
|
p@15
|
30 "SOAJZEP12A8C14379B": 1.0},
|
p@15
|
31 "Jordyn": {"SOAKIXJ12AC3DF7152": 4.5, "SOAHQFM12A8C134B65": 4.0,
|
p@15
|
32 "SOAKPFH12A8C13BA4A": 5.0, "SOAGTJW12A6701F1F5": 5.0,
|
p@15
|
33 "SOAKWCK12A8C139F81": 4.5, "SOAKNZI12A58A79CAC": 4.0,
|
p@15
|
34 "SOAJZEP12A8C14379B": 4.0},
|
p@15
|
35 "Sam": {"SOAJJPC12AB017D63F": 5.0, "SOAKIXJ12AC3DF7152": 2.0,
|
p@15
|
36 "SOAKPFH12A8C13BA4A": 3.0, "SOAGTJW12A6701F1F5": 5.0,
|
p@15
|
37 "SOAKWCK12A8C139F81": 4.0, "SOAKNZI12A58A79CAC": 5.0},
|
p@15
|
38 "Veronica": {"SOAJJPC12AB017D63F": 3.0, "SOAKPFH12A8C13BA4A": 5.0,
|
p@15
|
39 "SOAGTJW12A6701F1F5": 4.0, "SOAKWCK12A8C139F81": 2.5,
|
p@15
|
40 "SOAKNZI12A58A79CAC": 3.0}
|
p@15
|
41 }
|
p@15
|
42
|
p@16
|
43 items = {"SOAJJPC12AB017D63F": [2.5, 4, 3.5, 3, 5, 4, 1, 5, 4, 1],
|
p@16
|
44 "SOAKIXJ12AC3DF7152": [2, 5, 5, 3, 2, 1, 1, 5, 4, 1],
|
p@16
|
45 "SOAKPFH12A8C13BA4A": [1, 5, 4, 2, 4, 1, 1, 5, 4, 1],
|
p@16
|
46 "SOAGTJW12A6701F1F5": [4, 5, 4, 4, 1, 5, 1, 5, 4, 1],
|
p@16
|
47 "SOAKWCK12A8C139F81": [1, 4, 5, 3.5, 5, 1, 1, 5, 4, 1],
|
p@16
|
48 "SOAKNZI12A58A79CAC": [1, 5, 3.5, 3, 4, 5, 1, 5, 4, 1],
|
p@16
|
49 "SOAJZEP12A8C14379B": [5, 5, 4, 2, 1, 1, 1, 5, 4, 1],
|
p@16
|
50 "SOAHQFM12A8C134B65": [2.5, 4, 4, 1, 1, 1, 1, 5, 4, 1]}
|
p@16
|
51 '''
|
p@15
|
52 profile = {"Profile0": [2.5, 4, 3.5, 3, 5, 4, 1],
|
p@15
|
53 "Profile1": [2.5, 4, 3.5, 3, 5, 4, 1],
|
p@15
|
54 "Profile2": [2.5, 4, 3.5, 3, 5, 4, 1],
|
p@15
|
55 "Profile3": [2.5, 4, 3.5, 3, 5, 4, 1],
|
p@15
|
56 "Profile4": [2.5, 4, 3.5, 3, 5, 4, 1],
|
p@15
|
57 "Profile5": [2.5, 4, 3.5, 3, 5, 4, 1],
|
p@15
|
58 "Profile6": [2.5, 4, 3.5, 3, 5, 4, 1],
|
p@15
|
59 "Profile7": [2.5, 4, 3.5, 3, 5, 4, 1]}
|
p@16
|
60 '''
|
p@15
|
61
|
p@16
|
62 '''
|
p@16
|
63 Generate M individuals uniformly
|
p@16
|
64 '''
|
p@16
|
65 np.random.seed(len(users))
|
p@16
|
66 M = np.random.uniform(1, 5, len(users) * len(items.values()[0]))
|
p@16
|
67 M.shape = (-1, len(items.values()[0]))
|
p@16
|
68 profile = {}
|
p@16
|
69 i = 0
|
p@16
|
70 for row in M.tolist():
|
p@16
|
71 profile["Profile" + str(i)] = M.tolist()[i]
|
p@16
|
72 i = i + 1
|
p@15
|
73
|
p@15
|
74 np.random.seed(1)
|
p@15
|
75 g = mixture.GMM(n_components=7)
|
p@15
|
76 # Generate random observations with two modes centered on 0
|
p@15
|
77 # and 10 to use for training.
|
p@15
|
78 obs = np.concatenate((np.random.randn(100, 1), 10 + np.random.randn(300, 1)))
|
p@15
|
79 g.fit(obs)
|
p@15
|
80 np.round(g.weights_, 2)
|
p@15
|
81 np.round(g.means_, 2)
|
p@15
|
82 np.round(g.covars_, 2)
|
p@15
|
83 g.predict([[0], [2], [9], [10]])
|
p@15
|
84 np.round(g.score([[0], [2], [9], [10]]), 2)
|
p@15
|
85 # Refit the model on new data (initial parameters remain the
|
p@15
|
86 # same), this time with an even split between the two modes.
|
p@15
|
87 g.fit(20 * [[0]] + 20 * [[10]])
|
p@15
|
88 np.round(g.weights_, 2)
|