机器学习实战(三)kaggle titanic随机森林

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014744118/article/details/78515742

一、问题描述

kaggle平台是一个大数据商业化平台,在平台上有很多lab和企业会提出很多问题,解答相应的问题也许会有相应的奖金。本文中的titanic是入门级的竞赛题目。

题目大意是根据部分乘客的基本情况来预测其他乘客的生还情况。

二、分析数据

tmp = line.rstrip('\n').split(',')
分析csv训练集中的内容得到乘客基本情况包含以下12个字段字段:

  • PassengerId => 乘客ID
  • Pclass => 乘客等级(1/2/3等舱位)
  • Name => 乘客姓名
  • Sex => 性别
  • Age => 年龄
  • SibSp => 堂兄弟/妹个数
  • Parch => 父母与小孩个数
  • Ticket => 船票信息
  • Fare => 票价
  • Cabin => 客舱
  • Embarked => 登船港口

查看数据是否有缺失:

data_train.info()

从图中可以看出,age和cabin字段有缺失数据。

三、数据处理

1、age缺失采用平均值填充

def processAgeorFare(age):
	ageWithoutBlanks=[]
	for x in age:
		if (x != ""): 
			ageWithoutBlanks.append(x)
	ageWithoutBlanks = [float(x) for x in ageWithoutBlanks]
	mean = sum(ageWithoutBlanks) / float(len(ageWithoutBlanks))
	my_range = max(ageWithoutBlanks) - min(ageWithoutBlanks)
	for x in range(0,len(age)):
		if (age[x] == ""): 
			age[x] = mean
	age = [float(x) for x in age]
	age = [(x-mean)/my_range for x in age]
	return age
2、对cabin数据缺失采用有值标为1,没值标为-1

def processCabin(cabin):
	cabinToNum=[]
	for x in gender:
		if (x == ""):
			cabinToNum.append(-1)
		else:
			cabinToNum.append(1)
	return cabinToNum
3、gender采用男性标为-1,女性标为1,从数据分析中女性存活率较大

4、name属性,分析数据中发现有title的乘客存活几率较大,所以有title的乘客标识为1,无title的用户标识为-1

5、embark属性,s港口上岸标识为-1,q港口上岸标为1,c和空白港口标识为0

6、其他属性都采用归一化处理

def process(pclass):
	pclass = [float(x) for x in pclass]
	mean = sum(pclass) / float(len(pclass))
	my_range = max(pclass) - min(pclass)
	pclass = [(x-mean)/my_range for x in pclass]
	return pclass
7、passengerId属性不处理

四、模型选择

分别采用KNN、SVM、贝叶斯、线性回归、决策树和随机森林使用skitlearn默认参数发现随机森林的准确率最高,随后对参数做出反复调整,最终在kaggle上的准确率为79+。

五、改进思路

1、对缺失值采用随机森林进行预测填充;

2、对参数进行优化;

3、采用多模型混合预测。













猜你喜欢

转载自blog.csdn.net/u014744118/article/details/78515742