title: How to calculate the weight and value in lightgbm?
body: <p>We can use <code>tree_to_dataframe</code> or <code>lgb.create_tree_digraph</code> to display the structure of lightgbm model. The internal node and leaf node both have <code>weight</code> and <code>value</code>.</p>
  <p>The document says:</p>
  <blockquote>
  <p><code>value</code> : float64, predicted value for this leaf node, multiplied by the learning rate. <p> <code>weight</code> : float64 or int64, sum of hessian (second-order derivative of objective), summed over observations that fall in this node..
  How are the two values calculated?</p>
  </blockquote>
  <p>we know that, in binary logloss:
  <a href="https://i.stack.imgur.com/rk1rp.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/rk1rp.png" alt="$$
  \begin{aligned}
  G &amp;= \hat{y}-y \
  H &amp;= \hat{y}(1-\hat{y})
  \end{aligned}
  $$" /></a></p>
  <ol>
  <li>The $H$ will not be $0$ as we have a <code>base value</code> before the first tree is created,  but why the weight in each tree's root node is $0$ in the following example?</li>
  <li>How is the internal node's <code>value</code> calculated?</li>
  </ol>
  <pre class="lang-py prettyprint-override"><code>import lightgbm as lgb
  import numpy as np
  import pandas as pd
  import sklearn
  
  X, y = sklearn.datasets.load_breast_cancer(return_X_y=True)
  model = lgb.LGBMClassifier(random_state=1, n_estimators=2,
                             max_depth=1,
                             min_child_weight=15,
                             objective='binary'
                            )
  model.fit(X, y)
  model.booster_.trees_to_dataframe()
  </code></pre>
  <div class="s-table-container">
  <table class="s-table">
  <thead>
  <tr>
  <th style="text-align: right;"></th>
  <th style="text-align: right;">tree_index</th>
  <th style="text-align: right;">node_depth</th>
  <th style="text-align: left;">node_index</th>
  <th style="text-align: left;">left_child</th>
  <th style="text-align: left;">right_child</th>
  <th style="text-align: left;">parent_index</th>
  <th style="text-align: left;">split_feature</th>
  <th style="text-align: right;">split_gain</th>
  <th style="text-align: right;">threshold</th>
  <th style="text-align: left;">decision_type</th>
  <th style="text-align: left;">missing_direction</th>
  <th style="text-align: left;">missing_type</th>
  <th style="text-align: right;">value</th>
  <th style="text-align: right;">weight</th>
  <th style="text-align: right;">count</th>
  </tr>
  </thead>
  <tbody>
  <tr>
  <td style="text-align: right;">0</td>
  <td style="text-align: right;">0</td>
  <td style="text-align: right;">1</td>
  <td style="text-align: left;">0-S0</td>
  <td style="text-align: left;">0-L0</td>
  <td style="text-align: left;">0-L1</td>
  <td style="text-align: left;"></td>
  <td style="text-align: left;">Column_23</td>
  <td style="text-align: right;">392.505</td>
  <td style="text-align: right;">868.2</td>
  <td style="text-align: left;">&lt;=</td>
  <td style="text-align: left;">left</td>
  <td style="text-align: left;">None</td>
  <td style="text-align: right;">0.52115</td>
  <td style="text-align: right;">0</td>
  <td style="text-align: right;">569</td>
  </tr>
  <tr>
  <td style="text-align: right;">1</td>
  <td style="text-align: right;">0</td>
  <td style="text-align: right;">2</td>
  <td style="text-align: left;">0-L0</td>
  <td style="text-align: left;"></td>
  <td style="text-align: left;"></td>
  <td style="text-align: left;">0-S0</td>
  <td style="text-align: left;"></td>
  <td style="text-align: right;">nan</td>
  <td style="text-align: right;">nan</td>
  <td style="text-align: left;"></td>
  <td style="text-align: left;"></td>
  <td style="text-align: left;"></td>
  <td style="text-align: right;">0.641339</td>
  <td style="text-align: right;">89.2982</td>
  <td style="text-align: right;">382</td>
  </tr>
  <tr>
  <td style="text-align: right;">2</td>
  <td style="text-align: right;">0</td>
  <td style="text-align: right;">2</td>
  <td style="text-align: left;">0-L1</td>
  <td style="text-align: left;"></td>
  <td style="text-align: left;"></td>
  <td style="text-align: left;">0-S0</td>
  <td style="text-align: left;"></td>
  <td style="text-align: right;">nan</td>
  <td style="text-align: right;">nan</td>
  <td style="text-align: left;"></td>
  <td style="text-align: left;"></td>
  <td style="text-align: left;"></td>
  <td style="text-align: right;">0.275629</td>
  <td style="text-align: right;">43.7141</td>
  <td style="text-align: right;">187</td>
  </tr>
  <tr>
  <td style="text-align: right;">3</td>
  <td style="text-align: right;">1</td>
  <td style="text-align: right;">1</td>
  <td style="text-align: left;">1-S0</td>
  <td style="text-align: left;">1-L0</td>
  <td style="text-align: left;">1-L1</td>
  <td style="text-align: left;"></td>
  <td style="text-align: left;">Column_7</td>
  <td style="text-align: right;">327.362</td>
  <td style="text-align: right;">0.05142</td>
  <td style="text-align: left;">&lt;=</td>
  <td style="text-align: left;">left</td>
  <td style="text-align: left;">None</td>
  <td style="text-align: right;">0</td>
  <td style="text-align: right;">0</td>
  <td style="text-align: right;">569</td>
  </tr>
  <tr>
  <td style="text-align: right;">4</td>
  <td style="text-align: right;">1</td>
  <td style="text-align: right;">2</td>
  <td style="text-align: left;">1-L0</td>
  <td style="text-align: left;"></td>
  <td style="text-align: left;"></td>
  <td style="text-align: left;">1-S0</td>
  <td style="text-align: left;"></td>
  <td style="text-align: right;">nan</td>
  <td style="text-align: right;">nan</td>
  <td style="text-align: left;"></td>
  <td style="text-align: left;"></td>
  <td style="text-align: left;"></td>
  <td style="text-align: right;">0.128938</td>
  <td style="text-align: right;">79.2656</td>
  <td style="text-align: right;">349</td>
  </tr>
  <tr>
  <td style="text-align: right;">5</td>
  <td style="text-align: right;">1</td>
  <td style="text-align: right;">2</td>
  <td style="text-align: left;">1-L1</td>
  <td style="text-align: left;"></td>
  <td style="text-align: left;"></td>
  <td style="text-align: left;">1-S0</td>
  <td style="text-align: left;"></td>
  <td style="text-align: right;">nan</td>
  <td style="text-align: right;">nan</td>
  <td style="text-align: left;"></td>
  <td style="text-align: left;"></td>
  <td style="text-align: left;"></td>
  <td style="text-align: right;">-0.19224</td>
  <td style="text-align: right;">52.9234</td>
  <td style="text-align: right;">220</td>
  </tr>
  </tbody>
  </table>
  </div>
  <pre class="lang-py prettyprint-override"><code>lgb.create_tree_digraph(model, tree_index=0, show_info=['split_gain', 'internal_value', 'internal_count',
                                                          'internal_weight', 'leaf_count', 'leaf_weight', 'data_percentage'])
  </code></pre>
  <p><a href="https://i.stack.imgur.com/rAqtH.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/rAqtH.png" alt="enter image description here" /></a></p>
  <pre class="lang-py prettyprint-override"><code>lgb.create_tree_digraph(model, tree_index=0, show_info=['split_gain', 'internal_value', 'internal_count',
                                                          'internal_weight', 'leaf_count', 'leaf_weight', 'data_percentage'])
  </code></pre>
  <p><a href="https://i.stack.imgur.com/MScqm.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/MScqm.png" alt="enter image description here" /></a></p>