Kaggle泰坦尼克之灾:逻辑回归模型实现笔记(一)

这篇博客记录了作者初次尝试Kaggle泰坦尼克之灾数据分析项目的经历,主要使用逻辑回归模型。内容包括数据理解、数据预处理、特征工程和模型建立的过程。作者通过阅读他人文章学习,对数据进行了深入分析,如乘客等级、性别、年龄等与生存率的关系,并使用随机森林处理缺失值,进行特征因子化和数值缩放。最终在Kaggle上获得了0.766的准确率。
摘要由CSDN通过智能技术生成

1、引言

这是第一次写博客,作为一个刚刚上路的小白,要学的东西很多。本来很多笔记都是以文本的形式储存在本地的,但是很想尝试写一次博客。大学快一年了,学的东西不多,但也不少。不多是在整个专业知识来说的,看了许多大牛的经历,深深感觉到自己要走的路还长,而相对于大学目前要求的基本专业内容,也算是学了不少的东西。
这个是应实验室学长的要求完成的一个自学作业。说实话,一开始看这个kaggle题目,完全不知道它讲的是什么东西,然后通过查阅了许多资料,最后在寒小阳的《机器学习系列(3)_逻辑回归应用之Kaggle泰坦尼克之灾》这篇文章帮助下完成了这道题目的第一步。又受到简书上王树义老师的文章影响,最终决定尝试写一篇博客笔记,内容则是选择了我刚刚完成的kaggle的初体验题目:泰坦尼克之灾。
这篇博客主要是一个笔记,记录了泰坦尼克之灾的代码实现方法,实际上这个笔记还不能算完整,最后模型的优化还没有完成,但内心想完成这篇笔记的念头很重了。所以在完成了大纲的内容,和主要知识点的整理后,我便开始了这个笔记的填写。
这篇笔记中的代码实现框架采用是寒小阳先生的文章,如果有同学是和我一样刚刚接触机器学习的数据分析,作为学习的话,我建议是看寒小阳先生的文章。那篇文章要更加有趣,语言还是很幽默的。本文的内容主要是对寒小阳先生代码的重新实现,主要是有一些函数的使用方法不相同。因为这个是笔记类型的,所以有些地方或许没有很详细的表达。好了,那就不扯废话了。

2、kaggle泰坦尼克之灾的介绍

这是一道数据分析的入门题,很适合新手初步了解数据分析是什么东西,怎么实现的。不过数据分析不只是做到这个,它还有对文本情感的分析,图像数字识别等等,具有不同的方向,所以我还有好长的路要走。
kaggle链接
本题处理的数据集是泰坦尼克号上的乘客的基本信息,然后凭借这些数据的信息来判断这些乘客最后有没有幸存下来。这里采用的处理算法是逻辑回归,但事实上还有其他的算法也可以完成处理。可以参考scikit-learn提供的一张导图来选择合适的算法。在这里插入图片描述
关于逻辑回归,寒小阳先生有很详细的介绍,可以在下面的链接看到,我也重新附上了他实现这道题的链接:
《机器学习系列(1)_逻辑回归初步》,作者:寒小阳
《机器学习系列(2)_从初等数学视角解读逻辑回归》,作者:寒小阳
《机器学习系列(3)_逻辑回归应用之Kaggle泰坦尼克之灾》,作者:寒小阳

3、笔记

用到的函数

pandas包:
DataFrame(简写df)
pd.read_csv()
pd.get_dumines(data, prefix)
pd.concat(data, axis)
df.notnull()
df.isnull()
df.as_matrix()
df.loc()
df.drop(data, axis, inplace)
df.filter(regex)
df.index
df.sort_index()
df.sort_values()

matplotlib包
pyptlot包
这部分的函数见matplot的笔记(当然说我自己的笔记啦)
其中pandas提供了plt接口直接依据df数据绘制图像。
这个接口在某些情况下好像并不理想,比如bar图像的坐标的ticks横向,更改值容易造成数据错误。

numpy包:
np.astype()
np.int32()

sklearn包:
ensemble模块中的RandForestRegressor算法(简写rfr)
rfr.fit()
rfr.predict()
preprocessing模块中的StandardScaler()函数(简写scalar)
scalar.fit()
scalar.fit().transform()
linear_model模块中的LogisticRegression算法(简写clf)
clf.fit()
clf.predict()
把这些函数列出来的原因是收到我开头提到的那位王老师影响,王老师在一篇关于文本情感分析机器学习文章中是先让我们去了解需要用到的函数怎么用后再去尝试敲代码,我认为这样挺好,所以把所有用到的函数都列出来了,除了matplotlib包的,主要是有点多,便懒得整理了。
附上pandas和scikit-learn的官方手册:
pandas:http://pandas.pydata.org/pandas-docs/stable/reference/index.html
scikit-learn:https://scikit-learn.org/stable/glossary.html

第一步:了解数据

我认为处理数据前的第一步是了解数据,通过各种合理方便的手段了解数据的基本情况。如用excel查看csv文件中的数据,并依据kaggle里面的提示,我们会接触到以下数据:
Passengerld, Survived, Pclass, Name, Sex, Age, SibSp, Parch, Ticket, Fare, Cabin, Embarked。
整理到表格是这样的:

数据 训练集train.csv 测试集test.csv
Passengerld 乘客ID 作为唯一标识,总共有891个 作为唯一标识,总共有418个
Survived 幸存情况 0表示遇难,1表示幸存;无缺失值 最后预测对象,无本项数据
Pclass 乘客等级/船舱等级 1头等舱,2二等舱,3三等舱;无缺失值 1头等舱,2二等舱,3三等舱;无缺失值
Name 名字 无缺失值 Name 名字
Sex 性别 无缺失值 无缺失值
Age 年龄 共714个,有缺失值 共332个,有缺失值
SibSp 船上的兄妹/配偶数 无缺失值 无缺失值
Parch 船上的子女/父母数 无缺失值 无缺失值
Ticket 船票的编号 无缺失值 无缺失值
Fare 船票的费用 无缺失值 共417个,有缺失值
Cabin 船舱编号 共204个,有缺失值 共91个,有缺失值
Embarked 登船口 S、C、Q三个港口;共879,有缺失值 无缺失值

第二步:分析数据之间的关系

这里主要需要数据可视化的内容,这一步在单独的py文件中实现。
首先是将数据导入,然后建立一个专门的文件夹DF来存放可视化的图片和文件。

#引入pandas包
import pandas as pd
#导入数据
data_train = pd.read_csv(r"C:Users\87515\Desktop\train.csv")
data_train.describe().to_csv(r'DF\describe.csv')

有几点必须要说明一下,这块数据关系的分析我是将基本上有关系的属性都进行了一些分析,或许会有一些不严谨的地方和多余的分析,但主要是作为一篇笔记。如果不想看的可以跳过。
目前我的感悟是,这些图像分析是到用到的时候才会去写它们的代码,比如说补全Age的时候,我们需要判断哪些属性可以被用来作为特征。还有就是任何合理便捷的手段来认识这些数据应该都是可行的,只不过作为初学者,应该是通过matplotlb来认识数据,帮助我们了解数据分析。所以,不一定要和我一样去把这些数据全部分析个完,也不需要提前分析好所有数据。其实有些代码是我后来补上的,很多应该是在系统优化阶段准备的,只是我把它放在了这里罢了。
同时声明一下,其中个别代码是按照寒小阳先生的代码来写的。
1、通过describe来查看数据的一些基本信息。
在这里插入图片描述
生存率大概在38%,平均年龄在30,船票价格平均在32左右。
2、可视化分析
引入包,添加中文支持,我用的spyder需要添加这个中文支持

#可视化分析
import matplotlib.pyplot as plt

#中文支持
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

fig = plt.figure(figsize = (12,6))#这里针对不同的图片需要调整参数
fig.set(alpha = 0)
fig.set(dpi = 72)

数据分析主要目的是两个:

  • 分析有缺失值的属性和其他属性的关系,填补缺失值
  • 分析Survived和其他属性的关系

2.1、生存情况

#生存情况
data_train.Survived.value_counts().plot(kind = 'bar', width = .2)
plt.title('生存情况')
S = data_train.Survived.value_counts()
for index, y in enumerate(np.array(data_train.Survived.value_counts())):
    plt.text(index, y+20, '%d' % y, ha='center', va= 'top', size = 14)
plt.xticks(rotation = 0, size = 14)
plt.savefig('DF\生存情况')
#show要在savefig的后面
plt.show()

在这里插入图片描述
生存情况的统计,三分之一左右的人幸存。
2.2、乘客等级分布

S = data_train.Pclass
S.value_counts().plot(kind = 'bar', width = .2)
plt.title('乘客等级分布')
for index, y in enumerate(np.array(S.value_counts())):
   plt.text(index, y+20, '%d' % y, ha='center', va= 'top', size = 14)
plt.xticks(rotation = 0, size = 14)
plt.savefig('DF\乘客等级分布')
plt.show()

在这里插入图片描述
大部分是三等舱,头等舱和二等舱相差不大。
2.3、乘客性别统计

#乘客性别
S = data_train.Sex
S.value_counts().plot(kind = 'bar', width = .2)
plt.title('乘客性别')
for index, y in enumerate(np.array(S.value_counts())):
   plt.text(index, y+20, '%d' % y, ha='center', va= 'top', size = 14)
plt.xticks(rotation = 0, size = 14)
#plt.savefig('DF\乘客性别')
plt.show()

在这里插入图片描述
男性的人数是女性的人数2倍左右,结合电影剧情分析,女的应该比男的更容易幸存。
2.4、女&男和生存的关系

#Female&male与Survived关系
S1 = data_train.Sex
S2 = data_train.Survived

plt.subplot(1,2,1)
S1.value_counts().plot(kind='bar', color = 'g', width=.2, label='0')
plt.xticks(rotation = 0, size = 14)
plt.bar(range(0,2), S1[S2 == 1].value_counts(),color = 'b', width=.2,label='1')
plt.legend()
plt.title(r'Female&Male的Survived情况', size = 14)

plt.subplot(1,2,2)
S2.value_counts().plot(kind='bar', width=.2, color = 'g', label='Female')
plt.xticks(rotation = 0, size = 14)
plt.bar(range(0,2), S2[S1 == 'male'].value_counts(), color = 'b', width=.2, label='Male')
plt.legend()
plt.title('Survived的Female&Male情况')
plt.savefig(r'DF\Female&male与Survived关系')

在这里插入图片描述
女性比男性更容易幸存,幸存人数里面女性是男性的两倍多,所以性别Sex是一个主要特征。
2.5、年龄与生存的关系

#年龄与生存的关系
S1=data_train.Age
S2=data_train.Surviveds
s1=S1.value_counts().sort_index()
s2=S1[S2 == 0].value_counts().sort_index()
plt.bar
逻辑回归Kaggle泰坦尼克之灾竞赛中的应用主要是用于预测乘客是否幸存。在这个竞赛中,我们可以将乘客的特征(如性别、年龄、船票等级等)作为自变量,将乘客是否幸存作为因变量,通过训练逻辑回归模型来预测新乘客的生存情况。 以下是逻辑回归Kaggle泰坦尼克之灾竞赛中的一般步骤: 1. 数据探索和预处理:首先,我们需要对数据进行探索,了解各个特征的分布情况、缺失值情况等。然后,我们可以对缺失值进行填充、对分类变量进行编码等预处理操作。 2. 特征工程:根据对数据的理解和领域知识,我们可以进行特征工程,提取新的特征或者对原有特征进行组合,以提高模型的性能。 3. 数据划分:将数据集划分为训练集和测试集,通常采用交叉验证的方法进行模型选择和调参。 4. 模型训练:使用逻辑回归算法对训练集进行拟合,并根据模型评估指标(如准确率、精确率、召回率等)选择最佳模型。 5. 模型调参:可以通过网格搜索等方法对模型的超参数进行调优,以获得更好的性能。 6. 模型评估:使用测试集对训练好的模型进行评估,得到模型在未知数据上的性能指标。 7. 预测并提交结果:使用训练好的模型对新的数据进行预测,并将结果提交到Kaggle平台上进行评估和排名。 逻辑回归是一个简单而有效的分类算法,在泰坦尼克之灾竞赛中有着广泛的应用。但是要注意,逻辑回归并不是唯一可用的算法,根据数据集的性质和特点,我们也可以尝试其他的分类算法来提高预测性能。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值