kaggle 泰坦尼克号2 得分0.7799

ops/2024/11/13 9:26:27/

流程

  1. 导入所要使用的包
  2. 引入kaggle的数据集csv文件
  3. 查看数据集有无空值
  4. 填充这些空值
  5. 提取特征
  6. 分离训练集和测试集
  7. 调用模型

导入需要的包

python">import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')

引入kaggle的数据集csv文件

python">train=pd.read_csv('train.csv')
test=pd.read_csv('test.csv')
datas = pd.concat([train, test], ignore_index = True)

查看数据集有无空值

python">datas.info()

在这里插入图片描述
看到了有空值的属性列,Age,Fare,Cabin,Embarked
下面的操作就是给这些空值填充。

填充这些空值

首先填充少的Fare票价少了一行,先看一看这一行的信息

python">datas[datas['Fare'].isnull()]

在这里插入图片描述
已知信息,pclass等级是三类,说明比较贫穷
直接填一个较低的数字就行了
票价就给个差不多7.8好了,就一个数据缺失影响不大

python">datas['Fare']=datas['Fare'].fillna(7.8)

Embarked少了两行,先看一下这两行的信息

python">datas[datas['Embarked'].isnull()]

在这里插入图片描述
首先二人是女性,根据他们的女士优先的原则,存活概率比较高,pclass也是一级的,所以根据分配给他们三个港口存活率最高的C港口

python">datas['Embarked'] = datas['Embarked'].fillna('C')

还有Cabin船仓,缺失的很多,干脆把缺失的也归为一类,直接填充为U,然后每个取首字母,得到以字母为编号的船舱信息
空白填充为U

python">datas['Cabin']=datas['Cabin'].fillna("U")

每个取首字母

python">datas['Cabin']=datas['Cabin'].str.get(0)

还剩下一个数据是age年龄,缺失的也比较多,和存活率关系比较大,选用几个特征随机森林进行填充。

python">from sklearn.ensemble import RandomForestRegressor
ages = datas[['Age', 'Pclass','Sex']]
ages=pd.get_dummies(ages)
known_ages = ages[ages.Age.notnull()].values
unknown_ages = ages[ages.Age.isnull()].values
y = known_ages[:, 0]
X = known_ages[:, 1:]
rfr = RandomForestRegressor(random_state=60, n_estimators=100, n_jobs=-1)
rfr.fit(X, y)
pre_ages = rfr.predict(unknown_ages[:, 1::])
datas.loc[ (datas.Age.isnull()), 'Age' ] = pre_ages

通过以上的操作,已经没有缺失值。

提取特征

由于外国人名字的特点,对其进行归类,人为的做一些特征

python">datas['Title'] = datas['Name'].apply(lambda x:x.split(',')[1].split('.')[0].strip())
datas['Title'].replace(['Capt', 'Col', 'Major', 'Dr', 'Rev'],'Officer', inplace=True)
datas['Title'].replace(['Don', 'Sir', 'the Countess', 'Dona', 'Lady'], 'Royalty', inplace=True)
datas['Title'].replace(['Mme', 'Ms', 'Mrs'],'Mrs', inplace=True)
datas['Title'].replace(['Mlle', 'Miss'], 'Miss', inplace=True)
datas['Title'].replace(['Master','Jonkheer'],'Master', inplace=True)
datas['Title'].replace(['Mr'], 'Mr', inplace=True)

人多力量大,依据人性来看,有家庭成员的要比一个人的存活概率更高

python">datas['Fam_size'] = datas['SibSp'] + datas['Parch'] + 1datas.loc[datas['Fam_size']>7,'Fam_type']=0
datas.loc[(datas['Fam_size']>=2)&(datas['Fam_size']<=4),'Fam_type']=2
datas.loc[(datas['Fam_size']>4)&(datas['Fam_size']<=7)|(datas['Fam_size']==1),'Fam_type']=1
datas['Fam_type']=datas['Fam_type'].astype(np.int32)

分离训练集和测试集

python">y=train['Survived']
features = ["Pclass", "Sex", "SibSp", "Parch","Title","Cabin","Fam_size","Embarked"]
# datas=datas.drop('Name',axis=1)
# datas=datas.drop('Age',axis=1)
# datas=datas.drop('Ticket',axis=1)
# datas=datas.drop('Fam_type',axis=1)
# datas=datas.drop('Fare',axis=1)
# qq=pd.get_dummies(datas)
train=datas[datas['Survived'].notnull()]
test=datas[datas['Survived'].isnull()].drop('Survived',axis=1)

X是训练集,取总数据的前这些行

python">X = pd.get_dummies(datas[features])
X=X.loc[0:890]

调用模型训练

python">from sklearn.ensemble import RandomForestClassifiermodel = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=1)
model.fit(X, y)

划分测试集

python">X_test = pd.get_dummies(datas[features])
X_test = X_test.loc[891:1308]

输出文件

python">predictions = model.predict(X_test)output = pd.DataFrame({'PassengerId': test.PassengerId, 'Survived': predictions.astype(int)})
output.to_csv('mypredict.csv', index=False)

http://www.ppmy.cn/ops/6868.html

相关文章

webpack源码分析——enhanced-resolve库之cdUp函数

一、 cdUp函数 函数功能 该函数寻找上层目录&#xff0c;每次调用函数时对输入的路径进行一次寻找上级目录。如果没有找到返回null 二、函数分析 传入的directory判读是否为‘/’如果是直接返回nullif (directory "/") return null;获取‘/’和‘\’在directory 中…

给c++小白的教程5:输入

大家好&#xff0c;又见面了。 今天给大家带来c中的输入。 输入&#xff0c;c中有两种&#xff0c;cin>>和scanf()。 在这里只讲解cin&#xff0c;scanf将在以后实体讲解中介绍。 用法&#xff1a; cin>>变量; cin是从键盘上获取数据&#xff0c;赋值给变量 …

设计模式-单例模式

单例模式 饿汉式 饱汉式 单例模式是Java中最简单的设计模式之一&#xff0c;它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类&#xff0c;该类负责创建自己的对象&#xff0c;同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式&#xff0c;可…

react中useState的值没有改变,而是旧的数值

问题背景 想实现点击按钮就改变数据的效果&#xff0c;但是在控制台的打印结果&#xff0c;总是上一次的修改情况&#xff0c;并不是最新的修改后的数据 代码&#xff1a; import { useState, useRef } from "react";// 实现sonA的数据传递给sonB const SonA () …

途游游戏,科锐国际(计算机类),得物,蓝禾,奇安信,顺丰,康冠科技,金证科技24春招内推

途游游戏&#xff0c;科锐国际&#xff08;计算机类&#xff09;&#xff0c;得物&#xff0c;蓝禾&#xff0c;奇安信&#xff0c;顺丰&#xff0c;康冠科技&#xff0c;金证科技24春招内推 ①得物 【岗位】技术&#xff0c;设计&#xff0c;供应链&#xff0c;风控&#xff0…

【docker】把镜像save出来

先把要commit的容器停止。 为了确保提交的镜像反映容器某一精确时刻的稳定状态&#xff0c;应在提交Docker容器为新镜像前先停止该容器。这样生成的新镜像将更可靠、易于管理和重现。 sudo docker commit 容器名 镜像名&#xff1a;tag sudo docker commit sjtu sjtu:4.17 …

微信小程序配置了onShareTimeline分享到朋友圈,但是在开发者工具中这里始终是灰色的,在真机调试的时候也没有发现有分享到朋友圈的相关信息。

微信小程序配置了onShareTimeline分享到朋友圈&#xff0c;但是在开发者工具中这里始终是灰色的&#xff0c;在真机调试的时候也没有发现有分享到朋友圈的相关信息。 有说&#xff1a;使用 web-view组件的页面支持分享发送给朋友不支持分享到朋友圈 折腾半天不如看官方文档。 …

【微服务】Hystrix的概念、作用以及使用方法

目录 概念 作用 使用方法 Hystrix的实现 Hystrix 是 Netflix 提供的一个用于分布式系统的延迟和容错库。它旨在通过在客户端库中实现断路器模式&#xff0c;从而防止在一个分布式环境中的雪崩效应并提供回退选项&#xff0c;从而增强了分布式系统的弹性和可靠性。 概念 断…