泰坦尼克号获救预测

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

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

  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)

结果展示

在这里插入图片描述

发布了9 篇原创文章 · 获赞 10 · 访问量 2508

猜你喜欢

转载自blog.csdn.net/qq_42281425/article/details/86490602