Python中文
首页
教程
问答
标签
搜索
登录
注册
如何用lightgbm python编写多类分类中的自定义F1评分指标
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>有人能帮我如何用python编写多类分类的F1分数???在</p> <p>编辑:我编辑这个问题是为了更好地了解我想做什么</p> <p>这是我的函数,用于5个类的多类问题的自定义评估f1分数度量。在</p> <pre><code>def evalerror(preds, dtrain): labels = dtrain.get_label() preds = preds.reshape(-1, 5) preds = preds.argmax(axis = 1) f_score = f1_score(preds, labels, average = 'weighted') return 'f1_score', f_score, True </code></pre> <p>注意:我重塑的原因是validation true值的长度为252705,而preds是长度为1263525的数组,是实际值的5倍。原因是LGB为每个预测输出每个类的probab。在</p> <p>下面我将把列车和验证数据转换成LGB可以接受的格式。在</p> ^{pr2}$ <p>下面是我对培训数据进行拟合的LGB模型。如您所见,我已经将<code>evalerror</code>自定义函数传递给了位于<code>feval</code>的模型,同时还传递了验证数据<code>dvalid</code>,我想在训练时查看f1的分数。 我正在训练模型进行10次迭代。在</p> <pre><code>evals_result = {} num_round = 10 lgb_model = lgb.train(params, dtrain, num_round, valid_sets = dvalid, feval = evalerror, evals_result = evals_result) </code></pre> <p>当模型接受10轮训练时,验证集上每次迭代的F1分数显示在下面,这是不正确的,因为我得到了0.18左右。在</p> <pre><code>[1] valid_0's multi_logloss: 1.46839 valid_0's f1_score: 0.183719 [2] valid_0's multi_logloss: 1.35684 valid_0's f1_score: 0.183842 [3] valid_0's multi_logloss: 1.26527 valid_0's f1_score: 0.183853 [4] valid_0's multi_logloss: 1.18799 valid_0's f1_score: 0.183909 [5] valid_0's multi_logloss: 1.12187 valid_0's f1_score: 0.187206 [6] valid_0's multi_logloss: 1.06452 valid_0's f1_score: 0.187503 [7] valid_0's multi_logloss: 1.01437 valid_0's f1_score: 0.187327 [8] valid_0's multi_logloss: 0.97037 valid_0's f1_score: 0.187511 [9] valid_0's multi_logloss: 0.931498 valid_0's f1_score: 0.186957 [10] valid_0's multi_logloss: 0.896877 valid_0's f1_score: 0.18751 </code></pre> <p>在下面的代码中,我训练了10次迭代来预测下面的代码。在</p> <pre><code>lgb_prediction = lgb_model.predict(valid_X) lgb_prediction = lgb_prediction.argmax(axis = 1) lgb_F1 = f1_score(lgb_prediction, valid_Y, average = 'weighted') print("The Light GBM F1 is", lgb_F1) The Light GBM F1 is 0.743250263548 </code></pre> <p>注意:我在这里没有像在自定义函数中那样重塑它是因为<code>lgb_model.predict()</code>输出一个numpy数组(252705,5) 还要注意,我传递的是<code>valid_X</code>,而不是<code>dvalid</code>,因为在预测时,我们必须传递原始格式,而不是像我们在^{<cd7>中传递的稀疏格式</p> <p>当我在同一个验证数据集上进行预测时,我得到的F1分数是0.743250263548,这已经足够好了。所以我期望的是第10次迭代时的验证F1分数应该与我训练模型后预测的相同。在</p> <p>有人能帮我解决我做错的事吗。谢谢</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<pre><code>sklearn.metrics.f1_score(y_true, y_pred, labels=None, pos_label=1, average=’binary’, sample_weight=None)[source] </code></pre> <p>因此,根据这一点,你应该纠正:</p> ^{pr2}$
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
如何添加虚拟方法
6 回答
如何添加表示整数的擦边字符串?
8 回答
如何添加要在Bokeh中使用的新font.ttf文件?
6 回答
如何添加要显示的矩阵XY轴编号和XY轴
6 回答
如何添加计数?
9 回答
如何添加计数器函数?
2 回答
如何添加计数器列来计算数据帧中另一列中的特定值?
9 回答
如何添加计数器来跟踪while循环中的月份和年份?
3 回答
如何添加计数并删除countplot的顶部和右侧脊椎?
9 回答
如何添加计时器wx.应用程序更新窗口对象的主循环?
8 回答
如何添加评论到帖子?PostDetailVew,Django 2.1.5
3 回答
如何添加评论拉梅尔亚姆
2 回答
如何添加诸如矩阵Python/Pandas之类的数据帧?
1 回答
如何添加谷歌地点自动完成到Flask?
5 回答
如何添加超时、python discord bot
8 回答
如何添加超过1dp的检查
1 回答
如何添加距离方法
9 回答
如何添加跟随游戏的敌人精灵
5 回答
如何添加路径以便python可以找到程序?
7 回答
如何添加身份验证/安全性以使用happybase访问HBase?
7 回答