项目6 泰坦尼克生存预测

数据预处理

在Kaggle中下载Tianic数据集并引入必要的库

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import metrics
from sklearn.linear_model import LogisticRegression
import seaborn as sns
import warnings
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split



train = pd.read_csv('C:/Users/lenovo/Desktop/pythonexp/22 proj/Titanic/dataset/train.csv')
test = pd.read_csv('C:/Users/lenovo/Desktop/pythonexp/22 proj/Titanic/dataset/test.csv')

train.info()  # 查看train.csv的总体情况

print(train.isnull().sum())

查看数据整体情况

可以看到数据存在缺省值,并且部分数据需要进行处理。 

train['Age']=train['Age'].fillna(train['Age'].mean() )
train['Embarked']=train['Embarked'].fillna('S')

#print(train.isnull().sum())
#我认为Cabin值大量缺失,填补没有意义。不将该参数纳入预测中

#将性别处理为数值变量
train['Sex'].replace('male',1,inplace=True)
train['Sex'].replace('female',0,inplace=True)

#对出发港口进行one-hot编码
embarkedDf = pd.DataFrame()
embarkedDf = pd.get_dummies(train['Embarked'] , prefix='Embarked' )
#print(embarkedDf)
train=pd.concat([train,embarkedDf],axis=1)
train.drop('Embarked',axis=1,inplace=True)
train = train.replace({True: 1, False: 0})

#对客舱等级进行one-hot编码
pclassdf=pd.DataFrame()
pclassdf=pd.get_dummies(train['Pclass'] , prefix='Pclass' )
train=pd.concat([train,pclassdf],axis=1)
train.drop('Pclass',axis=1,inplace=True)
train = train.replace({True: 1, False: 0})

对年龄变量中的缺省值用平均数填充。

观察数据后发现登船港口'S'占大部分,对登船港口变量采用众数填充。

性别变量进行数值化处理。

对出发港口和客舱等级变量进行one-hot编码。

相关性探究

 对刚才处理过的数据进行分析研究,合理选取最终参与模型训练的变量。

df = train[['Sex', 'Age', 'SibSp', 'Parch', 'Fare', 'Survived','Embarked_C','Embarked_Q','Embarked_S','Pclass_1','Pclass_2','Pclass_3']]
# 属性间相关系数
cor = df.corr()
print(cor)
# 属性间相关系数热力图,annot表示将数值显示在图里
sns.heatmap(cor,annot=True)
plt.show()
'''
#下面进行单个变量分析

# 查看survived 与 Sex的关系
'''
Survived_Sex = train['Sex'].groupby(train['Survived'])
print(Survived_Sex.value_counts().unstack())

Survived_Sex.value_counts().unstack().plot(kind = 'bar', stacked = True)
plt.show()

相关性分析结果如下:

可以看到图中蓝色方框标出的变量与Survived存在较高相关性,考虑在其中选择有效的变量。

对上述标出的单个变量进行分析情况如下:

可以看到具有女性、客舱等级1、在C港口登陆特征的人存活的概率较大,证明这三类变量对存活结果有显著影响。

train.drop(['Ticket'], axis = 1, inplace=True)
train.drop(['SibSp'], axis = 1, inplace=True)
train.drop(['Parch'], axis = 1, inplace=True)
train.drop(['Cabin'], axis = 1, inplace=True)
train.drop(['Name'], axis = 1, inplace=True)

trainset,testset=train_test_split(train, test_size=0.1, random_state=42)
y_train=trainset['Survived']
trainset.drop(['Survived'],axis=1,inplace=True)
x_train=trainset

y_test=testset['Survived']
testset.drop(['Survived'],axis=1,inplace=True)
x_test=testset

删除数据中我认为对结果影响不大的列,并划分训练集与测试集。

选择模型

本次共选用4种常见的分类模型,包括:逻辑回归、随机森林、朴素贝叶斯、支持向量机。

model1 = LogisticRegression()
model1.fit(x_train,y_train)
y_pred = model1.predict(x_test)
accuracy1 = accuracy_score(y_test, y_pred)
print(f"逻辑回归准确率:{accuracy1:.4f}")


from sklearn.ensemble import RandomForestClassifier

model2 = RandomForestClassifier(n_estimators=100, criterion='gini', max_depth=5, min_samples_split=1.0,
                                min_samples_leaf=1, max_features='auto', bootstrap=False, oob_score=False, n_jobs=1,
                                random_state=0,
                                verbose=0)
model2.fit(x_train, y_train)
prediction3 = model2.predict(x_test)
accuracy2=accuracy_score(y_test, prediction3)
# 计算准确率
print(f"随机森林准确率:{accuracy2:.4f}")

from sklearn.naive_bayes import GaussianNB
model3 = GaussianNB()
model3.fit(x_train,y_train)
y_pred = model3.predict(x_test)
accuracy3 = accuracy_score(y_test, y_pred)
print(f"朴素贝叶斯准确率:{accuracy3:.4f}")

from sklearn.svm import SVC
model4 = SVC()
model4.fit(x_train,y_train)
y_pred = model4.predict(x_test)
accuracy4 = accuracy_score(y_test, y_pred)
print(f"支持向量机准确率:{accuracy4:.4f}")

测试结果

结果表明逻辑回归在此项目中的分类效果较好。 

  • 20
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值