Datawhale打卡活动 Kaggle Spaceship Titanic
尝试了一个coggle科学的打卡活动(Coggle 30 Days of ML(22年10月)),记录一下学习过程!
Day4 特征工程入门
步骤1:学习特征工程基础
特征工程是一项非常艰巨的工作,俗话说:特征工程决定了模型的上限,算法模型只是逼近这个上限。由此可见,特征工程非常重要。那么特征工程到底是什么?
特征工程是是将原始数据(数据集中给出的数据)转化为更能够表达问题本质的特征(传入模型进行学习)的过程。
人们对特征工程的探索脚步从未停止,哪怕有很多常规化的操作,但是每一个问题都会有一个各自独立的特征工程方案待人们挖掘。它也是数据竞赛中最重要的一环!
在网上copy了一个特征工程的思维导图,虽然对于这些竞赛圈的前排大佬来说已经烂熟于心,不一定会在最优方案中都用到,但是对于咱们这些小白来说,还是要踏实的学习,不能想着一步就晋升成为大佬,毕竟没有外挂给你开,学习总要有一个过程!
对于各个部分的实操,我就不一个一个copy了,大家可以在竞赛中一个一个自己实现,看看效果如何!
步骤2:对类别字段分别进行onehot和labelencoder
通过观察可以发现,onehot和labelencoder最本质的区别就是一个是将一脸变成多列(类别个数)、一个是将一列变为一列直接进行编码。举个栗子:
类别 |
---|
A |
B |
C |
对上述列别编码,onehot的结果如下:
A | B | C |
---|---|---|
1 | 0 | 0 |
0 | 1 | 0 |
0 | 0 | 1 |
labelencoder得编码如下:
类别 |
---|
0 |
1 |
2 |
通过上述操作,应该能够对两种编码的情况有一个清晰的了解了,接下来对比赛的数据进行处理。
对数据集进行labelencoder
from tqdm import tqdm
from sklearn.preprocessing import LabelEncoder
col_feat=['PassengerId','HomePlanet','Cabin','Destination','Name']
for col in tqdm(col_feat):
data[col]=data[col].fillna('_NAN_')
lab = LabelEncoder()
data[col] = lab.fit_transform(data[col])
'''
由于存在bool类型,所以对其使用map的方式进行编码
'''
column_dict={True:1,False:0}
for col in tqdm(['CryoSleep','VIP','Transported']):
data[col] = data[col].map(column_dict)
对数据集onehot编码
步骤3:使用分类树模型和Kfold验证onehot和labelencoder在验证集的精度。
这里的树模型我们使用lgb(个人倾向于喜欢用这个),然后作5折交叉验证,labelencoder的结果如下:
onehot编码之后的结果如下: