Titanic数据集分析
- 格式:docx
- 大小:239.80 KB
- 文档页数:20
Titanic dataset(泰坦尼克号数据集)数据摘要:The titanic dataset gives the values of four categorical attributes for each of the 2201 people on board the Titanic when it struck an iceberg and sank. The attributes are social class (first class, second class, third class, crewmember), age (adult or child), sex, and whether or not the person survived.中文关键词:机器学习,泰坦尼克号,2201人,社会地位,DEL VE,英文关键词:Machine learning,Titanic,2201 people,Social class,DELVE,数据格式:TEXT数据用途:The data can be used for Machine Learning, Classification and Evaluating Learning.数据详细介绍:Titanic dataset∙AbstractThe titanic dataset gives the values of four categorical attributes for each of the 2201 people on board the Titanic when it struck an iceberg and sank. The attributes are social class (first class, second class, third class, crewmember), age (adult or child), sex, and whether or not the person survived.∙Data DescriptionOrigin: naturalUsage: assessmentNumber of attributes: 4Number of cases: 2,201Number of prototasks: 1Number of methods run on this dataset: 3Contributed by: Radford NealReference数据预览:点此下载完整数据集。
Titanic数据分析与可视化同步转载⾄个⼈公众号:R语⾔学习同步转载⾄个⼈知乎专栏:R语⾔可视化进阶泰坦尼克沉船事故已经过去多年,但是关于它的⽣存预测问题⼀直是数据分析与建模的经典案例,今天抽空把ChuckTalbert⼤师做的预测进⾏简单翻译和再现,并加⼊个⼈理解,原⽂链接: [ Titanic: A TidyCaret Approach -(0.8086)开始数据分析与建模之前,我们⼀起看看Titanic数据集字段介绍:PassengerId:乘客ID编号Survived:是否存活,0-未存活,1-存活Pclass:船舱号,共1,2,3类舱Name:乘客姓名Sex:乘客性别,Male,FemaleAge:乘客年龄SibSp:兄弟姐妹/配偶数量,0~8Parch:⽗母/⼦⼥数量,0~6Ticket:船票编号Fare:票价Cabin:舱位编号Embarked:登陆⼝岸,C、Q、S原数据共12个字段,分为train集和test集.1、进⾏数据读⼊⼯作,并简要了解数据结构概况setwd("E:/R/Kaggle/泰坦尼克")train <- read.csv("train.csv",stringsAsFactors = FALSE)#读取训练数据dim(train)#查看数据维度(⾏数x列数)#[1] 891 12test <- read.csv("test.csv",stringsAsFactors = FALSE)#读取测试数据test$Survived <- NA#向test集新增字段Survived并设置为空值titanicCombo<- rbind(train,test)#合并训练集与测试集dim(titanicCombo)#查看数据维度(⾏数x列数)#[1] 1309 12str(titanicCombo)#查看合并数据结构'data.frame': 1309 obs. of 12 variables:$ PassengerId: int 1 2 3 4 5 6 7 8 9 10 ...$ Survived : int 0 1 1 1 0 0 0 0 1 1 ...$ Pclass : int 3 1 3 1 3 3 1 3 3 2 ...$ Name : chr "Braund, Mr. Owen Harris""Cumings, Mrs. John Bradley (Florence Briggs Thayer)""Heikkinen, Miss. Laina" "Futrelle, Mrs. Jacques Heath (Lily MayPeel)" ... $ Sex : chr "male" "female" "female""female" ...$ Age : num 22 38 26 35 35 NA 54 2 27 14 ...$ SibSp : int 1 1 0 1 0 0 0 3 0 1 ...$ Parch : int 0 0 0 0 0 0 0 1 2 0 ...$ Ticket : chr "A/5 21171" "PC 17599""STON/O2. 3101282" "113803" ...$ Fare : num 7.25 71.28 7.92 53.1 8.05 ...$ Cabin : chr "" "C85" """C123" ...$ Embarked : chr "S" "C" "S""S" ...2、查看数据缺失情况colSums(is.na(titanicCombo[1:891,]))#计算每列数据缺失个数# PassengerId Survived Pclass Name Sex Age# 0 0 0 0 0 177# SibSp Parch Ticket Fare Cabin Embarked# 0 0 0 0 687 2#计算每列数据缺失率,值保留3位⼩数round(colSums(100*(is.na(titanicCombo[1:891,])/nrow(titanicCombo[1:891,]))),3)# PassengerId Survived Pclass Name Sex Age# 0.000 0.000 0.000 0.000 0.000 19.865# SibSp Parch Ticket Fare Cabin Embarked# 0.000 0.000 0.000 0.000 77.104 0.2243、数据预处理将Survived、Pclass、Sex、Embarked 、Cabin等字段转为因⼦型,且更改Cabin值。
matlab数据挖掘泰坦尼克号实验体会数据挖掘是一种从大量数据中挖掘出有用信息和洞察的技术。
在这个实验中,我们使用了Matlab工具进行数据挖掘,并以泰坦尼克号数据集作为实验对象。
通过这个实验,我收获了许多关于数据挖掘的知识和经验,以下是我的体会和心得。
首先,准备工作是非常重要的。
在开始实验之前,我们需要了解数据集的背景和特点,清洗和预处理数据是必不可少的。
在本实验中,我们需要对泰坦尼克号数据集进行数据清洗,包括处理缺失值、异常值和重复值等。
同时,了解数据集中各个属性的含义和类型,对后续的分析和建模有很大的帮助。
其次,特征工程是数据挖掘的关键步骤。
特征工程是指从原始数据中提取和选择有意义的特征,以便于建立合适的模型。
在本实验中,我们需要对泰坦尼克号数据集中的各个属性进行分析和处理,例如将分类变量进行独热编码、对连续变量进行离散化等。
通过特征工程,我们可以提高模型的精度和效果。
第三,选择合适的算法是至关重要的。
在数据挖掘中,有许多不同的算法可以用于建模和预测。
根据问题类型和数据特点,选择合适的算法是非常重要的。
在本实验中,我们使用了Logistic回归和决策树算法进行建模和预测。
通过比较不同算法的预测效果,我们可以选择最合适的算法来解决问题。
第四,模型评估和优化是不可忽视的步骤。
在建立模型之后,我们需要对模型进行评估和优化,以确定模型的好坏和改进空间。
在本实验中,我们使用了混淆矩阵、准确率、召回率等指标对模型进行评估。
同时,我们也进行了模型的参数优化,以提高模型的预测效果。
最后,数据挖掘过程是一个迭代的过程。
在整个实验过程中,我们可能会遇到多个挑战和问题,需要不断地进行调整和改进。
这就要求我们具备耐心和灵活性,以适应不断变化的需求和条件。
只有不断地迭代和优化,我们才能最终得到满意的结果。
通过这个实验,我不仅学到了许多关于数据挖掘的知识和方法,还学到了解决实际问题的思维方式和技巧。
数据挖掘是一项重要的技术,在各个领域都有广泛的应用。
田纳西伊斯曼数据集故障特征选择方法一、概述在工程和科学领域,数据挖掘和故障诊断是非常重要的工作。
而在进行故障诊断时,选择合适的特征对于准确性和效率至关重要。
田纳西伊斯曼数据集(Tennessee Eastman Process)是一个广泛应用于故障诊断研究和实验的数据集,本文将围绕田纳西伊斯曼数据集展开,探讨故障特征选择方法。
二、田纳西伊斯曼数据集简介田纳西伊斯曼数据集是由田纳西东曼(Eastman)化工公司提供的一个用于过程监控和故障诊断的标准测试数据集。
该数据集包含了不同操作条件下的过程变量,以及对应的正常和故障状态。
研究人员可以利用这些数据进行模型构建和算法验证,以提高故障诊断的准确性和可靠性。
三、故障特征选择方法1. 统计分析法统计分析是最常用的特征选择方法之一。
通过计算各个特征的均值、方差、相关系数等统计指标,来评估各个特征对于故障诊断的重要性。
在田纳西伊斯曼数据集中,可以利用统计分析方法来筛选出与故障状态相关性较高的特征,从而优化模型的输入特征。
2. 主成分分析法主成分分析(PCA)是一种常用的降维方法,也可以用于故障特征选择。
通过PCA可以将原始的高维特征空间转换为低维的主成分空间,找出能够最大程度区分正常状态和故障状态的主成分特征。
在田纳西伊斯曼数据集中,应用PCA方法可以帮助提取最具代表性的特征,提高故障诊断的精度和效率。
3. 信息增益法信息增益是一种基于信息论的特征选择方法,它可以通过计算特征对于故障状态的信息增益来评估特征的重要性。
在田纳西伊斯曼数据集中,可以利用信息增益法来筛选出对于故障诊断最具区分度的特征,提高模型的鲁棒性和泛化能力。
四、个人观点和总结故障特征选择对于提高故障诊断的准确性和效率非常重要。
在处理田纳西伊斯曼数据集时,可以结合统计分析、主成分分析和信息增益等方法,选取最具代表性和区分度的特征,构建高效的故障诊断模型。
我个人认为在选择特征时,要注重深度和广度的兼具,不仅要考虑特征的单一指标,还要综合考虑特征之间的相关性和交互影响,以获得更全面、准确的故障诊断结果。
python数据预处理titanic 异常值处理-回复Python数据预处理Titanic 异常值处理引言:数据预处理是机器学习和数据分析中非常重要的一步,它涉及到数据的清洗、转换和集成,以确保数据的质量和可用性。
异常值是数据中与其他观测结果明显不同的观测结果,可能会影响机器学习算法的性能和预测能力。
在本文中,我们将使用Python 对Titanic 数据集中的异常值进行处理。
步骤一:导入所需的库和数据集首先,我们需要导入pandas 和numpy 库,以及Titanic 数据集。
pandas 是一个用于数据分析和操作的强大库,而numpy 是一个用于科学计算的库。
Titanic 数据集是一个常用的数据集,其中包含了Titanic 号船上乘客的各种信息。
pythonimport pandas as pdimport numpy as np# 导入数据集data = pd.read_csv('titanic.csv')步骤二:观察数据集我们需要先观察数据集,查看是否存在异常值。
我们可以使用head() 方法查看数据集的前几行,使用describe() 方法查看数据的统计摘要信息。
python# 查看前几行数据data.head()# 查看数据的统计摘要信息data.describe()步骤三:寻找异常值通过观察数据集的统计摘要信息,我们可以寻找可能存在的异常值。
通常,我们关注数值型特征的最大值和最小值,以及离群点。
例如,在Titanic 数据集中,特征"Age" 表示乘客的年龄。
我们可以通过查看该特征的最大值和最小值,来判断是否存在异常值。
python# 查找"Age" 特征中的异常值max_age = data['Age'].max()min_age = data['Age'].min()print("最大年龄:", max_age)print("最小年龄:", min_age)步骤四:处理异常值一旦我们找到了异常值,我们需要决定如何处理它们。
基于机器学习的泰坦尼克号生存预测研究泰坦尼克号是历史上最具有代表性的沉船事件之一。
1912年4月15日,泰坦尼克号在首航途中与冰山相撞,造成了1500多人的伤亡。
这场灾难引起了全球的关注,并成为了许多研究的对象。
在这个任务中,我们将使用机器学习算法来预测乘客的生存情况。
泰坦尼克号的船上有各个年龄段和不同社会阶层的乘客。
在这个数据集中,我们可以获得乘客的一些基本信息,如性别、年龄、船票等级等。
这些信息可以帮助我们预测乘客是否幸存下来。
首先,我们需要载入数据并进行初步的数据清洗和预处理。
我们将在Python编程环境中使用一些常用的机器学习库,如pandas和scikit-learn。
接下来,我们将通过探索性数据分析(EDA)来理解数据的特征和分布。
我们可以绘制不同特征的直方图、箱线图和散点图,以寻找任何与生存率相关的趋势或模式。
例如,我们可以比较男性和女性乘客的生存率,观察不同船票等级的乘客的存活情况等。
在进行特征工程之前,我们还需要处理一些缺失值。
我们可以使用均值、中位数或众数等方法填充缺失的年龄数据,或者使用一个机器学习模型来预测缺失的年龄。
接下来,我们将选择合适的特征并对其进行编码。
在这个任务中,性别、船票等级和登船港口可能是重要的特征。
我们可以将性别编码成二进制变量,船票等级编码成分类变量,并对登船港口使用独热编码。
然后,我们将划分训练集和测试集。
训练集将用于建立机器学习模型,而测试集将用于评估模型的性能。
我们可以使用交叉验证来选择合适的模型和调整超参数。
在选择模型时,我们可以尝试不同的机器学习算法,如逻辑回归、决策树、随机森林等。
我们还可以使用集成学习方法,如提升树和随机森林,来提高预测的准确性。
最后,我们将使用选择的模型进行预测。
我们可以将测试集输入到模型中,以预测乘客的生存情况。
评估模型的性能可以使用准确率、召回率、F1得分等指标。
为了进一步提高预测的准确性,我们还可以尝试其他的特征选择、特征提取和模型优化方法。
一、概述Python作为一种高效的数据处理和数据分析工具,广泛应用于不同领域的数据预处理工作。
而在数据预处理中,处理异常值是至关重要的一环。
本文将以Titanic数据集为例,介绍Python中数据预处理过程中对异常值的处理方法。
二、Titanic数据集介绍Titanic数据集是一个经典的数据集,记录了1912年泰坦尼克号沉船事件中乘客的相关信息。
该数据集包含乘客的各种信息,如芳龄、性别、船舱等级、票价等,以及生还与否等标签信息。
三、异常值的定义异常值,也称离裙值,是指在数据中明显偏离大多数观测值的数值。
异常值可能是由于记录错误、测量偏差或者数据分布的真实特征所导致的。
四、异常值的处理方法1. 确定异常值的标准在处理异常值之前,需要确定异常值的标准。
常见的确定异常值的标准有三种:统计学方法、专家经验方法和数据分布方法。
统计学方法通常是基于数据的均值、标准差等统计指标来确定异常值;专家经验方法则是基于领域专家对数据特征的了解来判断异常值;而数据分布方法是基于数据的分布情况来确定异常值。
2. 删除异常值一种简单直接的处理方法是直接将异常值从数据中删除。
这种方法适用于异常值数量较少、对整体数据分析影响较小的情况。
3. 替换异常值另一种处理方法是对异常值进行替换。
常见的替换方法包括用均值、中位数或其他统计指标替换异常值。
4. 数据转换数据转换是一种更加复杂的处理方法,它主要包括对数据进行标准化、归一化等操作,以减小异常值对整体数据的影响。
五、Python中的异常值处理在Python中,有许多库和工具可以帮助我们进行数据预处理工作,如Pandas、NumPy、SciPy等。
下面将以Pandas库为例,介绍Python中对Titanic数据集异常值的处理方法。
1. 导入数据我们使用Pandas库来导入Titanic数据集。
代码如下:```pythonimport pandas as pdtitanic_data = pd.read_csv('titanic.csv')2. 确定异常值通过可视化工具或统计分析,我们可以确定Titanic数据集中的异常值情况。
python心得体会2000字Python心得体会Python是一种高级编程语言,可以轻松地完成许多任务,比如数据分析、机器学习、Web开发等。
我学习Python已有一段时间,发现它非常强大且易于使用。
在这篇文章中,我想分享我对Python的心得体会。
Python的优点Python的最大优点在于它的简洁易懂。
它的语法非常简单和优雅,可以让新手很快掌握。
同时,Python具有庞大的生态系统,有大量的第三方库和工具可以使用。
例如,NumPy、Pandas等第三方库可以让数据分析和科学计算变得更加容易。
Python也有许多其他的优点,比如:1. 解释型语言:Python是解释型语言,这意味着可以直接运行代码,无需编译。
2. 移植性强:Python可以运行在多个操作系统上,包括Windows、Mac OS X和Linux等。
3. 面向对象编程:Python是一种面向对象的编程语言,可以使用类和对象等概念构建程序。
我的Python学习经验我在学习Python时,尝试了各种不同的学习方式。
1. 自学:最初我是通过自学来了解Python。
我下载了一些Python教程并开始学习。
2. 在线课程:我也参加了一些在线的Python课程,像Coursera 和edX等。
3. 编程挑战:我还尝试了一些编程挑战,像Codecademy和HackerRank,这些挑战可以让我提高程序设计的能力。
通过这些学习方式,我发现Python对于新手来说非常适合。
它的学习曲线相对较低,可以让人快速入门。
它还拥有许多好的资源,例如Python文档,Stack Overflow和GitHub等,这些资源可以帮助我们更好地理解和解决问题。
我的Python项目经验我已经开发了一些Python项目,包括Web应用程序、数据分析和深度学习等。
以下是其中一些项目的简介:1. INeuron - 基于Django和Bootstrap的新闻聚合网站INeuron是一个基于Django和Bootstrap的新闻聚合网站。
pandas中的melt函数Pandas是Python中非常强大的数据处理库,其中提供了许多数据处理的函数,如melt函数。
melt函数可以将宽格式的数据逐步转换为长格式数据,这在数据分析和可视化中特别有用。
在本文中,我们将深入了解pandas中的melt函数并介绍如何使用它。
第一步:引入Pandas库首先需要安装Pandas库并引入它。
可以使用以下命令来安装Pandas:pip install pandas接下来,可以在Python脚本中使用以下代码来引入Pandas:import pandas as pd第二步:创建数据为了更好地演示melt函数的使用,我们需要创建一些数据。
在本文中,我们将使用pandas中自带的数据集titanic作为展示。
titanic = pd.read_csv('titanic.csv')print(titanic.head())输出的结果为:PassengerId Survived Pclass \0 1 0 31 2 1 12 3 1 33 4 1 14 5 0 3Name Sex Age SibSp \0 Braund, Mr. Owen Harris male 22.0 11 Cumings, Mrs. John Bradley (Florence Briggs Th... female38.0 12 Heikkinen, Miss. Laina female 26.0 03 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 14 Allen, Mr. William Henry male 35.0 0Parch Ticket Fare Cabin Embarked0 0 A/5 21171 7.2500 NaN S1 0 PC 17599 71.2833 C85 C2 0 STON/O2. 3101282 7.9250 NaN S3 0 113803 53.1000 C123 S4 0 373450 8.0500 NaN S第三步:使用melt函数将数据转换为长格式使用melt函数来转换数据。
机器学习项⽬实战----泰坦尼克号获救预测(⼀)⼀、任务基础泰坦尼克号沉没是历史上最著名的沉船事故之⼀。
1912年4⽉15⽇,在她的处⼥航中,泰坦尼克号在与冰⼭相撞后沉没,在2224名乘客和机组⼈员中造成1502⼈死亡。
这场耸⼈听闻的悲剧震惊了国际社会,并为船舶制定了更好的安全规定。
造成海难失事的原因之⼀是乘客和机组⼈员没有⾜够的救⽣艇。
尽管幸存下沉有⼀些运⽓因素,但有些⼈⽐其他⼈更容易⽣存,例如妇⼥,⼉童和上流社会。
在这个案例中我们将运⽤机器学习来预测哪些乘客可以幸免于悲剧。
数据集链接:。
提取码:1htm 。
读取titanic_train数据集import pandas# 读取数据集titanic = pandas.read_csv('titanic_train.csv')titanic.head(10)查看数据集前10⾏特征名词解释特征名称特征解释PassengerId 乘客id,对结果没有影响Survived1表⽰存活,0表⽰未存活Pclass船舱等级,越有钱船舱等级越⾼,所以对结果有影响Name乘客名字,先暂时认为对结果没有影响Sex性别,毫⽆疑问,⼥⽣优先,所以肯定对结果有影响Age年龄,不⽤说这列也有影响SibSp兄弟姐妹,对结果也有影响Parch⽗母和⼩孩,不⽤说也有影响Ticket票的编号,貌似没啥影响Fare 船票价格,和船舱等级⼀样,不能忽略Cabin船舱号,应该也没啥影响Embarked登船地点,不同地点登船可能⾝份不⼀样⼆、数据预处理可以看到Age列有缺失值(NaN)。
⼀般来说,数据发⽣缺失的话有两种处理⽅法,⼀种填充缺失值,⼀种直接舍弃这个特征。
这⾥⼀般来说Age对结果是有较⼤影响的,我们可以对缺失值进⾏填充,这⾥可以填充平均值。
# Age 缺失值填充titanic['Age'] = titanic['Age'].fillna(titanic['Age'].median())print(titanic.describe())填充后查看数据集的描述机器学习算法⼀般来说解决不了对字符的分类。
决策树算法6-案例:泰坦尼克号乘客⽣存预测1 案例背景泰坦尼克号沉没是历史上最臭名昭着的沉船之⼀。
1912年4⽉15⽇,在她的处⼥航中,泰坦尼克号在与冰⼭相撞后沉没,在2224名乘客和机组⼈员中造成1502⼈死亡。
这场耸⼈听闻的悲剧震惊了国际社会,并为船舶制定了更好的安全规定。
造成海难失事的原因之⼀是乘客和机组⼈员没有⾜够的救⽣艇。
尽管幸存下沉有⼀些运⽓因素,但有些⼈⽐其他⼈更容易⽣存,例如妇⼥,⼉童和上流社会。
在这个案例中,我们要求您完成对哪些⼈可能存活的分析。
特别是,我们要求您运⽤机器学习⼯具来预测哪些乘客幸免于悲剧。
经过观察数据得到:1 乘坐班是指乘客班(1,2,3),是社会经济阶层的代表。
2 其中age数据存在缺失。
2 步骤分析1.获取数据2.数据基本处理2.1 确定特征值,⽬标值2.2 缺失值处理2.3 数据集划分3.特征⼯程(字典特征抽取)4.机器学习(决策树)5.模型评估3 代码实现导⼊需要的模块import pandas as pdimport numpy as npfrom sklearn.feature_extraction import DictVectorizerfrom sklearn.model_selection import train_test_splitfrom sklearn.tree import DecisionTreeClassifier, export_graphviz1.获取数据# 可以通过github上下载数据titanic=pd.read_csv("data/titanic/train.csv")titanic2.数据基本处理# 2.1 确定特征值,⽬标值x = titan[["pclass", "age", "sex"]]y = titan["survived"]# 2.2 缺失值处理# 缺失值需要处理,将特征当中有类别的这些特征进⾏字典特征抽取x['age'].fillna(x['age'].mean(), inplace=True)# 2.3 数据集划分x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=22)3.特征⼯程(字典特征抽取)特征中出现类别符号,需要进⾏one-hot编码处理(DictVectorizer),x.to_dict(orient="records") 需要将数组特征转换成字典数据# 对于x转换成字典数据x.to_dict(orient="records")# [{"pclass": "1st", "age": 29.00, "sex": "female"}, {}]# 转换为字典的形式x_train=x_train.to_dict(orient="records")x_test=x_test.to_dict(orient="records")# 特征转换transfer = DictVectorizer(sparse=False)x_train = transfer.fit_transform(x_train.to_dict(orient="records"))x_test = transfer.fit_transform(x_test.to_dict(orient="records"))4.决策树模型训练和模型评估决策树API当中,如果没有指定max_depth那么会根据信息熵的条件直到最终结束。
机器学习——⽤逻辑回归及随机森林实现泰坦尼克号的⽣存预测1.实验背景本次实验是Kaggle上的⼀个⼊门⽐赛——Titanic: Machine Learning from Disaster。
⽐赛选择了泰坦尼克号海难作为背景,并提供了样本数据及测试数据,要求我们根据样本数据内容建⽴⼀个预测模型,对于测试数据中每个⼈是否获救做个预测。
样本数据包括891条乘客信息及获救情况,测试数据有418条乘客信息。
样本数据的样例如下:Passenger:乘客唯⼀识别idSurvived:是否存活,0为否,1为是Pclass:船舱等级,1、2、3等Name:姓名Sex:性别Age:年龄SibSp:和该乘客⼀起旅⾏的兄弟姐妹和配偶的数量Parch:和该乘客⼀起旅⾏的⽗母和孩⼦的数量Ticket:船票号Fare:船票价格Cabin:船舱号Embarked:登船港⼝ S=英国南安普顿Southampton(起航点) C=法国瑟堡市Cherbourg(途经点) Q=爱尔兰昆⼠Queenstown(途经点)我们的⽬标就是根据上述字段信息以及乘客的获救情况,实现⼀个预测乘客是否存活的模型。
下⾯我们来看⼀下⽤到的模型。
2.模型简介通过分析案例,我们可以看出这是⼀个很明显的⼆分类问题,即判断乘客是否遇难,关于⼆分类的模型很多,这⾥⽤到了三种模型:线性回归模型、逻辑回归模型跟随机森林模型。
本次实验也参考了以及。
下⾯就对这三个模型进⾏介绍。
线性回归模型线性回归模型很简单,可以看成多项式⽅程的拟合问题。
只有⼀个⾃变量,称为⼀元线性回归;有多于⼀个的变量,称为多元线性回归。
对于⼀元线性回归,经常采⽤最⼩⼆乘的⽅法拟合出⼀条最逼近各点的曲线,如下图所⽰:多元线性回归⾃变量不⽌⼀个,形式如式⼦:Y = a1X1+a2X2+a3X3+a4X4+a5X5+.....+anXn。
⼀元线性回归是找⼀条拟合直线,⽽对于多元线性回归则是找到⼀个超平⾯,使这个超平⾯距离各点的距离最⼩。
基于决策树算法对泰坦尼克号数据的预测作者:袁馨段华琼来源:《电脑知识与技术》2020年第22期摘要:随着互联网的兴起,二十一世纪已经是一个信息时代,也可以称为大数据时代,数据早已渗透到当今的每一个行业,成为重要的生产因素。
大数据技术应用的领域越来越多,帮助企业不断地发展新业务,创造新的运营模式,例如电子商务,物流配送等。
该文详细阐述了一个基于决策树算法的数据分析挖掘过程,以泰坦尼克号数据为例,通过对数据的分析与挖掘来实现预测功能。
关键词:决策树算法;大数据;预测中图分类号:TP311 文献标识码:A文章编号:1009-3044(2020)22-0185-02开放科学(资源服务)标识码(OSID):大数据的出现,涌现出许多新的分析与挖掘算法,统称为大数据技术。
越来越多的企业运用大数据技术对数据进行深层次的分析,从而决定企业的运营模式。
例如超市的捆绑销售,流失客户的风险预测等。
本文主要通过各类属性的提取、处理,探究影响泰坦尼克号乘客存活率的因素,最后对测试集的数据做存活率预测。
1 决策树算法简介1.1算法思想决策树算法属于机器学习的一种,是一种基本的分类与回归方法,本文主要讨论分类的决策树。
该算法能从给定的无序训练样本中,提炼出像树一样的分类模型。
树中的每个非叶子节点记录了使用哪个特征来进行类别判断,每个叶子节点则代表了最后判断的类别。
从根节点开始,数据在信息增益最大的特征上产生分裂,在迭代过程中,分裂过程在每个子节点重复进行,直到所有的叶子为纯性,即每一个节点的数据属于同一类。
这也是做预测的方法,通过对特征的提取,建立模型,然后对测试的数据做分类。
决策树可以分成三个算法:ID3算法、C4.5算法和CART算法。
这三个算法都比较常见,在选择属性的时候采用不同的方式来判断。
1.2算法特点相对于其他机器学习算法来说,决策树算法相对简单,计算复杂度不高,且易于理解和实现。
人们在学习和使用的过程中,不需要了解太多的背景知识。
朴素贝叶斯算法泰坦尼克朴素贝叶斯算法是一种常用的机器学习算法,它基于贝叶斯定理和特征之间的条件独立性假设,用于分类和回归问题。
在本文中,我们将以泰坦尼克号数据集为例,介绍朴素贝叶斯算法的基本原理、实现方法以及在泰坦尼克号数据集上的应用。
泰坦尼克号数据集是一个经典的分类问题数据集,包含了泰坦尼克号上乘客的相关信息,如姓名、性别、年龄、船票等级、船票价格、家庭亲属数量、登船港口等,以及是否生还的标签。
我们的目标是基于乘客的信息预测其是否生还。
首先,让我们简单介绍一下朴素贝叶斯算法的基本原理。
朴素贝叶斯算法的核心思想是根据已知的数据集,计算出不同类别的概率分布,然后利用贝叶斯定理来计算出给定特征值情况下属于某一类别的概率。
朴素贝叶斯算法的优势在于其简单、快速、高效,特别适用于处理大规模数据集。
朴素贝叶斯算法的实现方法有多种,其中包括高斯朴素贝叶斯、多项式朴素贝叶斯、伯努利朴素贝叶斯等。
在本文中,我们将以高斯朴素贝叶斯为例,介绍其在泰坦尼克号数据集上的应用。
在使用朴素贝叶斯算法之前,我们首先需要对数据集进行预处理,包括数据清洗、特征提取、特征选择、特征转换等。
在泰坦尼克号数据集中,我们可以将乘客的信息包括性别、年龄、船票等级、船票价格、家庭亲属数量、登船港口等作为特征,而乘客是否生还作为标签。
接下来,我们可以使用高斯朴素贝叶斯算法对数据集进行训练和预测。
训练过程中,我们需要对每个特征的概率分布进行估计,以及不同类别的概率。
在泰坦尼克号数据集中,我们可以根据生还与否将数据集分为两类,然后计算出每个特征在不同类别下的概率分布。
最后,根据贝叶斯定理,我们可以计算出给定特征情况下乘客生还与否的概率。
在得到模型之后,我们可以使用测试集对模型进行验证,并计算出模型的准确率、精确率、召回率等指标。
通过这些指标,我们可以评估模型的性能,并对模型进行调优。
朴素贝叶斯算法在泰坦尼克号数据集上的应用,可以帮助我们预测乘客是否生还,从而为救援工作提供参考。
第2次作业-titanic数据集练习⼀、读⼊titanic.xlsx⽂件,按照教材⽰例步骤,完成数据清洗。
titanic数据集包含11个特征,分别是:Survived:0代表死亡,1代表存活Pclass:乘客所持票类,有三种值(1,2,3)Name:乘客姓名Sex:乘客性别Age:乘客年龄(有缺失)SibSp:乘客兄弟姐妹/配偶的个数(整数值)Parch:乘客⽗母/孩⼦的个数(整数值)Ticket:票号(字符串)Fare:乘客所持票的价格(浮点数,0-500不等)Cabin:乘客所在船舱(有缺失)Embark:乘客登船港⼝:S、C、Q(有缺失)数据清洗1、读⼊⽂件,并显⽰前5⾏import pandas as pdtitanic=pd.DataFrame(pd.read_excel('E:/Python/数据⽂件/titanic.xlsx'))titanic.head()2、删除⽆效列与⾏#删除⽆效列与⾏titanic.drop('embark_town',axis=1,inplace=True)titanic.head()3、重复值处理#查找重复值titanic.duplicated()#删除重复⾏titanic=titanic.drop_duplicates()titanic.head()4、空值与缺失值处理#统计空值的个数titanic['who'].isnull().value_counts()#使⽤fillna⽅法填充为mantitanic['who']=titanic['who'].fillna('man')titanic.head()#为age字段的空值填充平均值titanic['age']=titanic['age'].fillna(titanic['age'].mean())titanic.head()5、空格处理titanic['fare'] = titanic['fare'].map(str.strip)#删除数据两边空格titanic['fare'] = titanic['fare'].map(str.lstrip)#删除数据左边空格titanic['fare'] = titanic['fare'].map(str.rstrip)#删除数据右边空格6、异常值处理#查看DataFrame每栏的统计数据titanic.describe()#将异常值替换成平均值titanic.replace([512.329200],titanic['fare'].mean())⼆、对titanic数据集完成以下统计操作1.统计乘客死亡和存活⼈数titanic.survived.value_counts()2.统计乘客中男⼥性别⼈数titanic.sex.value_counts()3.统计男⼥获救的⼈数titanic['sex'][titanic['survived']!=0].value_counts()4.统计乘客所在的船舱等级的⼈数titanic['class'].value_counts()5.使⽤corr()函数,判断两个属性是否具有相关性,分析舱位的⾼低和存活率的关系titanic['survived'].corr(titanic['pclass'])所得的结果是负数,舱位的⾼低与存活率呈现负相关,舱位越⾼,存活率越低6.画出乘客票价与舱位等级的箱体图Boxplot,从图中能够得到哪些结论?titanic.boxplot(['fare'],['pclass'])三个舱位都存在异常值,舱位1的票价的中位数,极⼤值>舱位2的票价的中位数,极⼤值>舱位3的票价的中位数,极⼤值。
朴素贝叶斯算法前两个算法都被要求做出一个艰难的决定,给出数据所属分类的明确答案,但往往因为分类特征统计不足,或者分类特征选择有误导致了错误的分类结果,哪怕是训练集也有可能出现不能正确分类的情形。
这时,前两种方法都如同现实生活一样是用“少数服从多数”的办法来做出决策。
正如帕斯卡指出的:“少数服从多数未必是因为多数人更正义,而是多数人更加强力”,所以为了保证“少数人的权利”,我们要求分类器给出一个最优的猜测结果,同时给出猜测的概率估计值。
贝叶斯统计基础在说朴素贝叶斯算法之前,还是要说说贝叶斯统计,关于贝叶斯统计,这里只给出最最最基本的简述,其余的还请参阅further reading中的《数学之美番外篇:平凡而又神奇的贝叶斯方法》先说贝叶斯公式:定义:设A、B是两个事件,且P(A)>0,称P(B|A)=P(AB)/P(A)为在事件A发生的条件下事件B发生的条件概率。
相关公式:乘法公式 P(XYZ)=P(Z|XY)P(Y|X)P(X)全概率公式 P(X)=P(X|Y1)+ P(X|Y2)+…+ P(X|Yn)贝叶斯公式:如上所示,其中P(A|B)是在B发生的情况下A发生的可能性。
在贝叶斯定理中,每个名词都有约定俗成的名称:P(A)是A的先验概率或边缘概率。
之所以称为"先验"是因為它不考虑任何B方面的因素。
P(A|B)是已知B发生后A的条件概率(直白来讲,就是先有B而后=>才有A),也由于得自B的取值而被称作A的后验概率。
P(B|A)是已知A发生后B的条件概率(直白来讲,就是先有A而后=>才有B),也由于得自A的取值而被称作B的后验概率。
P(B)是B的先验概率或边缘概率,也作标准化常量。
按这些术语,Bayes定理可表述为:后验概率 = (相似度*先验概率)/标准化常量,也就是說,后验概率与先验概率和相似度的乘积成正比。
另外,比例 P(B|A)/P(B)也有时被称作标准相似度,Bayes定理可表述为:后验概率 =标准相似度*先验概率。
泰坦尼克号-⾼级功能⼯程教程翻译⾃:kaggle0. 简介我之所以决定编写此内核,是因为《泰坦尼克号:灾难机器学习》是我在Kaggle上最喜欢的⽐赛之⼀。
这是⼀个初学者级内核,专注于探索性数据分析和功能⼯程。
很多⼈从这场竞赛开始Kaggle,他们迷失在极长的教程内核中。
与其他内核相⽐,这是⼀个简短的内核。
我希望这对初学者来说是⼀个很好的指南,并以新的功能⼯程思想启发他们。
泰坦尼克号:从灾难中学习机器是将领域知识应⽤到特征⼯程中的⼀次激烈竞争,因此我进⾏了研究,并学到很多有关泰坦尼克号的知识。
泰坦尼克号数据集下⾯有许多秘密需要揭⽰。
我试图找出那些在泰坦尼克号沉没时影响乘客⽣存的秘密因素。
我相信还有其他功能尚待发现。
这个内核有3个主要部分:探索性数据分析,功能⼯程和模型,并且使⽤调整后的随机森林分类器可以达到2%(0.83732)的公共排⾏榜得分。
运⾏整个笔记本需要60秒。
如果您有任何想法可以改善此内核,请确保发表评论,或随意进⾏试验。
如果您不了解任何部分,请随时提问。
import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as snssns.set(style="darkgrid")from sklearn.ensemble import RandomForestClassifierfrom sklearn.preprocessing import OneHotEncoder, LabelEncoder, StandardScalerfrom sklearn.metrics import roc_curve, aucfrom sklearn.model_selection import StratifiedKFoldimport stringimport warningswarnings.filterwarnings('ignore')SEED = 42训练集有891⾏,测试集有418⾏训练集具有12个特征,测试集具有11个特征训练集中的⼀项额外特征是⽣存特征,这是⽬标变量def concat_df(train_data, test_data):# Returns a concatenated df of training and test setreturn pd.concat([train_data, test_data], sort=True).reset_index(drop=True)def divide_df(all_data):# Returns divided dfs of training and test setreturn all_data.loc[:890], all_data.loc[891:].drop(['Survived'], axis=1)df_train = pd.read_csv('../input/train.csv')df_test = pd.read_csv('../input/test.csv')df_all = concat_df(df_train, df_test)df_ = 'Training Set'df_ = 'Test Set'df_ = 'All Set'dfs = [df_train, df_test]print('Number of Training Examples = {}'.format(df_train.shape[0]))print('Number of Test Examples = {}\n'.format(df_test.shape[0]))print('Training X Shape = {}'.format(df_train.shape))print('Training y Shape = {}\n'.format(df_train['Survived'].shape[0]))print('Test X Shape = {}'.format(df_test.shape))print('Test y Shape = {}\n'.format(df_test.shape[0]))print(df_train.columns)print(df_test.columns)1 探索性数据分析1.1 概述PassengerID是该⾏唯⼀性的id,它对target没有任何影响Survived是我们尝试预测的⽬标变量(0或者1)1 = Survived0 = Not SurvivedPclass(乘客舱)是乘客的社会经济地位,它是⼀种有序的分类特征,具有3个唯⼀值(1、2或3):1 =上层阶级2 =中产阶级3 =下层阶级Name,Sex和Age是不⾔⾃明的SibSp是乘客的兄弟姐妹和配偶的总数Parch是乘客⽗母和⼦⼥的总数Ticket是乘客的票号Fare是旅客票价Cabin(客舱)是乘客的客舱号Embarked(登船)是登船的港⼝,它是⼀种分类特征,具有3个唯⼀值(C,Q或S):C =瑟堡Q =皇后镇S =南安普敦print(df_())df_train.sample(3)print(df_())df_test.sample(3)1.2 Missing Values(缺失值)从下⾯可以看出,某些列的值缺失。
利⽤python分析泰坦尼克号数据集1 引⾔刚接触python与⼤数据不久,这个是学长给出的练习题⽬。
知识积累太少,学习⽤了不少的时间。
尽量详细的写,希望对各位的学习有所帮助。
2 背景2.1 Kaggle本次数据集来⾃于。
Kaggle是⼀个数据分析建模的应⽤竞赛平台。
想要了解详细资料的⼩伙伴请⾃⾏百度。
2.2 泰坦尼克号请到Data页⾯下载数据集数据集的各属性在Data页⾯下有详细介绍。
问题就是以⼤家熟悉的泰坦尼克号为背景展开的,本次任务的⽬的就是构建⼀个可以根据乘客个⼈信息推测乘客是否⽣存的数据模型。
3 ⼯具介绍3.1 Python我所⽤的python版本为:Python 3.5.2 。
3.2 Anaconda3Anaconda 是⼀个很好⽤的数据分析⼯具集,其中的Spyder 与 Jupyter Notebook今后会经常使⽤,⽽且使⽤⾮常⽅便。
4 初探数据相信你已经将数据下载到你的电脑中了,下⾯我们来将数据经⾏导⼊及简单分析。
请先打开Spyder。
4.1 导⼊训练集数据import pandas as pd #数据分析import numpy as np #科学计算from pandas import Series,DataFramedata_train = pd.read_csv(r'E:\Data\train.csv') #根据数据位置⾃⾏修改运⾏后我们会在Spyder窗⼝右上部看到data_train数据。
点击后即可显⽰数据表格,如下:4.2 数据简单分析观察图表我们可以知道,共有891⾏、12列。
这代表本训练集共有891条数据,每条数据有12类信息。
包括:• PassengerId => 乘客ID• Survived => 获救情况(1为获救,0为未获救)• Pclass => 乘客等级(1/2/3等舱位)• Name => 乘客姓名• Sex => 性别• Age => 年龄• SibSp => 堂兄弟/妹个数• Parch => ⽗母与⼩孩个数• Ticket => 船票信息• Fare => 票价• Cabin => 客舱• Embarked => 登船港⼝初步观察,我们会发现⼀些数据信息值为:nan,这就代表该条数据该类信息缺失。
Titanic(python)数据集中共有12个字段,PassengerId:乘客编号,Survived:乘客是否存活,Pclass:乘客所在的船舱等级;Name:乘客姓名,Sex:乘客性别,Age:乘客年龄,SibSp:乘客的兄弟姐妹和配偶数量,Parch:乘客的⽗母与⼦⼥数量,Ticket:票的编号,Fare:票价,Cabin:座位号,Embarked:乘客登船码头,共有891位乘客的数据信息。
其中277位乘客的年龄数据缺失,2位乘客的登船码头数据缺失,687位乘客的船舱数据缺失。
1.1 数据加载与描述性统计加载所需数据与所需的python库。
import statsmodels.api as smimport statsmodels.formula.api as smfimport statsmodels.graphics.api as smgimport patsy%matplotlib inlineimport matplotlib.pyplot as pltimport numpy as npimport pandas as pdfrom pandas import Series,DataFramefrom scipy import statsimport seaborn as sns#导⼊CSV数据train=pd.read_csv('F:/python/titanic_data.csv')描述性统计()train.describe()<class 'pandas.core.frame.DataFrame'>RangeIndex: 891 entries, 0 to 890Data columns (total 12 columns):# Column Non-Null Count Dtype--- ------ -------------- -----0 PassengerId 891 non-null int641 Survived 891 non-null int642 Pclass 891 non-null int643 Name 891 non-null object4 Sex 891 non-null object5 Age 714 non-null float646 SibSp 891 non-null int647 Parch 891 non-null int648 Ticket 891 non-null object9 Fare 891 non-null float6410 Cabin 204 non-null object11 Embarked 889 non-null objectdtypes: float64(2), int64(5), object(5)memory usage: 83.7+ KBPassengerId Survived Pclass Age SibSp Parch Farecount891.000000891.000000891.000000714.000000891.000000891.000000891.000000mean446.0000000.383838 2.30864229.6991180.5230080.38159432.204208std257.3538420.4865920.83607114.526497 1.1027430.80605749.693429min 1.0000000.000000 1.0000000.4200000.0000000.0000000.00000025%223.5000000.000000 2.00000020.1250000.0000000.0000007.91040050%446.0000000.000000 3.00000028.0000000.0000000.00000014.45420075%668.500000 1.000000 3.00000038.000000 1.0000000.00000031.000000max891.000000 1.000000 3.00000080.0000008.000000 6.000000512.329200描述性统计分析结果显⽰,共有38.3%的乘客存活,乘客船舱等级的平均值介于2和3之间,⼤部分乘客等级较低。
泰坦尼克数据集探索1.简介:从泰塔尼克数据集中,根据每个乘客的信息,建立模型并进行预测。
整篇文章分为三步:1.特征选择2.缺失数据处理3.预测1.1导入软件包并检查数据> library('ggplot2') # 可视化> library('ggthemes') # 可视化> library('scales') # 可视化> library('dplyr') # 数据处理> library('mice') # 填充缺失数据> library('randomForest') # 分类算法> #数据的导入> setwd('D:/Titanic')#设置默认功过路径> train <- read.csv('train.csv',stringsAsFactors= FALSE)#训练集> test <- read.csv('test.csv',stringsAsFactors= FALSE)#测试集#进行数据拼接,一同进行特征选择和缺失数据处理> full <- bind_rows(train, test) # bind training & test data > # check data> str(full)我们观察到一共有1309条数据,每一条数据有12个相关变量。
2.特征工程头衔># 从名称中挖掘> # 从乘客名字中提取头衔> #R中的grep、grepl、sub、gsub、regexpr、gregexpr等函数都使用正则表达式的规则进行匹配。
默认是egrep的规则,sub函数只实现第一个位置的替换,gsub函数实现全局的替换。
> full$Title <- gsub('(.*, )|(\\..*)', '', full$Name)>> # 查看按照性别划分的头衔数量> table(full$Sex, full$Title)我们发现头衔的类别太多,并且好多出现的频次是很低的,我们可以将这些类别进行合并> rare_title <- c('Dona', 'Lady', 'the Countess','Capt', 'Col', 'Don',+ 'Dr', 'Major', 'Rev', 'Sir', 'Jonkheer')# 合并低频头衔为一类> # 重命名称呼> full$Title[full$Title == 'Mlle'] <- 'Miss'> full$Title[full$Title == 'Ms'] <- 'Miss'> full$Title[full$Title == 'Mme'] <- 'Mrs'> full$Title[full$Title %in% rare_title] <- 'Rare Title'>> # 再次查看按照性别划分的头衔数量> table(full$Sex, full$Title)可以看到头衔的个数得到了大量的缩减> #sapply()函数:根据传入参数规则重新构建一个合理的数据类型返回> full$Surname <- sapply(full$Name,+ function(x) strsplit(x, split = '[,.]')[[1]][1])家庭人数既然我们已经根据乘客的名字划分成一些新的变量,我们可以把它进一步做一些新的家庭变量。
首先我们要做一个基于兄弟姐妹/配偶数量(s)和儿童/父母数量的家庭规模变量。
> # Create a family size variable including the passenger themselves> full$Fsize <- full$SibSp + full$Parch + 1>> # Create a family variable> full$Family <- paste(full$Surname, full$Fsize, sep='_')> #为了直观显示,我们可以用ggplot2 画出家庭成员数量和生存家庭数情况的图形> ggplot(full[1:891,], aes(x = Fsize, fill = factor(Survived))) ++ geom_bar(stat='count', position='dodge') ++ scale_x_continuous(breaks=c(1:11)) ++ labs(x = 'Family Size') ++ theme_few()> full$FsizeD[full$Fsize == 1] <- 'singleton'> full$FsizeD[full$Fsize < 5 & full$Fsize > 1] <- 'small' > full$FsizeD[full$Fsize > 4] <- 'large'> # Show family size by survival using a mosaic plot > mosaicplot(table(full$FsizeD, full$Survived), main='Family SizeSurvival',shade=TRUE)<-4-4:-2-2:00:22:4>4尝试创建一些新的特征> # This variable appears to have a lot of missing values> full$Cabin[1:28]> # Create a Deck variable. Get passenger deck A - F:> full$Deck<-factor(sapply(full$Cabin, function(x) strsplit(x, NULL)[[1]][1]))还有更多可能的变量在这里完成,比如在乘客客舱变量passenger cabin 也存在一些有价值的信息如客舱层数 deck,但是这个变量的缺失值太多,无法做出新的有效的变量,暂时放弃这个变量的挖掘。
3. 缺失数据的处理观察文件中的数据,我们会发现有些乘客的信息参数并不完整,由于所给的数据集并不大,我们不能通过删除一行或者一列来处理缺失值,因而对于我们关注的一些字段参数,我们需要根据统计学的描述数据(平均值、中位数等等)来合理给出缺失值。
我们可以通过函数查看缺失数据的变量在第几条数据出现缺失和总共缺失的个数。
我们将根据我们想象可能相关的现有数据,推测他们的登机价值:乘客等级和票价。
我们看到他们分别支付了80美元和$ NA,他们的班级是1和NA。
那么他们从哪里开始呢?> # Use ggplot2 to visualize embarkment, passenger class, & median fare> ggplot(embark_fare, aes(x = Embarked, y = Fare, fill = factor(Pclass))) ++ geom_boxplot() ++ geom_hline(aes(yintercept=80),+ colour='red', linetype='dashed', lwd=2) ++ scale_y_continuous(labels=dollar_format()) ++ theme_few()可以看到出发的一级乘客的中位票价与我们的登机手续费乘客支付的80美元相当。
我们接近在这里和那里确定了几个缺失值的位置。
1044行上的乘客的票价是缺失值。
> # Since their fare was $80 for 1st class, they most likely embarked from 'C'> full$Embarked[c(62, 830)] <- 'C'> # Show row 1044> full[1044, ]这是从南安普敦('S')出发的三级乘客。
让所有其他人分享他们的班级和登机牌(n = 494)可视化票价。
> ggplot(full[full$Pclass == '3' & full$Embarked == 'S', ], + aes(x = Fare)) ++ geom_density(fill = '#99d6ff', alpha=0.4) ++ geom_vline(aes(xintercept=median(Fare, na.rm=T)),+ colour='red', linetype='dashed', lwd=1) ++ scale_x_continuous(labels=dollar_format()) ++ theme_few()从这个可视化的角度来看,将NA票价值替换为上课时间为8.05美元的中位数似乎是相当合理的。
> # Replace missing fare value with median fare for class/embarkment> full$Fare[1044] <- median(full[full$Pclass == '3' & full$Embarked == 'S', ]$Fare, na.rm = TRUE)插补我们可以使用rpart(递归分区回归)来预测缺少的年龄,但是我将使用MICE来完成这个任务,只是为了不同的东西。