新手:《泰坦尼克号》机器学习 生存率 分析 titanic 数据

机器学习实测 titanic 数据

首先我们需要三个数据集 这里我放在了一个github里面。
数据集地址
这里包含了三个csv文件。如下:

在这里插入图片描述

  • 第一个包含部分 id 与存活,也就是我们要的test。
  • 第二个文件也是test
  • 第三个文件是我们需要的训练集 也就是train
    我们需要从以上三个文件中分离出需要的一下数据。
X_train,y_train
X_test,y_test
我们需要的步骤:
机器学习 对titanic数据存活率的预测分析 
1.对数据进行查看,并分析数据的有效与无效
2.对已经分析的数据进行处理,使数据完整并可靠
3.因为模型不能对字符串数据进行处理,为了可视化,我们需要将部分字符类数据转化为数字 ,例如 存活为1 死亡为0
4.提取需要的训练集和测试集dataframe格式
5.加入模型并运行
6.查看模型运行情况
第一步:
import pandas as pd
from IPython.display import display
# 查看数据
train=pd.read_csv('train.csv')
test=pd.read_csv('test.csv')
#这里用一个display查看大体情况 并且易于构造代码
#display(test)

这里我用了display查看数据,之后将他注释掉了。
我们需要去除掉,影响不大的,过于难以分析,缺失率过高的数据
这里我们首先看,缺失率,可以用for循环与dataframe的columns方法,检查缺失率

#查看缺失率 利用for循环
for column in train.columns:
    print("name:{0} miss rate:{1:.2f} ".format(column,1-train[column].count()/len(train)))
for column in test.columns:
    print("name:{0} miss rate:{1:.2f} ".format(column,1-test[column].count()/len(train)))

之后我们将需要剔除的数据剔除。

train,test= train.drop(columns=['PassengerId', 'Name', 'Ticket', 'Cabin']),test.drop(columns=['PassengerId', 'Name', 'Ticket', 'Cabin'])

填补空缺

#用Age平均值(也可以选取众数)填补空缺
train['Embarked'] = train['Embarked'].fillna('S')
test['Embarked'] = test['Embarked'].fillna('S')
train['Age'] = train['Age'].fillna(int(train['Age'].mean()))
test['Age'] = test['Age'].fillna(int(test['Age'].mean()))
test['Fare'] = test['Fare'].fillna(float(test['Fare'].dropna().mode()[0]))#这里注意众数不唯一因此得到的是一个列表,我们用到第一个元素便可

之后,考虑到模型不能对字符串进行处理,因此我们需要对字符串型数据进行处理。这里我利用的方法是对各列数据进行编号,我在我彭朋友的博客中看到他利用了一个特征转换器,因为我对其还不熟练,因此不用它。

train.loc[train["Sex"]=="male","Sex"] = 0; 
train.loc[train["Sex"]=="female","Sex"] = 1;
train.loc[train["Embarked"]=="S","Embarked"] = 0; 
train.loc[train["Embarked"]=="C","Embarked"] = 1;
train.loc[train["Embarked"]=="Q","Embarked"] = 2;
test.loc[test["Sex"]=="male","Sex"] = 0; 
test.loc[test["Sex"]=="female","Sex"] = 1;
test.loc[test["Embarked"]=="S","Embarked"] = 0; 
test.loc[test["Embarked"]=="C","Embarked"] = 1;
test.loc[test["Embarked"]=="Q","Embarked"] = 2;

代码看起来很冗长,确实没有特征转化器方便,建议大家还是去看看特征转换器。
经检查数据没有问题之后,我们就开始提取xytrain和xytest。

result=pd.read_csv('gender_submission.csv')#这里加载数据集
X_train,y_train=train.drop(columns=['Survived']),train['Survived']
X_test,y_test=test,result.drop(columns=['PassengerId'])

无误之后,我这里跑了三个模型:分别是knn,决策树分类器,和先行回归:
k邻近:

#填入knn模型
print("k邻近:")
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)
y_predict = knn.predict(X_test)
print(y_predict)
print('train score: {:.2f}'.format(knn.score(X_train, y_train)))
print('test score: {:.2f}'.format(knn.score(X_test, y_test)))

决策树分类:

# 使用决策树分类器模型
print("决策树:")
from sklearn.tree import DecisionTreeClassifier
dtc = DecisionTreeClassifier()
dtc.fit(X_train, y_train)
Predict = dtc.predict(X_test)
print(Predict)
from sklearn.metrics import classification_report
print('train  score: {:.2f}'.format(dtc.score(X_train, y_train)))
print('test  score: {:.2f}'.format(dtc.score(X_test, y_test)))

线性回归:

#线性回归
print("线性回归:")
from sklearn.linear_model import LinearRegression
lr=LinearRegression()
lr.fit(X_train,y_train)
Predict =lr.predict(X_test)
print(Predict)
print('train  score: {:.2f}'.format(predict.score(X_train, y_train)))
print('test  score: {:.2f}'.format(predict.score(X_test, y_test)))

该任务的简单处理,总体不难,但是我没有进行调参等操作,因此分数可能不是很高。但是很适合新手如我一样的小伙伴学习。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值