唐宇迪《python数据分析与机器学习实战》学习笔记
14案例实战:泰坦尼克获救预测
文章目录
目的:将之前学过的机器学习算法应用在实际场景中,这里使用的是泰坦尼克号获救数据
一、数据观察与预处理
数据如下:1列为编号,2列为是否存活(标签),然后分别为船舱等级、姓名、性别、年龄、船上多少个亲人(SibSp)、船上你的老人+孩子多少个(Parch)、船票编号(Ticket)、船票价格(Fare)、船舱位(Cabin缺失多)、上船码头(Embarked)。
1.1 数据导入
数据导入,并统计一下每个特征:发现age有缺失值。(备注:现在传入的数据,为训练数据集)
import pandas
titanic = pandas.read_csv('titanic_train.csv')
print(titanic.describe())
1.2 缺失值填充
这里利用平均年龄对缺失值进行填充:
titanic['Age'] = titanic['Age'].fillna(titanic['Age'].median())
print(titanic.describe())
1.3 字符量映射为数值量
print (titanic['Sex'].unique()) #看一下这列有几种可能性,这里两种
titanic.loc[titanic['Sex']== 'male','Sex']=0 #男士映射为0
titanic.loc[titanic['Sex']=='female','Sex']=1 #女士映射为1
[‘male’ ‘female’]
print (titanic['Embarked'].unique())
titanic['Embarked'] = titanic['Embarked'].fillna('S') #众数填充
titanic.loc[titanic['Embarked']== 'S','Embarked']=0
titanic.loc[titanic['Embarked']=='C','Embarked']=1
titanic.loc[titanic['Embarked']=='Q','Embarked']=2
[‘S’ ‘C’ ‘Q’ nan]
二、模型训练及预测
下面我们分别用线性模型、逻辑回归、随机森林这三种机器学习算法模型来分析这个案例,就是分析生存率
2.1 .线性回归模型
首次使用线性回归算法进行分类,数据交叉验证分割为3份,每份轮流作验证集,其他作训练集
from sklearn.linear_model import LinearRegression
#导入线性回归
from sklearn.model_selection import KFold
#交叉验证,把训练数据集分成三份,1份验证2份训练模型,最后取平均值
predictors = ['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare', 'Embarked']
#要给我的分类器哪些特征
alg = LinearRegression()
# kf = KFold(titanic.shape[0], n_folds=3, random_state=1) 写法错误已被弃用
kf = KFold(n_splits=3,shuffle=False, random_state=1)#shuffle每次划分时是否洗牌 random_state随机种子数
predictions = [] #装预测结果
#for train,test in kf 写法错误已被弃用
for train, test in kf.split(titanic): #3份轮流当测试和验证
#得到训练集的特征与标签
train_predictors = (titanic[predictors].iloc[train,:])#特征,用iloc选出作为训练集标签的行
train_target = titanic['Survived'].iloc[train] #标签
alg.fit(train_predictors,train_target) #建模
#传入验证集的特征值,进行预测
test_predictions = alg.predict(titanic[predictors].iloc[test,:])
#每次加入结果(一大堆概率值),共三次,组成拥有3个数组的数组数据。
predictions.append(test_predictions)
接着算出线性回归准确率,将刚才得到的预测值中的3个数组合并,然后以0.5为分界值将结果映射,计算准确率
import numpy as np
#这些预测在三个独立的numpy数组中。把它们连接成一个。
predictions = np.concatenate(predictions,axis=0)
# 映射成分类结果,计算准确率
predictions[predictions > .5] = 1
predictions[predictions <= .5