【发布时间】:2020-10-10 22:14:14
【问题描述】:
最近我在做一个 Kaggle 项目“Prudential Life Insurance Assessment”,竞争对手谈论改变标签以获得更好的指标。
在那次特定的比赛中,目标有 8 个类别 (1-8),但 one of the guy 使用不同的标签 (-1.6, 0.7, 0.3, 3.15, 4.53, 6.5, 6.77, 9.0) 或 another example 他们使用 [-1.6, 0.7, 0.3, 3.15, 4.53, 6.5, 6.77, 9.0] 而不是 [1,2,3,4,5,6,7,8]。
我想知道如何得出这些神奇的数字?
我愿意接受任何想法/技巧/建议来进行此类转变。非常感谢您的投入!
示例代码
# imports
import numpy as np
import pandas as pd
import seaborn as sns
import xgboost as xgb
from sklearn import metrics
from sklearn.model_selection import train_test_split
# data
df = sns.load_dataset('iris')
df['species'] = pd.factorize(df['species'])[0]
df = df.sample(frac=1,random_state=100)
# train test split
X = df.drop('species',axis=1)
y = df['species']
Xtrain, Xtest, ytrain, ytest = train_test_split(X,y,stratify=y,random_state=100)
# modelling
model = xgb.XGBClassifier(objective='multi:softprob', random_state=100)
model.fit(Xtrain, ytrain)
preds = model.predict(Xtest)
kappa = metrics.cohen_kappa_score(ytest, preds, weights='quadratic')
print(kappa)
我的想法
-
标签可以取的数字实际上是无限的,如何将
[1-8]转换为[x-y]? -
我们是否应该随机选择 8 个数字并检查所有数字的 kappa。这似乎是最不合理的想法,可能永远不会奏效。
-
是否有某种梯度下降方法可以解决这个问题?也许不是,只是一个想法。
参考链接
【问题讨论】:
-
我认为您正在看到他们进行这种硬编码,因此可以使用“回归”建模而不是“分类”。
-
是的,他们正在对值进行硬编码,但我对如何以更科学的方式“硬编码”这些好的值感兴趣。
标签: python pandas machine-learning xgboost feature-engineering