泰坦尼克号获救预测

泰坦尼克号获救人员预测(机器学习)

对已知的泰坦尼克号数据进行模型训练,得到效果相对好的线性回归模型,本文采用感知机和

  1. 加载相关库文件
  2. 进行数据的预处理
  3. 采用交叉验证的方式,将数据集分成训练集和验证集
  4. 用感知机模型进行训练

插入相关的库:

import pandas
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import KFold
import  numpy as np

pandas库进行数组运算, sklearn.linear_model 中LinearRegression 是线性回归模型,KFold 是进行交叉运算。

对train.cvs数据进行提取,并且进行预处理

titannic=pandas.read_csv("train.csv")  #读取train.cvs 文件,默认后存储的文件格式是dataframe
titannic["Age"]=titannic["Age"].fillna(titannic["Age"].median()) #补全Age的空缺值 
titannic.loc[titannic["Sex"]=="male","Sex"]=0  #.loc意思是定位与titannic[]中符合条件的行列
titannic.loc[titannic["Sex"]=="female","Sex"]=1
titannic["Embarked"]=titannic["Embarked"].fillna('S')
titannic.loc[titannic["Embarked"] == "S","Embarked"] = 0
titannic.loc[titannic["Embarked"] == "C","Embarked"] = 1
titannic.loc[titannic["Embarked"] == "Q","Embarked"] = 2 #将数据中的文本转化为可以进行权重计算的数值
predictors=["Pclass" , "Sex" , "Age" , "SibSp" , "Parch" , "Fare" , "Embarked"]

将数据分成训练集和验证集,分别对不同的训练集和验证集进行验证和训练

alg=LinearRegression()
kf=KFold(n_splits=5,shuffle=False,random_state=0)
predictions=[]
for train , test in kf.split(titannic[predictors]): #对划分后的数据进行提取
    train_predictors=(titannic[predictors].iloc[train, :])
    train_taget=titannic["Survived"].iloc[train]
    alg.fit(train_predictors,train_taget) #开始训练
    test_predictions=alg.predict(titannic[predictors].iloc[test, :]) #开始预测
    predictions.append(test_predictions) #将预测集结果放入预测数组
predictions=np.concatenate(predictions,axis=0) 

KFold函数作用:对数据进行训练集和验证集的拆分,并且在打上train和 test 标签 sklearn.model_selection库中,cross_validation库已经弃用,故而用法修改。

n_splits=n,即 将数据拆分为五份,每一份都做为一次验证集,其余四份作为训练集。
shuffle= true or fulse

①若为Falses时,其效果等同于random_state等于整数,每次划分的结果相同

②若为True时,每次划分的结果都不一样,表示经过洗牌,随机取样的

random_state:随机种子数,效果未知==!

numpy.concentrare 拼接数组的作用,axis=0表示为纵向拼接作用, axis=1,表示为横向拼接的作用

predictions[predictions>0.5]=1
predictions[predictions<=0.5]=0
pd=titannic["Survived"].values #titannic为字典,去其中的value值
accuracy=1-np.mean(np.abs(predictions-pd)) #两者的数字相同则为0 不同则为1,则平均值为错误率。
print(accuracy)

总的代码

import pandas
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import KFold
import  numpy as np
titannic=pandas.read_csv("train.csv")
titannic["Age"]=titannic["Age"].fillna(titannic["Age"].median())
titannic.loc[titannic["Sex"]=="male","Sex"]=0
titannic.loc[titannic["Sex"]=="female","Sex"]=1
titannic["Embarked"]=titannic["Embarked"].fillna('S')
titannic.loc[titannic["Embarked"] == "S","Embarked"] = 0
titannic.loc[titannic["Embarked"] == "C","Embarked"] = 1
titannic.loc[titannic["Embarked"] == "Q","Embarked"] = 2
predictors=["Pclass" , "Sex" , "Age" , "SibSp" , "Parch" , "Fare" , "Embarked"]
alg=LinearRegression()
kf=KFold(n_splits=5,shuffle=False,random_state=0)
predictions=[]
for train , test in kf.split(titannic[predictors]):
    train_predictors=(titannic[predictors].iloc[train, :])
    train_taget=titannic["Survived"].iloc[train]
    alg.fit(train_predictors,train_taget)
    test_predictions=alg.predict(titannic[predictors].iloc[test, :])
    predictions.append(test_predictions)
predictions=np.concatenate(predictions,axis=0)
predictions[predictions>0.5]=1
predictions[predictions<=0.5]=0
pd=titannic["Survived"].values
accuracy=1-np.mean(np.abs(predictions-pd))
print(accuracy)

结果展示

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值