kaggle的泰坦尼克生存分析竞赛,为什么很多人预测正确率达到了惊人的100%?
背景
- 通过常规的特征工程得到关键特征,用于记下来的特征建模
- 基于关键特征的类型,对比不同类别特征编码下的实际表现,选择最合适的类别特征编码方法
第一件事儿
一、导入数据与相关包
二、 数据预处理和特征工程
-
缺失值的处理
缺失值处理
来自知乎有关缺失值的处理方法
cabin直接丢弃,Age直接使用target编码单独作为一类目标编码 target编码是一种特征工程技术,它用目标变量的统计 信息(如均值、中位数等)来替换或增强类别特征。这有助于捕获类别特征与目标变量之间的关系。
优点:
捕获类别与目标变量的关系:目标编码能够将离散属性的每个类别编码为其在目标变量上的统计信息(如平均值),这有助于捕获类别特征与目标变量之间的潜在关系。
处理高维数据特征:对于具有大量类别的特征,目标编码是一种比独热编码(One-Hot Encoding)更有效的选择。独热编码在处理大量类别时会产生大量的新特征,而目标编码仅占用一个特征空间。
适应非线性模型:目标编码生成的特征可以适应非线性模型,而独热编码通常只适用于线性模型。
缺点:
信息泄漏和过拟合风险:目标编码在训练过程中使用了目标变量的信息,这可能导致信息泄漏和过拟合的问题。特别是在处理长尾类别(即出现次数较少的类别)时,过拟合的风险更高。
空值和未知类别的处理:目标编码在处理空值和未知类别时可能较为困难。如果直接将这些值视为某个特定的类别或统计信息,可能会引入偏差。
解释性较差:与独热编码相比,目标编码生成的特征在解释性方面可能较差。因为每个类别的编码值是基于目标变量的统计信息计算的,所以很难直观地理解这些编码值的具体含义。
对异常值敏感:目标编码对异常值比较敏感。如果某个类别的目标变量值存在异常值,那么该类别的编码值也可能受到异常值的影响。为了降低过拟合的风险,可以采取一些策略,如使用交叉验证来估计目标变量的统计信息,或者使用正则化技术来限制模型的复杂度。此外,也可以考虑在编码过程中引入一些平滑技术(如拉普拉斯平滑),以减少对异常值的敏感性。
- 分别对训练集和测试集构造firstname变量,删除name变量
- 对指定的类别特征进行目标编码
- 对Age和Fare两个连续型变量进行特征分箱(决策树分箱):针对’Age’和’Fare’的离散化和目标编码
来自CSDN的特征分箱方法
重点介绍决策树分箱:将连续型变量转换为分类(离散型)变量。该方法利用决策树的原理来划分数据的范围,使得每个划分(或称为“箱子”)内的数据尽可能具有相似的目标变量值。 - 不平衡处理
不平衡数据集指的是数据集中各个类别的样本数目相差巨大,也叫数据倾斜。当数据集中某一类别的样本数量远大于其他类别时,模型的性能可能会受到严重影响,因为它可能过于关注多数类别而忽略少数类别。
三、 模型建立
试用随机森林模型预测,先对其进行交叉验证调参
- n_estimators(180棵树)
for est in np.arange(30,500,10): #180棵
score =cross_val_score(estimator=RandomForestClassifier(n_estimators=est),
X=X_smo, y=y_smo,cv=10,n_jobs=-1,scoring='f1').mean() #交叉验证
- max_depth(8层)
评估不同最大深度(max_depth)对随机森林分类器(RandomForestClassifier)性能的影响。具体来说,它使用交叉验证(cross_val_score)来计算在不同max_depth参数下,分类器的平均F1分数 - min_samples_split(8个)
评估随机森林分类器中min_samples_split参数的不同值对模型性能的影响。min_samples_split是随机森林中一个重要的参数,它决定了在树的每个节点上分裂内部节点所需的最小样本数。 - min_samples_leaf(2个)
评估随机森林分类器中min_samples_leaf参数的不同值对模型性能的影响。min_samples_leaf是随机森林中的一个重要参数,它决定了叶子节点上应该有的最小样本数
四、 参数确定和模型对比
运用了RF LR SVM GBDT四种方法进行模型参数的调参,对比模型间的表现,得出具有过拟合的结论
随机森林(RF):
优势:
参数的调整相对简单,主要需要关注的是树的数量和特征的随机性程度。
对过拟合问题具有较好的抵抗性,因为每个决策树都是基于随机样本和特征子集构建的。
可以处理高维数据,并且不需要进行特征选择。
劣势:
在某些噪声较大的分类或回归问题上可能会过拟合。
当决策树数量过多时,可能会导致计算效率下降。
逻辑回归(LR):
优势:
参数调整相对简单,主要是调整正则化项的权重和迭代次数。
适用于二分类问题,并且对于线性可分的数据具有较好的分类效果。
可以输出每个特征对于结果的影响程度(即权重),具有较好的可解释性。
劣势:
不能处理非线性关系,对于非线性可分的数据需要进行特征转换或使用其他算法。
对异常值和缺失值比较敏感,需要进行相应的处理。
支持向量机(SVM):
优势:
可以处理高维特征的数据,并且对于非线性可分的问题可以通过核函数进行映射。
只依赖于支持向量进行决策,因此计算效率高。
可以控制模型的复杂度,通过调整正则化项的权重来防止过拟合。
劣势:
对大规模数据集的训练可能比较慢,因为需要计算所有的样本对之间的距离。
核函数的选择和参数调整对模型的性能影响较大,需要经验或交叉验证来选择最优参数。
梯度提升决策树(GBDT):
优势:
可以处理非线性问题,通过构建多棵决策树并进行加权累加来提高模型的预测精度。
对异常值和噪声具有较好的鲁棒性,因为每个新的决策树都是在之前模型误差的负梯度方向上进行拟合的。
可以输出特征的重要性排序,具有较好的可解释性。
劣势:
当树的数量过多时,可能会导致过拟合问题。
对参数(如学习率、树的深度等)的敏感度较高,需要进行仔细的调参。
XGBOOST
五、特征选择
利用RF的特征重要性来选特征
feature_imp = pd.DataFrame(rf_clf_final.feature_importances_,columns=['importance'])
feature_imp['names'] = X_test_final.columns
feature_imp.set_index('names').sort_values(by='importance',ascending=False)<img src="https://pic1.zhimg.com/50/v2-8748dd111b336a8551e6d0144d5836c8_720w.jpg?source=2c26e567" data-rawwidth="500" data-rawheight="760" data-size="normal" data-caption="" data-original-token="v2-8030afd4d11bb0f69a1da86961c3b6a4" class="origin_image zh-lightbox-thumb" width="500" data-original="https://picx.zhimg.com/v2-8748dd111b336a8551e6d0144d5836c8_r.jpg?source=2c26e567"/>
结果展现了有3个强特,特征重要性大于10%,分别是“性别Sex”、“票别Ticket”、“First_Name”。进一步使用交叉验证来选择特征“性别Sex”和“票别Ticket”两个强特。
第二件事
一 、重新导入数据并选择该两个特征
二、 不同编码方式的对比
对比11种不同的编码方法,得出对类别型特征变量进行编码的策略推荐,
onehot = sum > target = catboost = leaveone > woe > ordinal > jams = M > Hash > Helment
序数编码(OrdinalEncoder)
优点:能够保留有序分类变量的顺序信息,有助于提供更具有信息量的特征。适用于基于距离或大小关系的线性模型。
缺点:如果类别之间的顺序关系并不准确,可能会误导模型。对于树状模型效果有限。
目标编码(TargetEncoder)
优点:能够捕获类别与目标变量之间的关联性。
缺点:需要注意信息泄漏和过拟合的问题,因为编码过程中使用了目标变量的信息。
WOE编码(WOEEncoder)
优点:可以对自变量进行转换,使编码后的变量与因变量呈单调关系;适用于稀疏变量,可以通过分箱将稀疏值聚集;编码后的变量可在不同变量间进行值的比较。
缺点:由于分箱数量较少,可能导致一定的信息丢失;未考虑自变量之间的相关性;计算过程利用了Y标签信息,存在特征穿越风险。
CatBoost编码
优点:支持分类和回归问题;能够处理类别型特征,无需独热编码或标签编码;自动处理特征的缩放问题;对缺失值和异常值具有较好的鲁棒性;快速训练。
缺点:训练时间较长;内存消耗较大。
留一法编码
优点:每次迭代都使用最大数目的样本去训练,具有确定性(即每次应用于同一数据集时结果相同)。
缺点:算力要求高,训练时间长;采样不能代表数据集整体,存在偏差。
sum编码
优点:可能通过计算每个类别的某些统计量(如和)来编码,简单直观。
缺点:可能忽略类别之间的复杂关系,且容易受到数据分布的影响。
One-hot编码
优点:能够处理类别数据,将每个类别转换为二进制向量。
缺点:当类别数量很大时,会导致维度灾难;没有考虑类别之间的顺序或相关性。
Hash编码
优点:可以将任意长度的数据映射为固定长度的哈希值,减少数据维度;计算效率高。
缺点:哈希冲突可能导致信息丢失;哈希函数的选择对编码效果有影响。
通过对这11种编码进行随机森林调参验证,就算决策边界,对比出结论
分类与预测:决策边界是模型对样本进行分类的依据。在特征空间中,决策边界将基础向量空间划分为两个或多个集合,分类器根据样本点相对于决策边界的位置,将样本点分类到不同的集合中,即属于不同的类别。这使得模型能够基于输入的特征对新的未知样本进行预测和分类。
可视化分类结果:在二维或三维特征空间中,决策边界可以直观地表示为一条线、一个平面或一个超曲面。通过绘制决策边界,我们可以更好地理解模型是如何根据输入特征进行分类的,以及模型在哪些区域可能做出错误的分类。
评估模型性能:决策边界的形状和位置可以反映模型的复杂度和泛化能力。一个过于复杂的模型可能会导致过拟合,使得决策边界过于扭曲,无法很好地适应新的未知数据。而一个简单且泛化能力强的模型,其决策边界应该相对平滑,能够较好地适应不同的数据分布。
优化模型参数:在训练模型的过程中,我们可以通过调整模型的参数来优化决策边界的形状和位置。例如,在支持向量机(SVM)中,我们可以通过调整正则化参数C和核函数参数γ来影响决策边界的复杂度和位置,从而提高模型的分类性能。
不是一篇完整的思路分享,还存在数据泄露和开天眼的嫌疑,但提供了一种思路。可以在对所有数据进行处理前,用特征工程,模型调参等对模型特征进行选择,降低后续数据处理的复杂程度,以及对比了各种调参模型以及各种编码方法,虽然XGBoost都没提到,但任有可学习的地方,提供了一种辩证思路