机器学习第一次尝试

首先了解几个机器学习中常见的术语的意义
一个机器学习模型的质量问题,从对训练集样本拟合程度的角度,可以分为欠拟合(Underfitting)和过拟合(Overfitting)

数据的准备和处理

机器学习所做的第一件事就是理解数据,人工智能工作者80%的时间花在:
对数据的获取、清洗、转换与处理、特征工程的提取上。数据决定模型的上限

泰坦尼克号幸存者数据建模分析

著名数据科学竞赛平台Kaggle提供了一个非常适合初学者学习练手的项目,该数据集提供了891名泰坦尼克号的乘客数据,包括乘客姓名、年龄、客舱等级等信息;及目标数据即乘客是否生还。

接下来我么就用这个数据集进行建模分析

一. 理解数据

需要了解的问题:

  1. 学习的目标是什么?监督还是非监督?是六大任务的哪一类?
    目标:预测乘客是否生还;监督学习 ;分类问题。
  2. 每一个字段的含义
  3. 每一个字段的变量类型:数值型还是类别型
    类别型的数据,不同的数据之间距离都是1,可以用独热编码
  4. 数据规模 多少行多少列
  5. 数据质量 有多少缺失数据 多少重复数据

导入数据并对数据进行观察:


训练集数据

数据共有12个字段

PassengerId Pclass Name Sex Age SibSp
乘客ID 仓位等级 姓名 性别 年龄 在船上兄弟姐妹配偶数
Survived Ticket Fare Cabin Embarked Parch
是否幸存 船票编号 船票价格 客舱号 登船港口 在船上父母子女数

查看数据集信息:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
PassengerId    891 non-null int64
Survived       891 non-null int64
Pclass         891 non-null int64
Name           891 non-null object
Sex            891 non-null object
Age            714 non-null float64
SibSp          891 non-null int64
Parch          891 non-null int64
Ticket         891 non-null object
Fare           891 non-null float64
Cabin          204 non-null object
Embarked       889 non-null object
dtypes: float64(2), int64(5), object(5)
memory usage: 83.6+ KB

1.观察数据发现:

Name Sex Ticket Embarked字段是字符类型,其余为数值类型
Age Cabin Embarked 字段有缺失值

2.找出对预测没有意义的列并删除

PassengerID Name Ticket 这些对数据分析都没有什么影响,处理掉


删除无用列后的数据

3. 单变量数据探索

每次只对一个变量进行分析,方便后续数据预处理,常用的单变量数据处理方式有:
频数分析:适用于类别型变量;直方图;描述性统计

4. 多变量数据探索

即同时探索多个变量间的相关关系
散点图、交叉表、堆栈条图、分类汇总

二、数据预处理

需要进行的处理:

  1. 对缺失值进行处理
  2. 对类别型变量进行重新编码
  3. 对连续变量进行分箱,然后再按处理类别型数据的方式重新编码
  4. 对连续型变量进行标准化和归一化处理

PS. 不同算法和问题,对数据集的预处理要求并不一样:

  1. 缺失值对所有算法来说基本上都要处理
  2. 连续型变量是否分箱具体看算法,决策树不需要
  3. 标准化和归一化在涉及到计算距离计算的算法中一定要处理

1. 缺失值处理

常见的缺失值处理有三种方法:

  1. 简单粗暴,直接把有缺失值的数据删除,如果数据集很大而缺失值又不多的话可以
  2. 构造一个新变量来标记缺失值,缺失标记为1,不确失标记为0。这种方法认为缺失值是一个有意义的信息,不能简单处理掉。
  3. 用一个值替换掉缺失值,具体如何替换方法多样,比如数值类型的可以考虑用均值替换,类别类型变量用众数替换

在这个数据集中如果直接删掉有缺失值的行,原本的891条数据就只剩183条了,所以考虑用构造变量的方式处理缺失值。

# 构造一个新变量 AgeIsMissing
titanic_df['AgeIsMissing'] = 0
titanic_df.loc[titanic_df['Age'].isnull(), 'AgeIsMissing'] = 1
# 对 Age 缺失值进行均值填充
age_mean = round(titanic_df['Age'].mean())

2. 类别变量重新编码

目的:机器学习要求输入的变量必须是数值

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 11,014评论 0 9
  • 羊一枚阅读 1,490评论 0 0
  • 1、护肤 防晒 面膜(每天一片 农夫山泉) 基础护肤 2、运动 郑多燕、瑜伽 3、早睡 不做无谓的加班 4、保持工...
    西空间阅读 1,733评论 0 0
  • 坐火车直接到zaanse schans 那一站下车,随人流或看指示牌步行约十分钟就到zaanse schan...
    乡村_岁月阅读 3,085评论 0 1
  • 童年的记忆不多,我只记得自己曾经非常倔强有个性。 倔强到什么程度呢?起床不喜欢别人叫,吃饭别给我搞肉,学习上,每次...
    lucky秀_b07c阅读 1,535评论 0 1

友情链接更多精彩内容