【解决(几乎)任何机器学习问题】:处理分类变量篇(下篇)

博客主要讲述检查新的折叠csv,查看每个折叠的样本数,运行相关代码后,还打算查看将max_depth增加到7和n_estimators增加到200时的得分情况,与机器学习相关。
接【解决(几乎)任何机器学习问题】:处理分类变量篇(上篇)http://t.csdnimg.cn/rnzto
这篇文章相当长,您可以添加至收藏夹,以便在后续有空时候悠闲地阅读。
让我们看看填⼊ NaN 值后 ord_4 列的值计数:
In [ X ]: df . ord_4 . fillna ( "NONE" ). value_counts ()
Out [ X ]:
N 39978
P 37890
Y 36657
A 36633
R 33045
U 32897
. .
.
K 21676
I 19805
NONE 17930
D 17284
F 16721
W 8268
Z 5790
S 4595
G 3404
V 3107
J 1950
L 1657
Name : 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 39978
P 37890
Y 36657
A 36633
R 33045
U 32897
M 32504
.
.
.
B 25212
E 21871
K 21676
I 19805
NONE 17930
D 17284
F 16721 W 8268
Z 5790
S 4595
RARE 3607
G 3404
V 3107
Name : 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 pd
In [ X ]: df = pd . read_csv ( " . /input/cat_train_folds.csv" )
In [ X ]: df . kfold . value_counts ()
Out [ X ]:
4 120000
3 120000
2 120000
1 120000
0 120000
Name : kfold , dtype : int64
所有折叠都有 120000 个样本。这是意料之中的,因为训练数据有 600000 个样本,⽽我们做了5次折叠。到⽬前为⽌,⼀切顺利。
现在,我们还可以检查每个折叠的⽬标分布。
In [ X ]: df [ df . kfold = 0 ]. target . value_counts ()
Out [ X ]:
0 97536
1 22464
Name : target , dtype : int64
In [ X ]: df [ df . kfold = 1 ]. target . value_c
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

X.AI666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值