泰坦尼克号遇难预测 您所在的位置:网站首页 java朴素贝叶斯分类器实例 泰坦尼克号遇难预测

泰坦尼克号遇难预测

2024-07-18 04:52| 来源: 网络整理| 查看: 265

题目来源https://www.kaggle.com/c/titanic,

train.csv和test.csv分别为训练集和测试集(生还未知),建模之前必须进行必要的数据分析,比如将一些无关的列剔除掉,在这里只是简单的考量,实际工程中可能还要考虑数据的分布情况,比如均值、方差、每种属性下的存还比率等,并且将训练中的缺失记录剔除掉,利用平均值补齐测试集缺失值(也可以用预测的方法因为缺失不是很多),最终与官网提供的参考相比正确率已达到96.4%,结果存入submission.csv,当然还可以用其他方法进行分类,决策树、神经网络、SVM等,由于train全部用来训练,没有验证集,故没做交叉验证。

一般做题步骤:

1.通读变量,了解大致情况

2.对数据有一个宏观,如用datatrain['Age'].describe(),简单查看数据是否有误

3.关联分析,观察哪些变量会和预测目标关系比较大,哪些变量之间会有较强的关联

 

numeric_features = datatrain.select_dtypes(include=[np.number])#提取数值型列

corr = numeric_features.corr()#相关性分析

print (corr['survived'].sort_values(ascending=False)[:5], '\n')#提取前五正相关变量

print (corr['survived'].sort_values(ascending=False)[-5:])#提取前五负相关变量

4.查看缺失值,当缺失较多的列可删除,其他可用数据0或平均值等填补

datatrain.isnull().sum()

5.去除极端值数据

datatrain= datatrain[datatrain['Age'] < 130]

6.某些模型需要把数据变量转化为正态分布

7.构造特征:

数值变类别、类别变顺序数值、多类别简化类别(多个归为一类)、利用多类别进行多项式\简单算法运算、利用get_dummies将类别变量转换成新增的虚拟变量/指示变量(0、1)

    上述的特征处理步骤因题而已,参考http://wemedia.ifeng.com/16578677/wemedia.shtml

其中train数据(.csv逗号分隔符文件建议用notepad++打开,此处是excel打开)

test数据

  # -*- coding:utf-8 -*- # 导入后续需要用到的库文件 import numpy as np import pandas as pd import matplotlib.pylab as plt from sklearn.preprocessing import StandardScaler from sklearn.naive_bayes import BernoulliNB # 伯努利模型 # 读取数据并查看,第一步 datatrain = pd.read_csv("train.csv") data_test = pd.read_csv("test.csv") # print(datatrain.shape) # 892,12 # print(datatrain.isnull().sum()) #发现age(177)、carbin(687)、embarked(2)有缺失 # 选取数据集特征,去掉几种无用特征 datatrain = datatrain.drop(labels=['PassengerId', 'Name', 'Ticket', 'Cabin'], axis=1) print(datatrain.head()) # 去除缺失值 datatrain = datatrain.dropna() # 属性转化为数值型 datatrain_dummy = pd.get_dummies(datatrain[['Sex', 'Embarked']]) # 编码后和数据拼接 datatrain_conti = pd.DataFrame(datatrain, columns=['Survived', 'Pclass', 'Age', 'SibSp', 'Parch', 'Fare'], index=datatrain.index) datatrain = datatrain_conti.join(datatrain_dummy) X_train = datatrain.iloc[:, 1:] y_train = datatrain.iloc[:, 0] # 对test文件进行同样处理,去掉几种无用特征 datatest = data_test.drop(labels=['PassengerId', 'Name', 'Ticket', 'Cabin'], axis=1) # print(datatest.head()) # print(datatest.isnull().sum()) # age、Fare有缺失 datatest = datatest.fillna(datatesan()['Age':'Fare']) # 填补缺失值 print(datatest.isnull().sum()) datatest_dummy = pd.get_dummies(datatest[['Sex', 'Embarked']]) datatest_conti = pd.DataFrame(datatest, columns=['Pclass', 'Age', 'SibSp', 'Parch', 'Fare'], index=datatest.index) datatest = datatest_conti.join(datatest_dummy) X_test = datatest # 标准化 stdsc = StandardScaler() X_train_conti_std = stdsc.fit_transform(X_train[['Age', 'SibSp', 'Parch', 'Fare']]) X_test_conti_std = stdsc.fit_transform(X_test[['Age', 'SibSp', 'Parch', 'Fare']]) # 将ndarray转为datatrainframe X_train_conti_std = pd.DataFrame(data=X_train_conti_std, columns=['Age', 'SibSp', 'Parch', 'Fare'], index=X_train.index) X_test_conti_std = pd.DataFrame(data=X_test_conti_std, columns=['Age', 'SibSp', 'Parch', 'Fare'], index=X_test.index) # 有序分类变量Pclass X_train_cat = X_train[['Pclass']] X_test_cat = X_test[['Pclass']] # 无序已编码的分类变量 X_train_dummy = X_train[['Sex_female', 'Sex_male', 'Embarked_C', 'Embarked_Q', 'Embarked_S']] X_test_dummy = X_test[['Sex_female', 'Sex_male', 'Embarked_C', 'Embarked_Q', 'Embarked_S']] # 拼接为datatrainframe X_train_set = [X_train_cat, X_train_conti_std, X_train_dummy] X_test_set = [X_test_cat, X_test_conti_std, X_test_dummy] X_train = pd.concat(X_train_set, axis=1) X_test = pd.concat(X_test_set, axis=1) clf = BernoulliNB() clf.fit(X_train, y_train) predicted = clf.predict(X_test) data_test['Survived'] = predicted.astype(int) data_test[['PassengerId','Survived']].to_csv('submission.csv', sep=',', index=False)

 

 

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有