接【解决(几乎)任何机器学习问题】:处理分类变量篇(上篇)http://t.csdnimg.cn/rnzto
这篇文章相当长,您可以添加至收藏夹,以便在后续有空时候悠闲地阅读。
让我们看看填⼊ NaN 值后 ord_4 列的值计数:
In [ X ]: df . ord_4 . fillna ( "NONE" ). value_counts ()Out [ X ]:N 39978P 37890Y 36657A 36633R 33045U 32897. ..K 21676I 19805NONE 17930D 17284F 16721W 8268Z 5790S 4595G 3404V 3107J 1950L 1657Name : ord_4 , dtype : int64
我们看到,有些数值只出现了⼏千次,有些则出现了近 40000 次。NaN 也经常出现。请注意,我已经从输出中删除了⼀些值。
现在,我们可以定义将⼀个值称为 "
罕⻅(
rare
)
"的标准了。⽐⽅说,在这⼀列中,稀有值的要求是计数⼩于 2000。这样看来,J 和 L 就可以被标记为稀有值了。使⽤ pandas,根据计数阈值替换类别⾮常简单。让我们来看看它是如何实现的。
In [ X ]: df . ord_4 = df . ord_4 . fillna ( "NONE" )In [ X ]: df . loc [. : df [ "ord_4" ]. value_counts ()[ df [ "ord_4" ]]. values < 2000 ,. : "ord_4". : ] = "RARE"In [ X ]: df . ord_4 . value_counts ()Out [ X ]:N 39978P 37890Y 36657A 36633R 33045U 32897M 32504...B 25212E 21871K 21676I 19805NONE 17930D 17284F 16721 W 8268Z 5790S 4595RARE 3607G 3404V 3107Name : ord_4 , dtype : int64
我们认为,只要某个类别的值⼩于 2000,就将其替换为罕⻅。因此,现在在测试数据时,所有未⻅过的新类别都将被映射为 "RARE",⽽所有缺失值都将被映射为 "NONE"。
这种⽅法还能确保即使有新的类别,模型也能在实际环境中正常⼯作。
现在,我们已经具备了处理任何带有分类变量问题所需的⼀切条件。让我们尝试建⽴第⼀个模型,并逐步提⾼其性能。
在构建任何类型的模型之前,交叉检验⾄关重要。我们已经看到了标签/⽬标分布,知道这是⼀个⽬标偏斜的⼆元分类问题。因此,我们将使⽤ StratifiedKFold 来分割数据。
import pandas as pd
from sklearn import model_selection
if _ name _ = " _ main _ ":
df = pd.read_csv(" . /input/cat_train.csv")
df["kfold"] = -1
df = df.sample(frac=1).reset_index(drop=True)
y = df.target.values
kf = model_selection.StratifiedKFold(n_splits=5)
for f, (t_, v_) in enumerate(kf.split(X=df, y=y)):
df.loc[v_, 'kfold'] = f
df.to_csv(" . /input/cat_train_folds.csv", index=False)
现在我们可以检查新的折叠 csv,查看每个折叠的样本数:
In [ X ]: import pandas as pdIn [ X ]: df = pd . read_csv ( " . /input/cat_train_folds.csv" )In [ X ]: df . kfold . value_counts ()Out [ X ]:4 1200003 1200002 1200001 1200000 120000Name : kfold , dtype : int64
所有折叠都有 120000 个样本。这是意料之中的,因为训练数据有 600000 个样本,⽽我们做了5次折叠。到⽬前为⽌,⼀切顺利。
现在,我们还可以检查每个折叠的⽬标分布。
In [ X ]: df [ df . kfold = 0 ]. target . value_counts ()Out [ X ]:0 975361 22464Name : target , dtype : int64In [ X ]: df [ df . kfold = 1 ]. target . value_c

博客主要讲述检查新的折叠csv,查看每个折叠的样本数,运行相关代码后,还打算查看将max_depth增加到7和n_estimators增加到200时的得分情况,与机器学习相关。
最低0.47元/天 解锁文章
1407

被折叠的 条评论
为什么被折叠?



