特征工程和数据清洗

当我们得到一个具有特征的数据集时,是不是所有的特性都很重要?可能有许多冗余的特征应该被消除,我们还可以通过观察或从其他特征中提取信息来获得或添加新特性。

年龄特征:

正如我前面提到的,年龄是连续的特征,在机器学习模型中存在连续变量的问题。

如果我说通过性别来组织或安排体育运动,我们可以很容易地把他们分成男女分开。

如果我说按他们的年龄分组,你会怎么做?如果有30个人,可能有30个年龄值。

我们需要对连续值进行离散化来分组。

好的,乘客的最大年龄是80岁。所以我们将范围从0-80成5箱。所以80/5=16。

data['Age_band']=0
data.loc[data['Age']<=16,'Age_band']=0
data.loc[(data['Age']>16)&(data['Age']<=32),'Age_band']=1
data.loc[(data['Age']>32)&(data['Age']<=48),'Age_band']=2
data.loc[(data['Age']>48)&(data['Age']<=64),'Age_band']=3
data.loc[data['Age']>64,'Age_band']=4
data.head(2)

data['Age_band'].value_counts().to_frame().style.background_gradient(cmap='summer')#checking the number of passenegers in each band

sns.factorplot('Age_band','Survived',data=data,col='Pclass')
plt.show()


生存率随年龄的增加而减少,不论Pclass。

Family_size:家庭总人数

光看兄弟姐妹和老人孩子看不太直接,咱们直接看全家的人数

data['Family_Size']=0
data['Family_Size']=data['Parch']+data['SibSp']#family size
data['Alone']=0
data.loc[data.Family_Size==0,'Alone']=1#Alonef,ax=plt.subplots(1,2,figsize=(18,6))
sns.factorplot('Family_Size','Survived',data=data,ax=ax[0])
ax[0].set_title('Family_Size vs Survived')
sns.factorplot('Alone','Survived',data=data,ax=ax[1])
ax[1].set_title('Alone vs Survived')
plt.close(2)
plt.close(3)
plt.show()


family_size = 0意味着passeneger是孤独的。显然,如果你是单独或family_size = 0,那么生存的机会很低。家庭规模4以上,机会也减少。这看起来也是模型的一个重要特性。让我们进一步研究这个问题。

sns.factorplot('Alone','Survived',data=data,hue='Sex',col='Pclass')
plt.show()

船票价格

因为票价也是连续的特性,所以我们需要将它转换为数值。

pandas.qcut

data['Fare_Range']=pd.qcut(data['Fare'],4)
data.groupby(['Fare_Range'])['Survived'].mean().to_frame().style.background_gradient(cmap='summer_r')

如上所述,我们可以清楚地看到,船票价格增加生存的机会增加。

data['Fare_cat']=0
data.loc[data['Fare']<=7.91,'Fare_cat']=0
data.loc[(data['Fare']>7.91)&(data['Fare']<=14.454),'Fare_cat']=1
data.loc[(data['Fare']>14.454)&(data['Fare']<=31),'Fare_cat']=2
data.loc[(data['Fare']>31)&(data['Fare']<=513),'Fare_cat']=3
sns.factorplot('Fare_cat','Survived',data=data,hue='Sex')
plt.show()


显然,随着fare_cat增加,存活的几率增加。随着性别的变化,这一特性可能成为建模过程中的一个重要特征。

将字符串值转换为数字
因为我们不能把字符串一个机器学习模型

data['Sex'].replace(['male','female'],[0,1],inplace=True)
data['Embarked'].replace(['S','C','Q'],[0,1,2],inplace=True)
data['Initial'].replace(['Mr','Mrs','Miss','Master','Other'],[0,1,2,3,4],inplace=True)

去掉不必要的特征

名称>我们不需要name特性,因为它不能转换成任何分类值

年龄——>我们有age_band特征,所以不需要这个

票号–>这是任意的字符串,不能被归类

票价——>我们有fare_cat特征,所以不需要

船仓号——>这个也不要没啥含义

passengerid -->不能被归类

data.drop(['Name','Age','Ticket','Fare','Cabin','Fare_Range','PassengerId'],axis=1,inplace=True)
sns.heatmap(data.corr(),annot=True,cmap='spring_r',linewidths=0.2,annot_kws={'size':20})
fig=plt.gcf()
fig.set_size_inches(18,15)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.show()

现在以上的相关图,我们可以看到一些正相关的特征。他们中的一些人sibsp和family_size和干燥family_size和一些负面的孤独和family_size。

【机器学习】泰坦尼克号 -3 -数据清洗相关推荐

  1. 机器学习-泰坦尼克号幸存者预测

    机器学习-泰坦尼克号幸存者预测 泰坦尼克灾难数据描述 PassengerId:乘客的ID号,这个是顺序编号,用来唯一标识一名乘客.这个特征和幸存与否无关,我们不使用这个特征. Survived:1表示 ...

  2. 机器学习项目之数据清洗

    前言 数据清洗是机器学习项目中最为琐碎而又繁重的工作之一,下面总结一些经常用到的数据清洗方法与Python实现,以探索能否用更加自动化的手段来简化数据清洗工作. 包括: 1.缺失值处理 2.格式内容清 ...

  3. 机器学习算法加强——数据清洗

    3.数据清洗 Pandas-Fuzzywuzzy Fuzzuwuzzy-Levenshtein distance(模糊查询与替换) 考虑降维后的样本方差 PCA--寻找样本的主方向u:将m和样本值投射 ...

  4. sklearn机器学习:泰坦尼克号幸存者的预测

    这是Kaggle的一道题,这里使用决策树完成预测,方便起见就直接在jupyter lab上来做这题了. 1.首先导入需要的包 #1.导包 import pandas as pd import nump ...

  5. 机器学习 泰坦尼克号——灾难中的机器学习

    背景:本篇文章背景为[参考链接:https://www.kaggle.com/competitions/titanic/data],通过KNN算法,判断生存下来的可能性大小. 训练文件链接地址[链接: ...

  6. 【文末送书】调参太费力?自动化机器学习来帮你!

    机器学习项目中最折腾人的环节是什么?是特征工程?是模型选择?还是参数调优? 先来看看机器学习项目实战可划分为哪几个具体阶段. <零基础学机器学习>一书将机器学习项目的实战过程归纳如下: 问 ...

  7. 想搞机器学习,不会特征工程?你TM逗我那!

    原文:http://dataunion.org/20276.html 作者:JasonDing1354 引言 在之前学习机器学习技术中,很少关注特征工程(Feature Engineering),然而 ...

  8. 数据清洗和预处理详解

    数据预处理是建立机器学习模型的第一步(也很可能是最重要的一步),对最终结果有决定性的作用:如果你的数据集没有完成数据清洗和预处理,那么你的模型很可能也不会有效--就是这么简单. 人们通常认为,数据预处 ...

  9. 人工智能学习体系大纲(src:http://blog.sina.com.cn/s/blog_7dbb766f0102xdwu.html)

    阶段一.数学基础 本课程主要从数据分析.概率论和线性代数及矩阵这三大块讲解基础,方便大家后续课程的学习中更好的理解机器学习和深度学习的相关算法内容. 一.数据分析 1)常数e 2)导数  3) 梯度 ...

最新文章

  1. R语言构建ElasticNet回归模型实战:基于mtcars数据集
  2. STVD出现红色区域
  3. java str2date,java date类与string类实例代码分享
  4. php数据库数组去重复数据库,PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)...
  5. caffe不支持relu6_国产AI框架再进化!百度Paddle Lite发布:率先支持华为NPU在线编译,全新架构更多硬件支持...
  6. YARN的服务库和事件库
  7. silverlight:分享一个不错的自定义布局CollectionFlow(可用于制作相册的哦!)
  8. C语言学习笔记-1(资料:郝斌老师C语言视频)
  9. pytorch读取数据集(分类文件夹加载)—ImageFolder()
  10. Linux 文本三剑客之awk 木石前盟
  11. 如何开发手机商城app? 商城APP功能
  12. 海底捞成功的全套培训体系(收藏)
  13. win10下右键菜单项里没有“打开方式“的解决办法
  14. latex中插入两张子图片
  15. 向列表增加元素的三种方法
  16. 谁来教我渗透测试——黑客必须掌握的Linux基础
  17. 【Vue】Vue-cli(脚手架)的目录结构详解(转载)
  18. Web前端教程学习笔记1.2-2022.10.17始
  19. T-SQL 基础学习 01
  20. 英语六级选词填空技巧

热门文章

  1. 如何将360极速浏览器保存的密码迁移到Edge(其它国产浏览器也适用)
  2. Python 标识符与关键字
  3. 区块链-究竟什么是通证经济?-领鹿谷资讯
  4. GitHub发卡系统zfaka配置历程
  5. 机器视觉系列(02)---TensorFlow2.3 + win10 + GPU安装
  6. 做海外网红营销,TikTok、Youtube、Instagram怎么选?
  7. 2020双十一成绩单
  8. linux系统中如何验证网络端口通不通
  9. 计算机网络的三网的概念,“三网融合”的含义是什么
  10. 基于LSI的 职位描述JD 匹配