当前位置:   article > 正文

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

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

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')
  • 1
  • 2
  • 3
  • 4
  • 5

有几点必须要说明一下,这块数据关系的分析我是将基本上有关系的属性都进行了一些分析,或许会有一些不严谨的地方和多余的分析,但主要是作为一篇笔记。如果不想看的可以跳过。
目前我的感悟是,这些图像分析是到用到的时候才会去写它们的代码,比如说补全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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

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

  • 分析有缺失值的属性和其他属性的关系,填补缺失值
  • 分析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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

在这里插入图片描述
生存情况的统计,三分之一左右的人幸存。
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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这里插入图片描述
大部分是三等舱,头等舱和二等舱相差不大。
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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在这里插入图片描述
男性的人数是女性的人数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关系')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

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

#年龄与生存的关系
S1=data_train.Age
S2=data_train.Surviveds
s1<
  • 1
  • 2
  • 3
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/237149
推荐阅读
相关标签
  

闽ICP备14008679号