版权声明:本文为博主原创文章,未经博主允许不得转载。 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缺失采用平均值填充
扫描二维码关注公众号,回复:
3702486 查看本文章
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、采用多模型混合预测。