Titanic学习之Cabin中的仓位特征

仓位长这样,C123,一共有ABCDEFGT,8种仓位。之前我在进行数据预处理的时候,直接把仓位分成有仓位和无仓位,其实这样是有点问题的,有仓位的也有200多位,占了1/4还多,那就来看看各仓位以及无仓位之间获救的概率。

data_train.Cabin[data_train.Cabin.isnull()]='X'#将无仓位的数据直接标记位X
known_cabin = data_train[data_train.Cabin.notnull()]
known_cabin['Cabin']=known_cabin['Cabin'].apply(lambda x: x[0])#有仓位的首字母就是其仓位的位置
data_train.loc[ (data_train.Cabin.notnull()), 'Cabin' ] = known_cabin['Cabin']#用修改后的cabin来填充原来的cabin

fig = plt.figure()
fig.set(alpha=0.2)  # 设定图表颜色alpha参数
Survived_0 = data_train.Cabin[data_train.Survived == 0].value_counts()
Survived_1 = data_train.Cabin[data_train.Survived == 1].value_counts()
Survived_rate=Survived_1/(Survived_1+Survived_0)
df=pd.DataFrame({u'获救':Survived_rate})
df.plot(kind='bar', stacked=True)
plt.title(u"各仓位的获救比率")
plt.xlabel(u"仓位")
plt.ylabel(u"人数")
plt.show()

可以看到,T仓位的孩子的获救率为零,感觉找到一个有用信息,我来看看T有多少人

T_count = data_train.Cabin[data_train.Cabin == 'T'].value_counts()
print("T_count=%d" %(T_count))

结果。。。就一个人,好像没什么价值,不过从上面可以看到无仓位显然比有仓位的获救率高,我就按ABCDEFGTX来做一个交叉验证试试,看看情况。

##########################交叉验证########################
from sklearn import linear_model
from sklearn.model_selection import cross_val_score
from sklearn import svm
clf = linear_model.LogisticRegression(C=1.0, penalty='l1', tol=1e-6)#逻辑回归
train_df = df.filter(regex='Survived|Age_.*|SibSp|Parch|Fare_.*|Cabin_.*|Embarked_.*|Sex_.*|Pclass_.*|Title_.*')#regex(正则表达式)
train_np=train_df.as_matrix()#将frame(pandas)转换为Numpy数组表示
y = train_np[:, 0]
# X即特征属性值
X = train_np[:, 1:]
scores = cross_val_score(clf, X, y, cv=5)
print(scores)
print((scores[0]+scores[1]+scores[2]+scores[3]+scores[4])/5)

交叉验证的分数[0.82122905 0.81005587 0.8258427  0.80337079 0.86440678],平均分0.8249810358016404;之前是[0.83798883 0.81005587 0.81460674 0.79213483 0.86440678],平均分0.823838609086431,就提升了0.001,额,好像并不明显,再看看其他的吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值