用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

相关文章

浅析CSS 中z - index属性的作用及在什么情况下会失效

《浅析CSS中z-index属性的作用及在什么情况下会失效》z-index属性用于控制元素的堆叠顺序,值越大,元素越显示在上层,它需要元素具有定位属性(如relative、absolute、fi... 目录1. z-index 属性的作用2. z-index 失效的情况2.1 元素没有定位属性2.2 元素处

查看Oracle数据库中UNDO表空间的使用情况(最新推荐)

《查看Oracle数据库中UNDO表空间的使用情况(最新推荐)》Oracle数据库中查看UNDO表空间使用情况的4种方法:DBA_TABLESPACES和DBA_DATA_FILES提供基本信息,V$... 目录1. 通过 DBjavascriptA_TABLESPACES 和 DBA_DATA_FILES

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C

MySQL进阶之路索引失效的11种情况详析

《MySQL进阶之路索引失效的11种情况详析》:本文主要介绍MySQL查询优化中的11种常见情况,包括索引的使用和优化策略,通过这些策略,开发者可以显著提升查询性能,需要的朋友可以参考下... 目录前言图示1. 使用不等式操作符(!=, <, >)2. 使用 OR 连接多个条件3. 对索引字段进行计算操作4

【学习笔记】 陈强-机器学习-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