[kaggle竞赛实践3] Titanic幸存预测问题--朴素贝叶斯解决方法

本文介绍了一种使用朴素贝叶斯方法解决kaggle Titanic竞赛的生存预测问题,虽然得分74.641,可能受限于标量数据处理。通过先验概率和最大似然概率计算事件可能性,将任务转化为计算不同特征的存活率和死亡率。讨论了如何处理连续和离散特征,以及朴素贝叶斯假设和潜在问题,包括数据分布、离散化和概率计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这次我们使用朴素贝叶斯的方法来解决这个问题,我的这个方法还是没有得很高的分数,74.641,归根可能是标量数据处理不够到位,因此瓶颈总是过不去,不是朴素贝叶斯算法的问题。

贝叶斯通过先验概率和最大似然概率去估计事件出现的可能性。
  P(存活与否 | 基本条件)*P(基本条件)=P( 基本条件|存活与否 )*P(存活与否 )

  对式子进行化简
  P(存活与否 | 多组条件)=P( 多组条件|存活与否)*存活率   (如果各个条件相互独立存在,那么有如下的推论)
                                       =P(条件1|存活)*P(条件2|存活)*...*P(条件n|存活)*存活率

       于是,我们的任务就转换为分别使用幸存者和死亡者的数据,分别计算各个特征的存活率和死亡率。

然后根据测试样本具备的特征组,将各个特征乘起来,就可以得到具备这组条件的人的p(多组条件|存活)和p(多组条件|死亡) 最大似然概率,然后各自分别和先验概率:整体存活率和整体的死亡率相乘,计算具备这组条件生还和死亡的最终概率。比较下面两个概率那个大,判断生死。

       P(基本条件|死亡) *p(整体死亡率)            P(基本条件|存活) *p(整体存活率)

      那个更大,我们就预测那个可能性更大。


数据处理和朴素贝叶斯py

# -*- coding: utf-8 -*-
'''
Created on Oct 12, 2010
Decision Tree Source Code for Machine Learning in Action Ch. 3
@author: Peter Harrington
'''
from math import log
import operator
import numpy as np
from numpy import *
import pandas as pd
from kaggleJudge import *
import kaggleJudge as kj
import treePlotter as tp
import random
import scipy as sp


def cleanData(dataframe):
    df=dataframe
            
    #判断字段的空值状况,自动化
    df.isnull().sum()  #通过判断为空的数量,来判断为空的数目,其中False=0,True=1嘛

    #整理字段
    df['Gender']=df['Sex'].map({'male':0,'female':1}).astype(int)
    df=df.drop(['Cabin','Sex','Name','Ticket'],axis=1)
    
    #填充空值字段
    #按照gender,class进行groupby聚类然后填充这个分组的平均值
    ageArr=np.zeros((2,3))
    for i in range(2):
        for j in range(3):
            ageArr[i,j]=df[  (df['Gender']==i) &  (df['Pclass']==j+1) ]['Age'].dropna().mean()
            # 自我赋值df[  (df['Gender']==i) &  (df['Pclass'
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值