目录
1 建模
1.1 数据分析流程
- 数据分析:运用数据结合业务,以此得到我们需要知道的结论
- 整个项目完成的流程:
- 首先对数据的本身进行处理,比如数据本身的增删查补,
- 然后可以做必要的清洗工作,处理好数据
- 其次使用数据建模,搭建一个预测模型或者其他模型
- 最后从模型得到结果以后,要分析模型是不是足够的可靠,就需要评估这个模型
1.2 模型搭建准备工作
1.2.1 导入库
- `numpy`:支持大量的维度**数组与矩阵**运算,此外也针对数组运算提供大量的数学函数库。
- `pandas`:用于数据操纵和分析,建立在Numpy之上的,Pandas为Python带来了两种新的数据结构:`Pandas Series`和`Pandas DataFrame`,借助这两种数据结构,我们能够轻松直观地处理**带标签**数据和**关系**数据。
- `matplotlib.pyplot`:是一个用来绘图的python库,它的`matplotlib.pyplot`模块提供了一个与MATLAB非常类似的绘图系统
- `seaborn`:是python中的一个非常强大的数据可视化库,`seaborn`就是在`matplotlib`基础上进行更高级的API封装,使绘图更加容易。是针对统计绘图的,能满足数据分析90%的绘图需求
- `IPython.display `:·ipython·是一个python的交互式shell,比默认的python shell好用得多,支持变量自动补全,自动缩进,支持bash shell命令,内置了许多很有用的功能和函数。
```py
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from IPython.display import Image
```
- `%matplotlib inline`:`%matplotlib`命令可以将`matplotlib`的图表直接嵌入到Notebook之中,或者使用指定的界面库显示图表,它有一个参数指定`matplotlib`图表的显示方式。`inline`表示将图表嵌入到Notebook中。
```py
%matplotlib inline
```
```py
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
plt.rcParams['figure.figsize'] = (10, 6) # 设置输出图片大小
```
1.2.2 载入数据
-
载入原始数据
# 读取原数据数集 train = pd.read_csv('train.csv') train.shape # (891, 12)
train.head()
-
载入清洗后的数据
#读取清洗过的数据集 data = pd.read_csv('clear_data.csv')
data.head()
思考:原始数据和清洗后数据的不同:清洗后的数据全部变为数字形式来表示
1.3 模型搭建
1.3.1 选择模型
-
处理完数据后要选择模型:
- 首先在进行模型选择之前,需要知道数据集最终是进行监督学习还是无监督学习
- 模型的选择一方面是通过我们的任务来决定的
- 另一方面是根据数据样本量以及特征的稀疏性来决定
- 刚开始我们总是先尝试使用一个基本的模型来作为其baseline,进而再训练其他模型做对比,最终选择泛化能力或性能比较好的模型
-
监督和非监督学习:
- 监督学习:
- 定义:根据已有的数据集,知道输入和输出结果之间的关系。根据这种已知的关系,训练得到一个最优的模型。
- 通俗理解:可以把机器学习理解为我们教机器如何做事情。
- 分类:回归(Regression)、分类(Classification)
- 回归:针对于连续型变量的。
即对已经存在的点(训练数据)进行分析,拟合出适当的函数模型y=f(x),这里y就是数据的标签,而对于一个新的自变量x,通过这个函数模型得到标签y。 - 分类:针对离散型的,输出的结果是有限的。
要通过分析输入的特征向量,对于一个新的向量得到其标签
- 回归:针对于连续型变量的。
- 非监督学习:
- 定义:我们不知道数据集中数据、特征之间的关系,而是要根据聚类或一定的模型得到数据之间的关系。
- 通俗理解:无监督学习更像是自学,让机器学会自己做事情,是没有标签(label)的。
参考文章
- 监督学习:
-
sklearn
的算法选择路径:- 上面的建模,并不是从零开始一个人完成完成所有代码的编译,而是使用一个机器学习最常用的一个库
sklearn
来完成模型的搭建
- 上面的建模,并不是从零开始一个人完成完成所有代码的编译,而是使用一个机器学习最常用的一个库
1.3.2 切割训练集和测试集
- 数据集的划分:
- 通常将已有的数据集划分为训练集和测试集两部分,训练集用来训练模型,而测试集则是用来评估模型对于新样本的判别能力
- 数据集划分的基本条件:
- 条件一:训练集和测试集的分布要与样本真实分布一致,即训练集和测试集都要保证是从样本真实分布中独立同分布采样而得;
- 条件二:训练集和测试集要互斥
- 划分数据集的方法:
- 留出法
- 定义:是直接将数据集 D 划分为两个互斥的集合,其中一个集合作为训练集 S,另一个作为测试集 T
- 采样方法:为了保证数据分布的一致性,通常采用 分层采样 的方式来对数据进行采样
- 通常选择:会将 D 中大约 2/3~4/5 的样本作为训练集,其余的作为测试集
- 交叉验证法
- 定义:k 折交叉验证:通常将数据集 D 分为 k 份,其中的 k-1 份作为训练集,剩余的那一份作为测试集,这样就可以获得 k 组训练/测试集,可以进行 k 次训练与测试,最终返回的是 k 个测试结果的均值。
- 采样方法: 分层采样
- 通常选择:对于交叉验证法,其 k 值的选取往往决定了评估结果的稳定性和保真性,通常 k 值选取 10, k=1的时候,我们称之为留一法
- 自助法
- 定义:每次从数据集D中取一个样本作为训练集中的元素,然后把该样本放回,重复该行为 m 次,这样我们就可以得到大小为m的训练集,在这里面有的样本重复出现,有的样本则没有出现过,我们把那些没有出现过的样本作为测试集。
- 采样方法:有放回重复采样
总结:
对于数据量充足的时候,通常采用 留出法 或者 k折交叉验证法 来进行训练/测试集的划分;
对于数据集小且难以有效划分训练/测试集时使用 自助法;
对于数据集小且可有效划分的时候最好使用 留一法 来进行划分,因为这种方法最为准确 『最常用』
参考文章
- 留出法
- 这里使用留出法划分数据集:
- 将数据集分为自变量和因变量
- 按比例切割训练集和测试集(一般测试集的比例有30%、25%、20%、15%和10%)
- 使用分层抽样
- 设置随机种子以便结果能复现
# 调用tain_test_split模块用来分割数据 from sklearn.model_selec