Skip to content

Commit

Permalink
Minor changes in Skm doc
Browse files Browse the repository at this point in the history
  • Loading branch information
Aghiles SALAH committed Oct 14, 2018
1 parent f0c9705 commit 33c9354
Show file tree
Hide file tree
Showing 6 changed files with 12 additions and 14 deletions.
11 changes: 5 additions & 6 deletions cornac/models/skm/recom_skmeans.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ class Skmeans(Recommender):
trainable: boolean, optional, default: True
When False, the model is not trained and Cornac assumes that the model is already \
pre-trained (Theta and Beta are not None).
trained.
tol : float, optional, default: 1e-6
Relative tolerance with regards to skmeans' criterion to declare convergence.
Expand Down Expand Up @@ -65,18 +65,17 @@ def fit(self,X):
the user-item preference matrix (traning data), in a scipy sparse format\
(e.g., csc_matrix).
"""
X1 = X.copy()
X1 = X1.multiply(sp.csc_matrix(1./(np.sqrt(X1.multiply(X1).sum(1).A1)+1e-20)).T)
if self.trainable:
#Skmeans requires rows of X to have a unit L2 norm. We therefore need to make a copy of X as we should not modify the latter.
X1 = X.copy()
X1 = X1.multiply(sp.csc_matrix(1./(np.sqrt(X1.multiply(X1).sum(1).A1)+1e-20)).T)
res = skmeans(X1,k = self.k, max_iter = self.max_iter,tol = self.tol,verbose = self.verbose,init_par = self.par)
self.centroids = res['centroids']
self.par = res['partition']
self.user_center_sim = X1*self.centroids.T #user-centroid cosine similarity matrix
del(X1)
else:
print('%s is trained already (trainable = False)' % (self.name))

self.user_center_sim = X1*self.centroids.T #user-centroid cosine similarity matrix
del(X1)



Expand Down
Binary file modified dist/cornac-0.1.0-cp36-cp36m-win_amd64.whl
Binary file not shown.
Binary file modified docs/build/html/.doctrees/environment.pickle
Binary file not shown.
Binary file modified docs/build/html/.doctrees/models.doctree
Binary file not shown.
13 changes: 6 additions & 7 deletions docs/build/html/_modules/cornac/models/skm/recom_skmeans.html
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ <h1>Source code for cornac.models.skm.recom_skmeans</h1><div class="highlight"><

<span class="sd"> trainable: boolean, optional, default: True</span>
<span class="sd"> When False, the model is not trained and Cornac assumes that the model is already \</span>
<span class="sd"> pre-trained (Theta and Beta are not None). </span>
<span class="sd"> trained. </span>
<span class="sd"> </span>
<span class="sd"> tol : float, optional, default: 1e-6</span>
<span class="sd"> Relative tolerance with regards to skmeans&#39; criterion to declare convergence.</span>
Expand Down Expand Up @@ -221,18 +221,17 @@ <h1>Source code for cornac.models.skm.recom_skmeans</h1><div class="highlight"><
<span class="sd"> the user-item preference matrix (traning data), in a scipy sparse format\</span>
<span class="sd"> (e.g., csc_matrix).</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">X1</span> <span class="o">=</span> <span class="n">X</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
<span class="n">X1</span> <span class="o">=</span> <span class="n">X1</span><span class="o">.</span><span class="n">multiply</span><span class="p">(</span><span class="n">sp</span><span class="o">.</span><span class="n">csc_matrix</span><span class="p">(</span><span class="mf">1.</span><span class="o">/</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">X1</span><span class="o">.</span><span class="n">multiply</span><span class="p">(</span><span class="n">X1</span><span class="p">)</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="o">.</span><span class="n">A1</span><span class="p">)</span><span class="o">+</span><span class="mf">1e-20</span><span class="p">))</span><span class="o">.</span><span class="n">T</span><span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">trainable</span><span class="p">:</span>
<span class="c1">#Skmeans requires rows of X to have a unit L2 norm. We therefore need to make a copy of X as we should not modify the latter.</span>
<span class="n">X1</span> <span class="o">=</span> <span class="n">X</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
<span class="n">X1</span> <span class="o">=</span> <span class="n">X1</span><span class="o">.</span><span class="n">multiply</span><span class="p">(</span><span class="n">sp</span><span class="o">.</span><span class="n">csc_matrix</span><span class="p">(</span><span class="mf">1.</span><span class="o">/</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">X1</span><span class="o">.</span><span class="n">multiply</span><span class="p">(</span><span class="n">X1</span><span class="p">)</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="o">.</span><span class="n">A1</span><span class="p">)</span><span class="o">+</span><span class="mf">1e-20</span><span class="p">))</span><span class="o">.</span><span class="n">T</span><span class="p">)</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">skmeans</span><span class="p">(</span><span class="n">X1</span><span class="p">,</span><span class="n">k</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">k</span><span class="p">,</span> <span class="n">max_iter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_iter</span><span class="p">,</span><span class="n">tol</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">tol</span><span class="p">,</span><span class="n">verbose</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">verbose</span><span class="p">,</span><span class="n">init_par</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">par</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">centroids</span> <span class="o">=</span> <span class="n">res</span><span class="p">[</span><span class="s1">&#39;centroids&#39;</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">par</span> <span class="o">=</span> <span class="n">res</span><span class="p">[</span><span class="s1">&#39;partition&#39;</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">user_center_sim</span> <span class="o">=</span> <span class="n">X1</span><span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">centroids</span><span class="o">.</span><span class="n">T</span> <span class="c1">#user-centroid cosine similarity matrix</span>
<span class="k">del</span><span class="p">(</span><span class="n">X1</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">%s</span><span class="s1"> is trained already (trainable = False)&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">))</span></div>

<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">%s</span><span class="s1"> is trained already (trainable = False)&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">user_center_sim</span> <span class="o">=</span> <span class="n">X1</span><span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">centroids</span><span class="o">.</span><span class="n">T</span> <span class="c1">#user-centroid cosine similarity matrix</span>
<span class="k">del</span><span class="p">(</span><span class="n">X1</span><span class="p">)</span></div>



Expand Down
2 changes: 1 addition & 1 deletion docs/build/html/models.html
Original file line number Diff line number Diff line change
Expand Up @@ -383,7 +383,7 @@
<li><strong>k</strong> (<a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.7)"><em>int</em></a><em>, </em><em>optional</em><em>, </em><em>default: 5</em>) – The number of clusters.</li>
<li><strong>max_iter</strong> (<a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.7)"><em>int</em></a><em>, </em><em>optional</em><em>, </em><em>default: 100</em>) – Maximum number of iterations.</li>
<li><strong>name</strong> (<em>string</em><em>, </em><em>optional</em><em>, </em><em>default: 'Skmeans'</em>) – The name of the recommender model.</li>
<li><strong>trainable</strong> (<em>boolean</em><em>, </em><em>optional</em><em>, </em><em>default: True</em>) – When False, the model is not trained and Cornac assumes that the model is already pre-trained (Theta and Beta are not None).</li>
<li><strong>trainable</strong> (<em>boolean</em><em>, </em><em>optional</em><em>, </em><em>default: True</em>) – When False, the model is not trained and Cornac assumes that the model is already trained.</li>
<li><strong>tol</strong> (<a class="reference external" href="https://docs.python.org/3/library/functions.html#float" title="(in Python v3.7)"><em>float</em></a><em>, </em><em>optional</em><em>, </em><em>default: 1e-6</em>) – Relative tolerance with regards to skmeans’ criterion to declare convergence.</li>
<li><strong>verbose</strong> (<em>boolean</em><em>, </em><em>optional</em><em>, </em><em>default: True</em>) – When True, the skmeans criterion (likelihood) is displayed after each iteration.</li>
<li><strong>init_par</strong> (<em>numpy 1d array</em><em>, </em><em>optional</em><em>, </em><em>default: None</em>) – The initial object parition, 1d array contaning the cluster label (int type starting from 0) of each object (user). If par = None, then skmeans is initialized randomly.</li>
Expand Down

0 comments on commit 33c9354

Please sign in to comment.