泰坦尼克数据集训练集共有1309项,经过数据预处理会产生feature(9个)与label标签字段(是否生存?1:是,2:否),最后输入多层感知器模型训练,之后进行预测
1.下载数据集
所需模块

下载地址
url='http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic3.xls'
设置文件存储路径:(要自己新建data文件夹路径,不然会报错不存在文件夹,后面的文件名一定要写上,虽然我们本地没有该文件)
filepath='C:\Users\zhangsheng\Desktop\Untitled Folder\data\titanic3.xls'
判断文件是否存在,不存在就会下载
if not os.path.isfile(filepath):
result=urllib.request.urlretrieve(url,filepath)
print('download:',result)
2.使用pandas 的DataFrame读取数据并进行预处理
导入所需的模块,并使用pandas的read_excel()方法把xls文件读取到DataFrame
然后查看前两项旅客数据

(注意这里先要安装xlrs模块,要不然会报错没有该模块)
上面字段的survival是label标签,也就是我们要预测的目标,其余都是特征字段
并且ticket(船票号码)和cabin(舱位号码)与预测结果无关,将其忽略。
我们选择一下字段到DataFrame中,并显示前两项

还有以下问题必须处理!!!!
name 姓名字段在训练时不需要,必须先删除,但在预测阶段会使用
age 有些项的age字段是null,必须将null改为平均值
fare 同age
sex 性别字段是文字,需转换为0和1
embarked 登船港口有三个分类 需使用One-Hot Encoding 转换
3.数据预处理
-
使用drop方法 删除name
df = all_df.drop(['name'],axis=1)
找出含有null值的字段
图片.png
计算age的平均值 age_mean,然后将null值替换为平均值,fare同理
图片.png
性别字段是文字,使用map方法 转换为0,1
将embarked字段转换为一位有效编码
查看转换后的DataFrame

4.将DataFrame转换为Array

第一个字段是label,后面的是features
提取features和label
Label = ndarray[:,0] #冒号提取所有项,0字段是标签
Features = ndarray[:,1:]#冒号提取所有项,1:提取第一至最后字段,即特征
查看前两项:

5.将ndarray特征字段标准化
使用preprocessing.MinMaxScaler标准化,参数feature_range设置标准化的范围(0,1)

6.将数据分为训练集和测试集
按照8:2的比例,使用numpy.random.rand产生msk

定义数据预处理的函数:将之前的预处理命令全部收集在函数中
对训练数据和测试数据预处理

网友评论