以泰坦尼克号为例构建第一个预测模型

如果把机器学习的最终成果比做为做一道菜的话,那么数 据准备和处理,就相当于买食材并 挑选、洗清、处理食材的过程。

一 导包

#逻辑回归算法
from sklearn.linear_model import LogisticRegression 
#随机分割数据集
from sklearn.model_selection import train_test_split
#输出模型评估报告 
from sklearn.metrics import classification_report
#相当于把“泰坦尼克号数据特征工程完整流程.ipynb ”文件中的代码

%run 泰坦尼克号数据特征工程完整流程.ipynb 

以泰坦尼克号为例构建第一个预测模型_第1张图片

TrainData.head()

以泰坦尼克号为例构建第一个预测模型_第2张图片
训练集中一定要删除目标值,因为这个值是要训练得出的

#从训练数据集中,拆分出特征变量
trainData_X = TrainData.drop(['Survived'], axis = 1)
trainData_X.head()

以泰坦尼克号为例构建第一个预测模型_第3张图片

#从训练数据集中,拆分出目标变量
trainData_y = TrainData.Survived
trainData_y

以泰坦尼克号为例构建第一个预测模型_第4张图片
二 拆分训练集和测试集

'''
把特征数据和目标变量拆分为4份
X_train 训练集特征
X_test  测试集特征
y_train 训练集目标
y_test  测试集目标

训练集用于训练模型
测试集用来评估模型
test_size=0.3指定了拆分出来的test集数量占比是30%。
一般拆成训练集多  测试集少
random_state 随机数
'''
X_train, X_test, y_train, y_test = train_test_split(trainData_X, 
                                                    trainData_y, 
                                                    test_size=0.3, 
                                                    random_state=123456)
X_train.shape  #623个样本  40个特征

在这里插入图片描述

y_train.shape  
#X_train和y_train的长度必须一致:也就是说(X_train,y_train)必须是成对出现的

在这里插入图片描述
三 实例化模型

#实例化一个逻辑回归模型(逻辑回归是用于解决分类问题的典型机器学习算法)
lr = LogisticRegression()  

四 训练模型

#(此过程本质上是得到相关数学模型的相关参数,即得到:y=f(x)相关表达式)
lr.fit(X_train, y_train)

以泰坦尼克号为例构建第一个预测模型_第5张图片
五 使用模型对测试集数据进行预测

y_test_pred = lr.predict(X_test)
y_test_pred

以泰坦尼克号为例构建第一个预测模型_第6张图片

y_test

以泰坦尼克号为例构建第一个预测模型_第7张图片
六 测试集的预测结果与真实结果进行比对,输出模型评估报告

print(classification_report(y_test,y_test_pred))

以泰坦尼克号为例构建第一个预测模型_第8张图片
关于模型训练的三点说明

1、数据格式

  • 预测模型的训练需要输入数据对象X和y,例如:lr.fit(X_train, y_train)。
  • X_train是一个shape为(n_samples, n_features)的2维数组(矩阵),矩阵的列就是特征变量x,行就是每一条训练样本。
  • y_train是一个shape为(n_samples,)的一维数组,存放的是目标变量y的值
  • X_train和y_train的长度必须一致:也就是说(X_train,y_train)必须是成对出现的。另 外,sklearn可以接受Pandas的dataframe或者series对象,一般我们都习惯用 Pandas来为机器学习建模准备数据。

2、数据集拆分

  • 我们看到了例子中训练模型用X_train和y_train,评估模型用X_test和y_test。这个train和test就是通过数据集的随机拆分的方法来完成的。
  • test_size=0.3指定了拆分出来的test集数量占比是30%

3、模型评估
模型训练出来之后,到底性能如何,这是需要评估的。数据集拆分的目的(拿测试集来 评估模型)就是为了让模型评估更加客观,不能既做运动员又做裁判。所以模型评估不 能使用训练集,必须在绝对没有参与模型训练的测试集上进行评估。模型评估有很多方 法,最常用的指标就是正确率,但是只看一个正确率有时候无法对模型全面评估,所以 还会有更多的评估指标

  • 误分类矩阵
  • 准确率,召回率,F1 Score等
  • ROC曲线,AUC值
  • Lorenz曲线
  • KS曲线,KS值

对新数据做出预测
• 对新数据进行同样的数据预处理工作
• 利用训练好的模型对新数据进行预测
• 预测结果保存为文件

# 模拟用于提供新数据集 
#trainData_X .to_csv("./datasets/titanic/Test.csv", index=False) 
# 准备测试集,读取 csv 数据,并保存为名称为 Test_X 的对象
 Test_X =pd.read_csv('./datasets/titanic/Test.csv') #Test_X = TestData.drop(['PassengerId'], axis = 1) 
# 对测试数据进行预测 
pred = lr.predict(Test_X) 
# 生成最终提交结果Submission 
Submission = pd.DataFrame({'PassengerId':PassengerId,'Survived':pred}) 
# 导出为csv文件
 Submission.to_csv("./datasets/titanic/Submission.csv", index=False) 
 # 查看导出文件,读取测试结果数据集 
 submission_df = pd.read_csv('./datasets/titanic/Submission.csv') submission_df.head()

以泰坦尼克号为例构建第一个预测模型_第9张图片

一个简单而完整的建模流程
以泰坦尼克号为例构建第一个预测模型_第10张图片
以泰坦尼克号为例构建第一个预测模型_第11张图片
classification_report 评估报告 输出了一些核心评估指标,这里简单 解释一下。

  • precision:准确率。这个比较容易理解,例如预测了100个人会生还,结果真实生还的人有70个,那么对预测生还(1)这个类来说准确率就是 70%。同样针对不生还这个类也有一个准确率,例如预测100个人不会生还,结果真的有82个人没有生还,那么不生还类(0)的准确率就是82%。
  • recall:召回率。假如总样本有1000个人,所有生还的人有100个,模型预测生还的人中有72个是正确的,那么召回率就是72%。简单说就是 预测正确的数量的覆盖度。
  • f1-score:准确率和召回率的一个平衡。不能简单的说准确率越高 越好或者召回率越高越好。为什么?难道不是准确率越高越好吗?是的,还真不一定。举个例子,你非常谨慎,只对最有把握的10个人预测了他们 能生还,结果还真的给你蒙对了,准确率100%。很显然,这样的模型其实并没有什么用,因为召回率实在太低了,大部分生还的人都没有预测出 来。反过来,你把所有的人都预测能生还,这下好了,召回率达到了100%,但是这样的模型也没有任何意义。

以泰坦尼克号为例构建第一个预测模型_第12张图片
以泰坦尼克号为例构建第一个预测模型_第13张图片
以泰坦尼克号为例构建第一个预测模型_第14张图片
以泰坦尼克号为例构建第一个预测模型_第15张图片
以泰坦尼克号为例构建第一个预测模型_第16张图片

你可能感兴趣的:(推荐系统)