用sklearn(scikit-learn)的LogisticRegression预测titanic生还情况(kaggle)

本文主要是介绍用sklearn(scikit-learn)的LogisticRegression预测titanic生还情况(kaggle),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

titanic, prediction using sklearn

after EDA, we can now preprocess the training data and learn a model to predict using scikit-learn (sklearn) ml library

做完上面的分析,可以选定几个特征进行使用,然后选择模型。

我们使用scikit-learn,这个框架对于基本的ml的method都有实现,方便使用,不需要自己from scratch编写代码。而且支持交叉验证。除非某些问题使用多层的dl神经网络更好,那么我们可以用tf或者theano等,如果传统机器学习方法可以解决,那么选择scikit-learn就可以。

import numpy as np
import pandas as pd
import seaborn as sns
from sklearn.linear_model import LogisticRegressionCV
from sklearn.preprocessing import StandardScaler
## 读取train和test数据,并进行预处理:填充空缺,str转int类型转换,以及尺度归一化
path = './titanic/'
trainset = pd.read_csv(path + 'train.csv')
testset = pd.read_csv(path + 'test.csv')
print '[*] trainset shape is : ' + str(trainset.shape)
print '[*] testset shape is : ' + str(testset.shape)
## 填充空缺与数据类型转换
## 训练集上:
trainset.loc[trainset.Sex == 'male','Sex'] = 0
trainset.loc[trainset.Sex == 'female','Sex'] = 1
trainset.loc[trainset.Embarked == 'S','Embarked'] = 1
trainset.loc[trainset.Embarked == 'C','Embarked'] = 2
trainset.loc[trainset.Embarked == 'Q','Embarked'] = 3
trainset.Age = trainset.Age.fillna(trainset.Age.median())
trainset.Sex = trainset.Sex.fillna(trainset.Sex.mode()[0])
trainset.Fare = trainset.Fare.fillna(trainset.Fare.mean())
trainset.Pclass = trainset.Pclass.fillna(trainset.Pclass.mode()[0])
trainset.Embarked = trainset.Embarked.fillna(trainset.Embarked.mode()[0])
## 测试集上:(由于iid假设,fillna用了训练集的数据的中位数或众数,因为训练集比较大。也可训练集测试集合起来的众数中位数)
testset.loc[testset.Sex == 'male','Sex'] = 0
testset.loc[testset.Sex == 'female','Sex'] = 1
testset.loc[testset.Embarked == 'S','Embarked'] = 1
testset.loc[testset.Embarked == 'C','Embarked'] = 2
testset.loc[testset.Embarked == 'Q','Embarked'] = 3
testset.Age = testset.Age.fillna(trainset.Age.median())
testset.Sex = testset.Sex.fillna(trainset.Sex.mode()[0])
testset.Fare = testset.Fare.fillna(trainset.Fare.mean())
testset.Pclass = testset.Pclass.fillna(trainset.Pclass.mode()[0])
testset.Embarked = testset.Embarked.fillna(trainset.Embarked.mode()[0])
## 用StandardScaler进行训练集和测试集的尺度变换
AgeScaler = StandardScaler().fit(trainset[['Age']])
FareScaler = StandardScaler().fit(trainset[['Fare']])
#print AgeScaler.mean_ , AgeScaler.scale_
#print FareScaler.mean_, FareScaler.scale_
trainset.Age = AgeScaler.transform(trainset[['Age']])
trainset.Fare = FareScaler.transform(trainset[['Fare']])
testset.Age = AgeScaler.transform(testset[['Age']])
testset.Fare = FareScaler.transform(testset[['Fare']])
## 选择特征做逻辑斯蒂回归
print('[*] Using Logistic Regression Model')
features = ['Pclass','Sex','Age','Fare','Embarked']
predlabel = ['Survived']
train_X = trainset[features]
train_Y = trainset[predlabel]
test_X = testset[features]
LogReg = LogisticRegressionCV(random_state=0)
LogReg.fit(train_X,train_Y)
test_Y_hat = LogReg.predict(test_X)
print('[*] prediction completed')
submission = pd.DataFrame(columns=['PassengerId','Survived'])
submission['PassengerId'] = range(892,1310)
submission['Survived'] = test_Y_hat
#trainset.head(10)
#pd.read_csv(path+'gender_submission.csv')
## 按照格式,存成不含index的csv文件。
submission.to_csv('./titanic/logreg_submission.csv',index=False)
print('[*] result saved')
print('[*] done')
[*] trainset shape is : (891, 12)
[*] testset shape is : (418, 11)
[*] Using Logistic Regression Model
[*] prediction completed
[*] result saved
[*] done

上面我们使用了LogisticRegressionCV, instead of 之前的LogisticRegression,相当于做了一次cross validation,实际上调参调整了C,也是就是正则项系数。这个改变提高了439个place的得分。

这里写图片描述

考虑加上SibSp和Parch这俩特征,看看有没有用:

import numpy as np
import pandas as pd
import seaborn as sns
from sklearn.linear_model import LogisticRegressionCV
from sklearn.preprocessing import StandardScaler
## 读取train和test数据,并进行预处理:填充空缺,str转int类型转换,以及尺度归一化
path = './titanic/'
trainset = pd.read_csv(path + 'train.csv')
testset = pd.read_csv(path + 'test.csv')
print '[*] trainset shape is : ' + str(trainset.shape)
print '[*] testset shape is : ' + str(testset.shape)
## 填充空缺与数据类型转换
## 训练集上:
trainset.loc[trainset.Sex == 'male','Sex'] = 0
trainset.loc[trainset.Sex == 'female','Sex'] = 1
trainset.loc[trainset.Embarked == 'S','Embarked'] = 1
trainset.loc[trainset.Embarked == 'C','Embarked'] = 2
trainset.loc[trainset.Embarked == 'Q','Embarked'] = 3
trainset.Age = trainset.Age.fillna(trainset.Age.median())
trainset.Sex = trainset.Sex.fillna(trainset.Sex.mode()[0])
trainset.Fare = trainset.Fare.fillna(trainset.Fare.mean())
trainset.Pclass = trainset.Pclass.fillna(trainset.Pclass.mode()[0])
trainset.Embarked = trainset.Embarked.fillna(trainset.Embarked.mode()[0])
trainset.SibSp = trainset.SibSp.fillna(trainset.SibSp.mode()[0])
trainset.Parch = trainset.Parch.fillna(trainset.Parch.mode()[0])
## 测试集上:(由于iid假设,fillna用了训练集的数据的中位数或众数,因为训练集比较大。也可训练集测试集合起来的众数中位数)
testset.loc[testset.Sex == 'male','Sex'] = 0
testset.loc[testset.Sex == 'female','Sex'] = 1
testset.loc[testset.Embarked == 'S','Embarked'] = 1
testset.loc[testset.Embarked == 'C','Embarked'] = 2
testset.loc[testset.Embarked == 'Q','Embarked'] = 3
testset.Age = testset.Age.fillna(trainset.Age.median())
testset.Sex = testset.Sex.fillna(trainset.Sex.mode()[0])
testset.Fare = testset.Fare.fillna(trainset.Fare.mean())
testset.Pclass = testset.Pclass.fillna(trainset.Pclass.mode()[0])
testset.Embarked = testset.Embarked.fillna(trainset.Embarked.mode()[0])
testset.SibSp = testset.SibSp.fillna(trainset.SibSp.mode()[0])
testset.Parch = testset.Parch.fillna(trainset.Parch.mode()[0])
## 用StandardScaler进行训练集和测试集的尺度变换
AgeScaler = StandardScaler().fit(trainset[['Age']])
FareScaler = StandardScaler().fit(trainset[['Fare']])
#print AgeScaler.mean_ , AgeScaler.scale_
#print FareScaler.mean_, FareScaler.scale_
trainset.Age = AgeScaler.transform(trainset[['Age']])
trainset.Fare = FareScaler.transform(trainset[['Fare']])
testset.Age = AgeScaler.transform(testset[['Age']])
testset.Fare = FareScaler.transform(testset[['Fare']])
## 选择特征做逻辑斯蒂回归
print('[*] Using Logistic Regression Model')
features = ['Pclass','Sex','Age','Fare','Embarked','SibSp','Parch']
predlabel = ['Survived']
train_X = trainset[features]
train_Y = trainset[predlabel]
test_X = testset[features]
LogReg = LogisticRegressionCV(random_state=0)
LogReg.fit(train_X,train_Y)
test_Y_hat = LogReg.predict(test_X)
print('[*] prediction completed')
submission = pd.DataFrame(columns=['PassengerId','Survived'])
submission['PassengerId'] = range(892,1310)
submission['Survived'] = test_Y_hat
#trainset.head(10)
#pd.read_csv(path+'gender_submission.csv')
## 按照格式,存成不含index的csv文件。
submission.to_csv('./titanic/logreg_submission.csv',index=False)
print('[*] result saved')
print('[*] done')
[*] trainset shape is : (891, 12)
[*] testset shape is : (418, 11)
[*] Using Logistic Regression Model
[*] prediction completed
[*] result saved
[*] done

这里写图片描述

果然可以提高一点。在之前分析的感觉没多少相关性的特征通过logistic Regression算法以后也可以提高分类准确率。另外,还可以通过考虑Name中的头衔,以及舱位编号(可以参考titanic的船体结构图)等等,来提高分类准确率。另外也可以换其他模型,并采用Ensemble集成。由于希望将这个problem仅仅作为toy problem用来熟悉环境和方法,所以不再进行进一步的探究,可以在实际问题中投入较多的时间进行不同模型选择以及cross validation和ensemble来提高模型效率。

2018年02月23日18:01:36
我们之所以冒险,正是因为上帝给了我们这副臭皮囊,而非不顾生命。 —— 斯蒂芬 金

最后还是用了个随机森林试一试,发现效果很明显呀

这里写图片描述

看来还是要多试试几个模型,以及调参数。

这篇关于用sklearn(scikit-learn)的LogisticRegression预测titanic生还情况(kaggle)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/836851

相关文章

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

如何保证android程序进程不到万不得已的情况下,不会被结束

最近,做一个调用系统自带相机的那么一个功能,遇到的坑,在此记录一下。 设备:红米note4 问题起因 因为自定义的相机,很难满足客户的所有需要,比如:自拍杆的支持,优化方面等等。这些方面自定义的相机都不比系统自带的好,因为有些系统都是商家定制的,难免会出现一个奇葩的问题。比如:你在这款手机上运行,无任何问题,然而你换一款手机后,问题就出现了。 比如:小米的红米系列,你启用系统自带拍照功能后

Windows11电脑上自带的画图软件修改照片大小(不裁剪尺寸的情况下)

针对一张图片,有时候上传的图片有大小限制,那么在这种情况下如何修改其大小呢,在不裁剪尺寸的情况下 步骤如下: 1.选定一张图片,右击->打开方式->画图,如下: 第二步:打开图片后,我们可以看到图片的大小为82.1kb,点击上面工具栏的“重设大小和倾斜”进行调整,如下: 第三步:修改水平和垂直的数字,此处我修改为分别都修改为50,然后保存,可以看到大小变成63.5kb,如下:

Learn ComputeShader 09 Night version lenses

这次将要制作一个类似夜视仪的效果 第一步就是要降低图像的分辨率, 这只需要将id.xy除上一个数字然后再乘上这个数字 可以根据下图理解,很明显通过这个操作在多个像素显示了相同的颜色,并且很多像素颜色被丢失了,自然就会有降低分辨率的效果 效果: 但是这样图像太锐利了,我们加入噪声去解决这个问题 [numthreads(8, 8, 1)]void CSMain(uint3 id

kaggle竞赛宝典 | Mamba模型综述!

本文来源公众号“kaggle竞赛宝典”,仅用于学术分享,侵权删,干货满满。 原文链接:Mamba模型综述! 型语言模型(LLMs),成为深度学习的基石。尽管取得了令人瞩目的成就,Transformers仍面临固有的局限性,尤其是在推理时,由于注意力计算的平方复杂度,导致推理过程耗时较长。 最近,一种名为Mamba的新型架构应运而生,其灵感源自经典的状态空间模型,成为构建基础模型的有力替代方案

postgres数据库中如何看查询是否走索引,以及在什么情况下走索引

在 PostgreSQL 中,可以通过 EXPLAIN 或 EXPLAIN ANALYZE 查看查询计划,以判断查询是否使用了索引。除此之外,了解索引的使用条件对于优化查询性能也很重要。 1. 如何查看查询是否使用索引 使用 EXPLAIN 查看查询计划 EXPLAIN 显示 PostgreSQL 如何执行查询,包括是否使用索引。 EXPLAIN SELECT * FROM users WH

Tensorflow lstm实现的小说撰写预测

最近,在研究深度学习方面的知识,结合Tensorflow,完成了基于lstm的小说预测程序demo。 lstm是改进的RNN,具有长期记忆功能,相对于RNN,增加了多个门来控制输入与输出。原理方面的知识网上很多,在此,我只是将我短暂学习的tensorflow写一个预测小说的demo,如果有错误,还望大家指出。 1、将小说进行分词,去除空格,建立词汇表与id的字典,生成初始输入模型的x与y d

linux 查看内存使用情况

Linux查看CPU和内存使用情况:http://www.cnblogs.com/xd502djj/archive/2011/03/01/1968041.html 在做Linux系统优化的时候,物理内存是其中最重要的一方面。自然的,Linux也提供了非常多的方法来监控宝贵的内存资源的使用情况。下面的清单详细的列出了Linux系统下通过视图工具或命令行来查看内存使用情况的各种方法。 1. /pr

临床基础两手抓!这个12+神经网络模型太贪了,免疫治疗预测、通路重要性、基因重要性、通路交互作用性全部拿下!

生信碱移 IRnet介绍 用于预测病人免疫治疗反应类型的生物过程嵌入神经网络,提供通路、通路交互、基因重要性的多重可解释性评估。 临床实践中常常遇到许多复杂的问题,常见的两种是: 二分类或多分类:预测患者对治疗有无耐受(二分类)、判断患者的疾病分级(多分类); 连续数值的预测:预测癌症病人的风险、预测患者的白细胞数值水平; 尽管传统的机器学习提供了高效的建模预测与初步的特征重

ubuntu内存资源使用情况监视

此处分享一个可以查看ubuntu系统中资源使用情况的指令,只需要在终端中输入一下这条指令即可: gnome-system-monitor