泰坦尼克号之灾学习笔记

学习资料:寒小阳的博客
有几个点是非常重要的:
1)对数据的认识!!!对数据的认识!!!对数据的认识!!!
2)要做交叉验证!!!要做交叉验证!!!要做交叉验证!!!
3)模型融合!!!模型融合!!!模型融合!!!


1.目标:预测什么样的乘客有可能存活

2.数据初步分析:
1)和获救有关的特征有:舱位等级性别cabin项是否为空

2)对有许多缺失值的cabin属性来说,我们暂且分为yes和no两种属性

3)这里说一下通常处理缺失值的几种方法:

​ i)如果缺失的样本占总数极大,我们可能就直接舍弃了;因为如果作为特征加入的话,可能反倒带入噪音,影响最后的结果

​ ii)如果缺值的样本适中,且为非连续值特征属性,我们可以把nan作为一个新类别,加入到类别特征中

​ iii)如果缺值的样本适中,且为连续值特征属性,有时候可以考虑给定一个step(比如这里的age,我们可以考虑每隔2/3岁为一个步长),然后把它离散化,之后把nan作为一个type加到属性类目中

​ iv)如果缺失值得个数不是特别多,那我们也可以试着根据已有得值,拟合一下数据,补充上去


3.数据预处理:

1)用随机森林法填补缺失值
2)对类目型的特征因子化:用pd的get_dummies(),示例如下:

dummies_Sex_Pclass = pd.get_dummies(data_train['Sex_Pclass'],prefix='Sex_Pclass')

3)将变化幅度较大的特征缩放到[-1,1]之间:用sklearn里面的preprocessing模块


4.模型优化:

4.1模型系数关联分析:

pd.DataFrame({"columns":list(train_df.columns)[1:], "coef":list(clf.coef_.T)})#查看各特征和结果的相关系数(有这一步我们就可以不用自己用corr函数去算各个特征和最后结果的相关系数了)

4.2交叉验证:
交叉验证这一步主要是查看那些预测有误的样本,然后从这些样本挖掘我们没注意到的细节.比如构造新的特征。下面是察看预测有误的样本的代码:

split_train,split_cv = model_selection.train_test_split(df,test_size=0.3,random_state = 0)
train_df = split_train.filter(regex='Survived|Age_.*|SibSp|Parch|Fare_.*|Cabin_.*|Embarked_.*|Sex_.*|Pclass_.*')

clf=linear_model.LogisticRegression(C=1.0,penalty='l1',tol=1e-6)
clf.fit(train_df.as_matrix()[:,1:],train_df.as_matrix()[:,0])

cv_df = split_cv.filter(regex='Survived|Age_.*|SibSp|Parch|Fare_.*|Cabin_.*|Embarked_.*|Sex_.*|Pclass_.*')
predictions=clf.predict(cv_df.as_matrix()[:,1:])

origin_data_train = pd.read_csv('../input/train.csv')
bad_cases = origin_data_train.loc[origin_data_train['PassengerId'].isin(split_cv[predictions!=cv_df.as_matrix()[:,0]]['PassengerId'].values)]

4.3 构造新特征示例代码:

data_train['Sex_Pclass'] = data_train.Sex + "_" + data_train.Pclass.map(str)

4.4其它知识:
1)
pandas 中 inplace 参数在很多函数中都会有,它的作用是:是否在原对象基础上进行修改
​ inplace = True:不创建新的对象,直接对原始对象进行修改;
​ inplace = False:对数据进行修改,创建并返回新的对象承载其修改结果。


5.报错处理: 1)`Reshape your data either using array.reshape(-1, 1) if your data has a single feature or`,这个出错的原因在第7步的最后,对fare和age特征进行归一化时出现的,解决办法为再加一个中括号。 df[['Age']]就可以了,新的代码为:
import sklearn.preprocessing as preprocessing
scaler=preprocessing.StandardScaler()
age_scaler_para=scaler.fit(data_train[['Age']])
data_train['Age_Scaled']=scaler.fit_transform(data_train[['Age']],age_scaler_para)
fare_scaler_para=scaler.fit(data_train[['Fare']])
data_train['Fare_Scaled']=scaler.fit_transform(data_train[['Fare']],fare_scaler_para)

2)载入sklearn的cross_validation时显示cannot import name 'cross_validation',解决办法:把from sklearn import cross_validation改成from sklearn import model_selection,然后在下面需要用到cross_validation的地方统一改成model_selection。


6.写在最后:
1)完整的ipynotebook:寒小阳的github
2)更新包后的代码:https://www.kesci.com/home/project/5bfe39b3954d6e0010681cd1

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值