kaggle Titanic心得

Titanic是kaggle上一个练手的比赛,kaggle平台提供一部分人的特征,以及是否遇难,目的是预测另一部分人是否遇难。目前抽工作之余,断断续续弄了点,成绩为0.79426。
在这个比赛过程中,接触并了解了一些数据挖掘比赛的基本流程,现记录一下。

1. 分析数据

  1. 因为数据量比较小,train有800多条数据,test有400多条数据,因此这里用了execl的数据透视表分析。
  2. 同时python提供pandas库,可以很好的分析数据。

2. 缺失值填充

关于Age,Fare,Embarked三个字段有缺失,官方给了个利用中位数或者众数的做法,同样的我们也可以利用随机森林等机器学习模型来填补缺失值。当然这里我采用的官方的做法,效果不错。

##利用众数填充Embarked缺失值prodata.Embarked[ prodata.Embarked.isnull() ] = prodata.Embarked.dropna().mode().values##利用中位数填充Age缺失值median_age = prodata[‘Age‘].dropna().median()prodata.loc[ (prodata.Age.isnull()), ‘Age‘] = median_age##根据Pclass将人分成3组,然后利用每组的中位数填充Fare缺失值median_fare = numpy.zeros(3)for f in range(0,3):    median_fare[f] = prodata[prodata.Pclass == f+1 ][‘Fare‘].dropna().median()for f in range(0,3):   prodata.loc[ (prodata.Fare.isnull()) & (prodata.Pclass == f+1 ), ‘Fare‘] = median_fare[f]

3. 数据处理

3.1 转换为虚拟变量

数据中常常有无法比较大小的值,比如Embarked代表去哪个地方,这个时候如果要使用lr这类的模型,我们需要将Embarked变为虚拟变量,也是哑变量。
举个例子:Embarked这里取得3种值,假设为A、B、C。这里我们就可以用2个新特征标识Embarked,分别是Embarked_A、Embarked_B。

Embarked = “A” => Embarked_A = 1 Embarked_B = 0

Embarked = “B” => Embarked_A = 0 Embarked_B = 1

Embarked = “C” => Embarked_A = 0 Embarked_B = 0

这里不能再添加一个新的特征Embarked_C,原因是如果在添加一个特征会使得特征完全共线性,导致模型无法估计。具体详细见虚拟变量陷阱

##将Embarked转换为哑变量dummies_df = pandas.get_dummies(prodata.Embarked)dummies_df = dummies_df.rename(columns=lambda x:‘Embarked_‘+str(x))prodata = pandas.concat([prodata,dummies_df.iloc[:,:-1]],axis=1)

3.2 归一化

归一化的方法有很多,比如线性函数归一化,Z-score标准化。后者要求原始数据分布为正态分布。

##标准化归一化Ageprodata[‘Age_Scaled‘] = preprocessing.StandardScaler().fit_transform(prodata.Age)

3.3 离散化(分区间)

将数值类的数据划分成几个区间,这里采用的分位数划分pandas.qcut。

##将Age分成6个区间,然后变化成区间idAge_bin = pandas.qcut(prodata.Age, 6)prodata[‘Age_bin_id‘] = pandas.factorize(Age_bin)[0]+1

3.4 数据平滑

因为Fare这一列有一些为0的数据,因此对等于0的部分,稍微做一些平滑处理。

##平滑处理Fare为0的数据prodata[‘Fare‘][numpy.where(prodata[‘Fare‘]==0)[0]] = prodata[‘Fare‘][prodata.Fare.nonzero()[0] ].min() / 100

4. 提炼高级特征

  1. 参照了别人的博客,从Name里面提炼了一些Mr,Mrs等特征,然后转换成哑变量。
  2. 对一些特征进行加减乘除,在下一步降维,以及特征筛选的时候使用。

5. 降维以及特征筛选

5.1 PCA降维

参照博客,对lr使用了PCA降维,但是效果并不好。

X = prodata.values[:, 1::]y = prodata.values[:, 0]   variance_pct = .99pca = PCA(n_components=variance_pct)    X_transformed = pca.fit_transform(X,y)    pcaDataFrame = pandas.DataFrame(X_transformed)

5.2 特征筛选

针对如此多的特征,这里可以根据随机森林在训练之后产生的一个特征重要性来筛选特征。

forest = forest.fit( train_data[0::,1::], train_data[0::,0] )feature_importance = forest.feature_importances_feature_importance = 100.0 * (feature_importance / feature_importance.max())fi_threshold = 10important_idx = numpy.where(feature_importance > fi_threshold)[0]important_features = prodata[‘‘][important_idx]print "\n", important_features.shape[0], "Important features(>", \    fi_threshold, "% of max importance)...\n"#, \    important_featuressorted_idx = numpy.argsort(feature_importance[important_idx])[::-1]get the figure about important featurespos = numpy.arange(sorted_idx.shape[0]) + .5plt.subplot(1, 2, 2)plt.title(‘Feature Importance‘)plt.barh(pos, feature_importance[important_idx][sorted_idx[::-1]], \        color=‘r‘,align=‘center‘)plt.yticks(pos, important_features[sorted_idx[::-1]])plt.xlabel(‘Relative Importance‘)plt.draw()     plt.show()train_df = train_df.iloc[:, important_idx].iloc[:, sorted_idx].valuestest_df = test_df.iloc[:,important_idx

6. 交叉验证

sklearn自带有cross_validation,可以进行交叉验证。具体的cross_validation用法参考:Cross-validation: evaluating estimator performance

cross_validation.cross_val_score(lr,train_data[0::,1::],train_data[0::,0],cv=5,scoring=‘precision‘)

7. 参考资料:

  1. 【原】关于使用sklearn进行数据预处理 —— 归一化/标准化/正则化:http://www.cnblogs.com/chaosimple/p/4153167.html
  2. kaggle数据挖掘竞赛初步:http://www.cnblogs.com/north-north/p/4353365.htmlhttp://www.cnblogs.com/north-north/p/4354775.htmlhttp://www.cnblogs.com/north-north/p/4358084.htmlhttp://www.cnblogs.com/north-north/p/4360121.html
  3. Kaggle系列——Titanic 80%+精确度纪录:http://blog.csdn.net/yobobobo/article/details/48194021
  4. wiki 哑变量:https://en.m.wikipedia.org/wiki/Dummy_variable_%28statistics%29
  5. PCA:http://sebastianraschka.com/Articles/2014_pca_step_by_step.html
  6. scikit-learn中PCA的使用方法: http://blog.csdn.net/u012162613/article/details/42192293
  7. 干货:结合Scikit-learn介绍几种常用的特征选择方法:http://dataunion.org/14072.html?utm_source=tuicool
  8. Cross-validation: evaluating estimator performance:http://scikit-learn.org/stable/modules/cross_validation.html

分类: MachineLearning

标签: MachineLearning

时间: 2024-08-26 06:32:18

kaggle Titanic心得的相关文章

kaggle Titanic

# coding: utf-8 # In[19]: # 0.78468 # In[20]: import numpy as np import pandas as pd import warnings warnings.filterwarnings('ignore') from sklearn import preprocessing # In[21]: train_path = r'C:\Users\cbattle\Desktop\train.csv' # r'/home/adminn/桌面/

七步精通Python机器学习 转

开始.这是最容易令人丧失斗志的两个字.迈出第一步通常最艰难.当可以选择的方向太多时,就更让人两腿发软了. 从哪里开始? 本文旨在通过七个步骤,使用全部免费的线上资料,帮助新人获取最基本的 Python 机器学习知识,直至成为博学的机器学习实践者.这篇概述的主要目的是带领读者接触众多免费的学习资源.这些资源有很多,但哪些是最好的?哪些相互补充?怎样的学习顺序才最好? 我假定本文的读者不是以下任何领域的专家: ?  机器学习 ?  Python ?  任何Python的机器学习.科学计算.数据分析库

Python (1) - 7 Steps to Mastering Machine Learning With Python

Step 1: Basic Python Skills install Anacondaincluding numpy, scikit-learn, and matplotlib Step 2: Foundational Machine Learning Skills Unofficial Andrew Ng course notes Tom Mitchell Machine Learning Lectures Step 3: Scientific Python Packages Overvie

七步精通Python机器学习--转载

作者简介: Matthew Mayo    翻译:王鹏宇 开始.这是最容易令人丧失斗志的两个字.迈出第一步通常最艰难.当可以选择的方向太多时,就更让人两腿发软了. 从哪里开始? 本文旨在通过七个步骤,使用全部免费的线上资料,帮助新人获取最基本的 Python 机器学习知识,直至成为博学的机器学习实践者.这篇概述的主要目的是带领读者接触众多免费的学习资源.这些资源有很多,但哪些是最好的?哪些相互补充?怎样的学习顺序才最好? 我假定本文的读者不是以下任何领域的专家: 机器学习 Python 任何Py

Spark学习笔记——泰坦尼克生还预测

package kaggle import org.apache.spark.SparkContext import org.apache.spark.SparkConf import org.apache.spark.sql.{SQLContext, SparkSession} import org.apache.spark.mllib.regression.LabeledPoint import org.apache.spark.mllib.classification.{LogisticR

【转】数据分析

详解 Kaggle 房价预测竞赛优胜方案:用 Python 进行全面数据探索 方法框架: 理解问题:查看每个变量并且根据他们的意义和对问题的重要性进行哲学分析. 单因素研究:只关注因变量( SalePrice),并且进行更深入的了解. 多因素研究:分析因变量和自变量之间的关系. 基础清洗:清洗数据集并且对缺失数据,异常值和分类数据进行一些处理. 检验假设:检查数据是否和多元分析方法的假设达到一致. 介绍:箱线图 数据异常值 箱形图为我们提供了识别异常值的一个标准:异常值被定义为小于Q1-1.5I

泰坦尼克号生存预测

从Kaggle官网下载数据:train .test. 赛事描述: 泰坦尼克号的沉没是历史上最臭名昭著的沉船之一.1912年4月15日,泰坦尼克号在处女航时与冰山相撞沉没,2224名乘客和船员中有1502人遇难.这一耸人听闻的悲剧震惊了国际社会,并导致更好的船舶安全法规.船难造成如此巨大的人员伤亡的原因之一是船上没有足够的救生艇供乘客和船员使用.虽然在沉船事件中幸存下来是有运气因素的,但有些人比其他人更有可能存活下来.比如妇女.儿童和上层阶级. 在此次比赛中,我们需要参赛者预测哪一类人更有可能存活

python3中的os.path模块

os.path模块主要用于获取文件的属性,这里对该模块中一些常用的函数做些记录. os.abspath(path):获取文件的绝对路径.这里path指的是路径,例如我这里输入“data.csv” [In] os.path.abspath('data.csv') [Out] 'E:\\kaggle\\Titanic\\data.csv' os.path.basename(path):获取文件名称.该函数默认通过 ‘\’来截取字符串获取文件名,返回最后一个'\'符号后面的内容 [In] os.pat

[kaggle入门] Titanic Machine Learning from Disaster

Titanic Data Science Solutions¶ https://www.kaggle.com/startupsci/titanic-data-science-solutions 数据挖掘竞赛七个步骤:¶ Question or problem definition. Acquire training and testing data. Wrangle, prepare, cleanse the data. Analyze, identify patterns, and explo