python归一化 增大差异_练习赛1:Titanic

0 问题概述根据给出的乘客特征(年龄、舱室等级、登陆港口等),预测乘客是否幸存,属于典型的分类问题。数据文件:train.csv 训练集,包含1-891个记录test.csv 测试集,包含892-1309的记录,不包含是否生存的labelgender_submission.csv 提交样例,测试集对应的是否生存label1 训练集、测试集数据对比分析1.1 特征缺失值情况对比image.png存在...
摘要由CSDN通过智能技术生成

0 问题概述

根据给出的乘客特征(年龄、舱室等级、登陆港口等),预测乘客是否幸存,属于典型的分类问题。

数据文件:

train.csv 训练集,包含1-891个记录

test.csv 测试集,包含892-1309的记录,不包含是否生存的label

gender_submission.csv 提交样例,测试集对应的是否生存label

1 训练集、测试集数据对比分析

1.1 特征缺失值情况对比

ed28be9635ad

image.png

存在两个特殊情况,数据缺失补全时应特别注意;

Cabin特征存在大比例的缺失,可以将其忽略;

所有特征在训练集、测试集中的缺失情况基本一致,无需据此删除任何特征。

1.2 特征数据分布情况对比

ed28be9635ad

image.png

通过绘图对所有10个特征在训练集、测试集中的分布情况进行对比,未发现任何明显差异,无需据此删除任何特征。

1 特征工程

1.1 离散特征处理

1)name

乘客姓名作为一个整体时这些信息价值不大,此时它的作用和PassengerId相当。

但是,name中包含的Mrs, Miss, Mr and Master.信息很有价值,可以将name切分为first_name, last_name, mid_name三部分。这里只保留mid_name,其余两个暂时不用。

def name_split(data):

first_name, last_name, mid_name = [], [], []

for name in data['Name']:

name = re.split(r'[,.]\s*', name)

first_name.append(name[0])

mid_name.append(name[1])

last_name.append(name[2])

#data['first_name'] = first_name

data['mid_name'] = mid_name

#data['last_name'] = last_name

print(data['mid_name'].value_counts()) # 输出mid_name中的非重复元素

return data

>>

Mr 517

Miss 182

Mrs 125

Master 40

Dr 7

Rev 6

Mlle 2

Major 2

Col 2

Lady 1

Capt 1

Ms 1

Mme 1

Sir 1

Jonkheer 1

the Countess 1

Don 1

可以看出,mid_name中共含有十多个非重复元素。查找资料发现,称谓的说明包含了这些称谓的解释。

Dr.= doctor 医生/博士

Rev.= reverend,用于基督教的牧师,如the Rev. Mr.Smith

Dona,是西班牙语对女子的称谓,相当于英语的 Lady

Don,n. (置于男士名字前的尊称)先生,堂

Master,小男孩,相当于汉语的"少爷"。

jonkheer是贵族

Col,Colonel,上校

capt船长; captain (陆军)上尉; (海军) 上校

major, 陆军少校意思有少校人意思

The Countless,女伯爵

Mlle,小姐

Mme是Madame的简写,(用于已婚妇女姓名前的尊称)太太

方法1:利用专业知识对离散的字符特征进行分组

根据常识,称谓中一般包含以下三方面的信息:

【年龄】:Mrs, Miss, Mr and Master等。称谓中的年龄信息基本和age特征同步。

【性别】:基本和sex特征同步;

【社会等级】:尊贵的人/平民。👉尊贵的人:jonkheer、The Countless

【职业】:可分为船员、牧师、军人、医生等。

检查测试集中的称谓是否和训练集中一致:一致√

print(data['mid_name'].value_counts())

>>

Mr 757

Miss 260

Mrs 197

Master 61

Rev 8

Dr 8

Col 4

Ms 2

Major 2

Mlle 2

Mme 1

Don 1

Dona 1

Lady 1

the Countess 1

Sir 1

Jonkheer 1

Capt 1

featureGroupbyList(data, 'mid_name', [['Mme', 'Ms', 'Mrs'],

['Mlle', 'Miss'],

['Mr'],

['Master'],

['other'],

['Capt', 'Col', 'Dr', 'Major', 'Rev']],

"mid_nameGroup", ['Mrs', 'Miss', 'Mr', 'Master', 'Royalty', 'officer'])

因此,参考Titanic Kaggle Challenge,对'mid_name'进行分组:

1)以基数较多的Mr、Miss、Mrs和Master 为四个独立类别;

2)从剩余基数较少的mid_name中归纳出Royalty、officer两个新类。

ed28be9635ad

归类结果的基数分布、label分布

方法2:利用特征数据-label标签之间的相关程度进行分组

这种方法忽略midname各取值的现实意义,完全根据label列的表现进行分组。

ed28be9635ad

--1)考虑子图1中特征基数影响,将特征分为['Mr']、['Miss', 'Mrs', 'Master']、其他 三类。

用字符标识,onehot处理,训练集正常0.83,测试集降低为0.53588;

用数值标识,试验发现,离散特征标识的数值大小,对SVM模型的预测结果有显著影响!!!

当数值依次为-1、1、0时,训练集0.83,测试集0.636。

--2)忽略子图1中特征基数的影响,按照子图3中存活率比例,将所有特征划分为三类:

featureGroupbyList(data, 'mid_name', [['Lady', 'Mlle', 'Mme', 'Ms', 'Sir', 'the Countless'],

['other'],

['Capt', 'Don', 'Jonkheer', 'Major', 'Mr', 'Rev']],

"mid_nameGroup", ['high', 'medium', 'low'])

ed28be9635ad

对Group后的新特征进行可视化,结果与预期基本一致

结果表明:

第二种方法不如第一种方法,应该依靠特征的实际意义进行处理。

另计:👉标识的数值依次为2、1000、0时,训练集0.83,测试集0.79904,竟然刷新了个人最高分,说明这个特征是有益的,且数值标识value有显著影响。

2)Pclass座舱等级

该特征虽然是用123数字表示,它本质是离散特征,应该进行onehot处理。</

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值