监督机器学习:为每个分类参数获取权重

时间:2015-12-31 05:43:52

标签: algorithm machine-learning scikit-learn

我对我的数据应用了scikit决策树算法来获得结果。现在,我想要一种机制来确定哪些因素对我的算法以用户可读格式做出的预测贡献最大。

示例:假设我的训练和测试数据与下表相同。



<table border='1'>
  <thead>
        <th>Parameter1</th>
        <th>Parameter2</th>
        <th>Parameter3</th>
        <th>Parameter4</th>
        <th>Class</th>
  </thead>
  <tr>
        <td>abc</td>
        <td>1</td>
        <td>0.5</td>
        <td>2</td>
        <td>Success</td>
  </tr>
 <tr>
        <td>pqr</td>
        <td>1.2</td>
        <td>0.6</td>
        <td>1.4</td>
        <td>Success</td>
 </tr>
 <tr>
        <td>abc</td>
        <td>0.9</td>
        <td>1</td>
        <td>2</td>
        <td>Failure</td>
 </tr>
</table>
&#13;
&#13;
&#13;   

应用算法后,我能够以很好的精度预测事物。现在,我想要的是为用户提供导致预测成功/失败的所有参数的权重。

实施例:

&#13;
&#13;
    <table border='1'>
      <thead>
            <th>Parameter1</th>
            <th>Parameter2</th>
            <th>Parameter3</th>
            <th>Parameter4</th>
            <th>Class</th>
      </thead>
      <tr>
            <td style="background-color:#FEF3AD;">50%</td>
            <td style="background-color:#00FF00;">80%</td>
            <td style="background-color:#00FF00;">80%</td>
            <td style="background-color:#FEF3AD;">50%</td>
            <td>Success</td>
      </tr>
     <tr>
            <td style="background-color:#00BB00;">100%</td>
            <td style="background-color:#00D500;">90%</td>
            <td style="background-color:#c9ff00;">70%</td>
            <td style="background-color:#00D500;">90%</td>
            <td>Success</td>
     </tr>
     <tr>
            <td style="background-color:#FEF3AD;">50%</td>
            <td style="background-color:#ff7f39;">10%</td>
            <td style="background-color:#ff1a00;">5%</td>
            <td style="background-color:#FEF3AD;">50%</td>
            <td>Failure</td>
     </tr>
    </table>
&#13;
&#13;
&#13;

因此,第二个表格表明相关参数在多大程度上有助于该特定行的成功。

我到目前为止尝试的是具备以下机制:

  1. 我使用Kendalltau找到所有参数的相关系数。
  2. 对于所有参数,按查询触发组以获得成功百分比:
  3.  SELECT Parameter1, COUNT('SUCCESS')/COUNT(*)
     FROM table and joins 
     WHERE clauses
     GROUP BY Parameter1;
    
    1. 将参数相关系数添加到从查询中获得的Success%。此步骤是将相关因子添加到正常统计百分比。

    2. 将每个参数存储在我的数据库中: 示例:

        

      参数1,abc,50%

           

      参数1,pqr,100%

           

      等等......

    3. 有更好或更有效的方法吗?请提供详细信息。

      谢谢。

1 个答案:

答案 0 :(得分:0)

您可以使用feature_importances_了解每个功能的贡献。 但是,值feature_importances_返回并不直接考虑预测准确性。

出于此目的,您可以使用mean decrease accuracy来评估有关特定评估指标的每个功能贡献。 以下博客文章包含很好的解释和python示例代码。

Selecting good features – Part III: random forests - Diving into data

mean decrease accuracy的主要思想是选择一个特征并随机排列数据集中所有实例中的特征值,使特征无意义。

(A) If accuracy decreases, the selected feature is important for prediction.
(B) If not, the selected feature is not so important for prediction.

使用mean decrease accuracy的优点是:

(1) You can apply it to any classifiers including ensemble models.
(2) You can apply it to any evaluation metric.