首先了解几个机器学习中常见的术语的意义
一个机器学习模型的质量问题,从对训练集样本拟合程度的角度,可以分为欠拟合(Underfitting)和过拟合(Overfitting)
数据的准备和处理
机器学习所做的第一件事就是理解数据,人工智能工作者80%的时间花在:
对数据的获取、清洗、转换与处理、特征工程的提取上。数据决定模型的上限
泰坦尼克号幸存者数据建模分析
著名数据科学竞赛平台Kaggle提供了一个非常适合初学者学习练手的项目,该数据集提供了891名泰坦尼克号的乘客数据,包括乘客姓名、年龄、客舱等级等信息;及目标数据即乘客是否生还。
接下来我么就用这个数据集进行建模分析
一. 理解数据
需要了解的问题:
- 学习的目标是什么?监督还是非监督?是六大任务的哪一类?
目标:预测乘客是否生还;监督学习 ;分类问题。 - 每一个字段的含义
- 每一个字段的变量类型:数值型还是类别型
类别型的数据,不同的数据之间距离都是1,可以用独热编码 - 数据规模 多少行多少列
- 数据质量 有多少缺失数据 多少重复数据
导入数据并对数据进行观察:
数据共有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. 多变量数据探索
即同时探索多个变量间的相关关系
散点图、交叉表、堆栈条图、分类汇总
二、数据预处理
需要进行的处理:
- 对缺失值进行处理
- 对类别型变量进行重新编码
- 对连续变量进行分箱,然后再按处理类别型数据的方式重新编码
- 对连续型变量进行标准化和归一化处理
PS. 不同算法和问题,对数据集的预处理要求并不一样:
- 缺失值对所有算法来说基本上都要处理
- 连续型变量是否分箱具体看算法,决策树不需要
- 标准化和归一化在涉及到计算距离计算的算法中一定要处理
1. 缺失值处理
常见的缺失值处理有三种方法:
- 简单粗暴,直接把有缺失值的数据删除,如果数据集很大而缺失值又不多的话可以
- 构造一个新变量来标记缺失值,缺失标记为1,不确失标记为0。这种方法认为缺失值是一个有意义的信息,不能简单处理掉。
- 用一个值替换掉缺失值,具体如何替换方法多样,比如数值类型的可以考虑用均值替换,类别类型变量用众数替换
在这个数据集中如果直接删掉有缺失值的行,原本的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. 类别变量重新编码
目的:机器学习要求输入的变量必须是数值