机器学习 - 船员数据分析

样本数据

PassengerId,Survived,Pclass,Name,Sex,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked
1,0,3,"Braund, Mr. Owen Harris",male,22,1,0,A/5 21171,7.25,,S
2,1,1,"Cumings, Mrs. John Bradley (Florence Briggs Thayer)",female,38,1,0,PC 17599,71.2833,C85,C
3,1,3,"Heikkinen, Miss. Laina",female,26,0,0,STON/O2. 3101282,7.925,,S
4,1,1,"Futrelle, Mrs. Jacques Heath (Lily May Peel)",female,35,1,0,113803,53.1,C123,S
5,0,3,"Allen, Mr. William Henry",male,35,0,0,373450,8.05,,S
6,0,3,"Moran, Mr. James",male,,0,0,330877,8.4583,,Q
7,0,1,"McCarthy, Mr. Timothy J",male,54,0,0,17463,51.8625,E46,S
8,0,3,"Palsson, Master. Gosta Leonard",male,2,3,1,349909,21.075,,S
9,1,3,"Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)",female,27,0,2,347742,11.1333,,S
10,1,2,"Nasser, Mrs. Nicholas (Adele Achem)",female,14,1,0,237736,30.0708,,C
11,1,3,"Sandstrom, Miss. Marguerite Rut",female,4,1,1,PP 9549,16.7,G6,S
12,1,1,"Bonnell, Miss. Elizabeth",female,58,0,0,113783,26.55,C103,S
13,0,3,"Saundercock, Mr. William Henry",male,20,0,0,A/5. 2151,8.05,,S
14,0,3,"Andersson, Mr. Anders Johan",male,39,1,5,347082,31.275,,S
15,0,3,"Vestrom, Miss. Hulda Amanda Adolfina",female,14,0,0,350406,7.8542,,S
16,1,2,"Hewlett, Mrs. (Mary D Kingcome) ",female,55,0,0,248706,16,,S
17,0,3,"Rice, Master. Eugene",male,2,4,1,382652,29.125,,Q
18,1,2,"Williams, Mr. Charles Eugene",male,,0,0,244373,13,,S

特征数据分析

人为分析

PassengerId  编号, 没啥意义

Survived  是否获救 (预测结果)

Pclass  船舱等级 -- > 等级越好越大?

Name  姓名 -- > 名字越长越大? 玄学 (贵族名字长? 获救几率大?)

Sex  性别  -- > 女性更大几率?

Age  年龄 -- >  青壮年更大几率?

SibSp  兄弟姐妹数量 -- > 亲人越多越大 ?

Parch  老人孩子数量 -- >  越多越小?

Ticket  票编号 -- > 越大越高? 玄学 (票头排列和船舱有关也有可能?)

Fare  票价 -- > 越贵越大?

Cabin  住舱编号 -- >  这列数据缺失值很多, 以及表达意义..? (可能靠近夹板位置容易获救?)

Embarked  上站点 -- > 不同的站点的人体格不一样? 运气不一样? 玄学

数据分析

以上都是简单的人为猜测, 用 py代码进行所有特征数据的详细数学统计信息展示

总数 / 平均值 / 标准差 / 最小 / 四分之一数 / 众数 / 四分之三数 / 最大值

代码

import pandas #ipython notebook
titanic = pandas.read_csv("titanic_train.csv")
# titanic.head(5)
print (titanic.describe())
       PassengerId    Survived      Pclass         Age       SibSp  count   891.000000  891.000000  891.000000  714.000000  891.000000
mean    446.000000    0.383838    2.308642   29.699118    0.523008
std     257.353842    0.486592    0.836071   14.526497    1.102743
min       1.000000    0.000000    1.000000    0.420000    0.000000
25%     223.500000    0.000000    2.000000   20.125000    0.000000
50%     446.000000    0.000000    3.000000   28.000000    0.000000
75%     668.500000    1.000000    3.000000   38.000000    1.000000
max     891.000000    1.000000    3.000000   80.000000    8.000000   

            Parch        Fare
count  891.000000  891.000000
mean     0.381594   32.204208
std      0.806057   49.693429
min      0.000000    0.000000
25%      0.000000    7.910400
50%      0.000000   14.454200
75%      0.000000   31.000000
max      6.000000  512.329200

数据预处理

缺失填充

分析

总数据行数为 891 行, 而 age 只有 714 行存在数据缺失

age 的指标在我们的人为分析中是较为重要的指标, 因此不能忽略的

需要进行缺失数据的填充

代码

这里使用均值进行填充

函数方法  .fillna()  为空数据填充 , 参数为填充数据

.median()  为平均值计算

titanic["Age"] = titanic["Age"].fillna(titanic["Age"].median())
print (titanic.describe())
       PassengerId    Survived      Pclass         Age       SibSp  count   891.000000  891.000000  891.000000  891.000000  891.000000
mean    446.000000    0.383838    2.308642   29.361582    0.523008
std     257.353842    0.486592    0.836071   13.019697    1.102743
min       1.000000    0.000000    1.000000    0.420000    0.000000
25%     223.500000    0.000000    2.000000   22.000000    0.000000
50%     446.000000    0.000000    3.000000   28.000000    0.000000
75%     668.500000    1.000000    3.000000   35.000000    1.000000
max     891.000000    1.000000    3.000000   80.000000    8.000000   

            Parch        Fare
count  891.000000  891.000000
mean     0.381594   32.204208
std      0.806057   49.693429
min      0.000000    0.000000
25%      0.000000    7.910400
50%      0.000000   14.454200
75%      0.000000   31.000000
max      6.000000  512.329200

字符串转化数组处理

分析

性别这里的数据填充为  [‘male‘ ‘female‘]

这里出现的可能性只有两种, Py对非数值得数据进行数据分析兼容性很不友好

这里需要转换成数字更容易处理, 同理此分析适用于  Embarked  也是相同的处理方式

但是  Embarked  还存在缺失值的问题, 这里就没办法用均值了, 但是可以使用众数, 即最多的来填充

代码

print titanic["Sex"].unique() # [‘male‘ ‘female‘]

# Replace all the occurences of male with the number 0.
titanic.loc[titanic["Sex"] == "male", "Sex"] = 0
titanic.loc[titanic["Sex"] == "female", "Sex"] = 1
print( titanic["Embarked"].unique()) # [‘S‘ ‘C‘ ‘Q‘ nan]
titanic["Embarked"] = titanic["Embarked"].fillna(‘S‘)
titanic.loc[titanic["Embarked"] == "S", "Embarked"] = 0
titanic.loc[titanic["Embarked"] == "C", "Embarked"] = 1
titanic.loc[titanic["Embarked"] == "Q", "Embarked"] = 2

线性回归

一上来还是用最简单的方式逻辑回归来实现预测模型

模块

线性回归模块  LinearRegression  以及数据集划分交叉验证的模块  KFold

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import KFold

代码

线性回归 / 交叉验证

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import KFold

# 预备选择的特征
predictors = ["Pclass", "Sex", "Age", "SibSp", "Parch", "Fare", "Embarked"]

# 线性回归模型实例化
alg = LinearRegression()
# 交叉验证实例化, 划分三份, 随机打乱种子为 0
kf = KFold(n_splits=3, shuffle=False, random_state=0)

predictions = []

# 交叉验证划分训练集测试集, 对每一份进行循环
for train, test in kf.split(titanic):
    # 拿到训练数据 (仅特征值列)
    train_predictors = (titanic[predictors].iloc[train,:])
    # 拿到训练数据的目标 (仅目标值列)
    train_target = titanic["Survived"].iloc[train]
    # 训练线性回归
    alg.fit(train_predictors, train_target)
    # 在测试集上进行预测
    test_predictions = alg.predict(titanic[predictors].iloc[test,:])
    predictions.append(test_predictions)

计算准确率

最后得出的结果其实就是是否获救的二分类问题, 按照分类是否大于 0.5进行判定

import numpy as np

predictions = np.concatenate(predictions, axis=0)

predictions[predictions > .5] = 1
predictions[predictions <=.5] = 0
accuracy = sum(predictions==titanic[‘Survived‘])/len(predictions)
print(accuracy)  # 0.7833894500561167

最终结果为 0.78 不算高

逻辑回归

对于想要一个概率值得情况可以使用逻辑回归

from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression

# 实例化, 指定 solver 避免警告提示
alg = LogisticRegression(solver="liblinear",random_state=1)

scores = cross_val_score(alg, titanic[predictors], titanic["Survived"], cv=3)

print(scores.mean())
0.7878787878787877

逻辑回归的结果也差不多少

原文地址:https://www.cnblogs.com/shijieli/p/11806993.html

时间: 2024-08-30 11:38:36

机器学习 - 船员数据分析的相关文章

Spark 项目实战企业级,源码深度剖析,机器学习,数据分析

同学们在学习Spark Steaming的过程中,可能缺乏一个练手的项目,这次通过一个有实际背景的小项目,把学过的Spark Steaming.Hbase.Kafka都串起来. 1. 项目介绍 1.1 项目流程 Spark Streaming读取kafka数据源发来的json格式的数据流,在批次内完成数据的清洗和过滤,再从HBase读取补充数据,拼接成新的json字符串写进下游kafka. 1.2 项目详解 2. 环境准备 2.1 组件安装 首先需要安装必要的大数据组件,安装的版本信息如下: S

高端实战 Python数据分析与机器学习实战 Numpy/Pandas/Matplotlib等常用库

课程简介:? ? 课程风格通俗易懂,真实案例实战.精心挑选真实的数据集为案例,通过Python数据科学库numpy,pandas,matplot结合机器学习库scikit-learn完成一些列的机器学习案例.课程以实战为基础,所有课时都结合代码演示如何使用这些python库来完成一个真实的数据案例.算法与项目相结合,选择经典kaggle项目,从数据预处理开始一步步代码实战带大家快速入门机器学习.旨在帮助同学们快速上手如何使用python库来完整机器学习案例. ------------------

从机器学习到学习的机器,数据分析算法也需要好管家

(上图为IBM大数据与分析事业部全球研发副总裁Dinesh Nirmal) 今年是莎士比亚逝世四百周年.在莎翁名剧<尤利乌斯·凯撒>中一个占卜师有这样一句没有上下文的预言:"请小心'三月'中", 凯撒听后不知道这句话是何意思,于是说让这个占卜师继续做梦吧.结果在三月十五日,凯撒被密谋暗杀.类似的,今天的预测算法可以告诉你一个预言,但却无法提供合适的上下文,这让人难以做出进一步行动的决策. 另一个关于预测算法的例子是在最新的<复仇者联盟3>中,出现了一个人工智能合

机器学习实践指南:案例应用解析

试读及购买链接 <机器学习实践指南:案例应用解析>是机器学习及数据分析领域不可多得的一本著作,也是为数不多的既有大量实践应用案例又包括算法理论剖析的著作,作者针对机器学习算法既抽象复杂又涉及多门数学学科的特点,力求理论联系实际,始终以算法应用为主线,由浅入深以全新的角度诠释机器学习. 前 言第一部分 准备篇第1章 机器学习发展及应用前景 21.1 机器学习概述 21.1.1 什么是机器学习 31.1.2 机器学习的发展 31.1.3 机器学习的未来 41.2 机器学习应用前景 51.2.1 数

【转载】机器学习头条 2015-01-11

机器学习头条 2015-01-11 2015年1月12日 09:41 机器学习头条 2015-01-11 机器学习速查手册 Elements of machine learning @爱可可-爱生活 Python 实现的随机森林 @机器学习的那个男人 88页的深度学习文献综述和索引 @我爱机器学习 机器学习中的相似性度量方法汇总 @数盟社区 <Data Science at the Command Line> @爱可可-爱生活 内容更丰富,链接可点击的加长版见 http://memect.co

优达学城机器学习工程师纳米学位项目介绍

本文由 meelo 原创,请务必以链接形式注明 本文地址,简书同步更新地址 一对一的项目辅导是优达学城(udacity)纳米学位的一大亮点.本文将简要介绍优达学城机器学习工程师纳米学位的6个项目.项目覆盖了机器学习的主要领域,包括回归分析.分类.聚类.增强学习及深度学习. 项目 0: 预测泰坦尼克号乘客生还率 这个项目需要你手动地实现一个简单的机器学习模型——决策树.1912年泰坦尼克号在第一次航行中与冰山碰撞沉没,泰坦尼克号乘客生还数据集记录了之中891个乘客的性别.年龄.社会阶级.配偶数量等

机器学习资料与攻略超强整理吐血推荐(二)

在前文<机器学习资料与攻略超强整理吐血推荐(一)>中,我们讲到要进入人工智能的圈子,数学是不可逾越的第一关,然后我们又推荐了一些你必须掌握的数学方面的资料.接下来,在这一篇中,我们将介绍关于机器学习的理论与工具方面的资料. 二.工具篇 工欲善其事,必先利其器.大数据时代,人工智能的工具趋势是显而易见且确定无疑的.作为一名数据科学家,其实你可以选择的工具非常多,其实随着时代的发展和技术的演进,传统的SPSS.STATA和SAS等这些老牌数据分析工具都已经集成了机器学习和数据挖掘的模块.当然,这不

初识机器学习

翻开周志华老师的<机器学习>这本书,摘自绪论这段话:机器学习正是这样的一门学科,它致力于研究如何通过计算的手段,利用经验来改善系统自身的性能.而在计算机系统当中,"经验"就是以"数据"的形式存在,所以,机器学习所研究的主要内容是:关于在计算机上从数据中产生"模型"的算法,即"学习算法". 要进行机器学习,首先要有数据,数据的集合称为数据集,而其中每条记录是关于一个事件或对象的描述,称为一个"示例"

TMF大数据分析指南 Unleashing Business Value in Big Data

大数据分析指南 TMF Frameworx最佳实践 Unleashing Business Value in Big Data 前言 此文节选自TMF Big Data Analytics Guidebook. TMF文档版权信息  Copyright © TeleManagement Forum 2013. All Rights Reserved. This document and translations of it may be copied and furnished to other