Kaggle Titanic: Machine Learning from Disaster

这几天开始在Kaggle上实践一下一些机器学习的算法,这次用的是决策树(没有剪枝)。

题目意思是给出一部分泰坦尼克号上乘员的信息(几等舱,名字,性别。。。)和是否存活,要求预测另一部分人的生存情况

不论用什么算法,首先都要做数据处理:

1、名字:

外国人的名字中包含了本人身份和年龄信息(也就是‘Mr,Miss’这些),所以可以通过综合两个数据集统计其种类再对所有的名字归类

def initTicketSet(data):
	global ticketList
	ticketSet = set(ticketList)
	for row in data:
		temStr = str(row[-4])
		if not temStr.isdigit() and len(temStr) > 0:
			prefix = temStr.split()[0].replace('.', '')
			ticketSet.add(prefix)
	ticketList = list(ticketSet)
上面是统计部分的代码

2、几等舱,亲戚数量,性别

这三者也是重要参考因素,因为头等舱生存概率大的多而且在逃亡时人数会影响速度最终可能GG

至于性别,可以简单的统计发现妇女存活率会高很多

由于数据本身格式已经可以用了所以不加处理


3、年龄

首先考虑年龄与体力,以及道德素养间的关系再加上粗略的生存率统计可以发现年龄对生存率有极大的影响。

本文将年龄分为5种(0~10, 10~18, 18~35, 35~50, 50~100)。。全凭直觉分的。。

由于数据较为残缺,所以通过(几等舱, 名字特征, 亲朋, 家属, 票价)这几项建立决策树对年龄进行预测


4、票价

有网友说票价和生存率有线性关系,而且可以脑补的是有钱的仓位一定不错

通过Excel画图统计大概讲票价分为(0~10, 10~20, 20~40, 40~100, 100~600)


5、仓位,上船地点,票的编号

仓位对生存率有重要的影响,接近救生艇的仓位更容易活下来 。但是仓位信息非常残缺,所以又通过(上船地点,票的编号。。)这些建树预测


实际模型:

不知是什么原因加上仓位后的模型正确率还不如不加。。

所以实际模型只包含(1, 2, 3, 4)


分类函数代码:


def classify(tree, fetureNames, inX, defaultVal):
    firstStr = tree.keys()[0]
    fetureIndex = fetureNames.index(firstStr)
    childDict = tree[firstStr]
    classLabel = defaultVal
    flag = False
    for child in childDict.keys():
        if inX[fetureIndex] == child:
            if type(childDict[child]).__name__ == 'dict':
                classLabel = int(classify(childDict[child], fetureNames, inX, defaultVal))
            else :
                classLabel = int(childDict[child])
            flag = True
            break
    if not flag:
        tem = [0] * 50
        for child in childDict.keys():
            if type(childDict[child]).__name__ == 'dict':
                tem[classify(childDict[child], fetureNames, inX, defaultVal)] += 1
            else :
                tem[int(childDict[child])] += 1
        y = sorted(tem, reverse=True)
        if y[0] > y[1]:
            classLabel = tem.index(y[0])
    return classLabel
总计25次提交,最高0.78469

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值