泰坦尼克号生存率预测
数据来源:Kaggle数据竞赛
写这个博客的目的,之前自己做了几个数据挖掘的项目,现在整理一下,记录一下过程。也希望可以分享出来和大家交流交流。
项目的基本思路:
1.认识数据,看看数据中的类型,数据的格式,是否有缺失值之类的。
2.处理数据,处理数据中的缺失值,异常值,离群点等。
3.特征工程,一个模型好不好,和特征工程做的好不好有很大的联系。
最近在做毕业设计----高速公路事故预测,用了各种模型,神经网络,
做出来的准确率都是百分之八十五左右。所以现在又回头去弄特征工
程,希望可以提高准确率。
4.建立模型(融合模型),比较模型,选择模型。
认识数据:
先来看看数据的基本格式,这里用pandas导入为DataFrame。
train = pd.read_csv("D:/Data mining/taitannikehao/train.csv")
train.head()
可以看到数据的特征,并且还有些有缺失值。
现在介绍下各个特征的含义:
- PassengerId => 乘客ID
- Pclass => 乘客等级(1/2/3等舱位)
- Name => 乘客姓名
- Sex => 性别
- Age => 年龄
- SibSp => 堂兄弟/妹个数
- Parch => 父母与小孩个数
- Ticket => 船票信息
- Fare => 票价
- Cabin => 客舱
- Embarked => 登船港口
可以看到其实特征不是很多。
接下来具体看看各个特征中的情况:
train.info()
看到了样本大小是891个。还有各个特征的数据类型。好多数据有缺失值,Age和Cabin缺失比较严重。
处理数据
处理一下数据中的缺失值:
1.Embarked特征缺失了两个数据,用众数填充。
train.Embarked[train.Embarked.isnull()] = train.Embarked.dropna().mode().values
2.Cabin特征缺失的太多了,先不考虑,赋给U0做个标记。
train["Cabin"] = train["Cabin"].fillna("U0")
3.Age特征比较重要,可以用机器学习来预测缺失值。这里选择随机森林来预测一下。
from sklearn.ensemble import RandomForestRegressor as RFR
#先选取数值特征进行预测
age_df = train[["Age","Survived","Fare","Parch","SibSp","Pclass"]]
age_df_notnull = age_df.loc[(train["Age"].notnull())]
age_df_isnull = age_df.loc[(train["Age"].isnull())]
X = age_df_notnull.values[:,1:]
Y = age_df_notnull.values[:,0]
clf = RFR(n_estimators = 1000,n_jobs = -1)
clf.fit(X,Y)
pred = clf.predict(age_df_isnull.values[:,1:])
train.loc[train["Age"].isnull(),["Age"]] = pred
查看一下处理之后缺失值情况
train.info()
可以看到缺失值处理完全。
分析特征关系
先来看一下整体的生存率。
train["Survived"].value_counts().plot.pie(autopct = "%1.2f%%")
plt.show()
看到大概有38.38%的活下来了。
看看各个特征和存活之间的关系。
1.Sex特征:
sns.countplot(x = "Sex",hue = "Survived",data = train)
比较直观