|
|
|
# 构建模型进行预测
|
|
|
|
|
|
|
|
做好数据预处理后,可以将数据喂给机器学习模型来进行训练和预测了。不过在构建模型之前,要使用处理训练集数据的方式来处理测试集。
|
|
|
|
|
|
|
|
```python
|
|
|
|
test_data=pd.read_csv('./Titanic/test.csv')
|
|
|
|
|
|
|
|
test_data['Initial']=0
|
|
|
|
for i in test_data:
|
|
|
|
test_data.loc[:, 'Initial'] = test_data.Name.str.extract('([A-Za-z]+)\.',expand=False) #lets extract the Salutations
|
|
|
|
|
|
|
|
test_data.loc[:, 'Initial'].replace(['Mlle','Mme','Ms','Dr','Major','Lady','Countess','Jonkheer','Col','Rev','Capt','Sir','Don'],['Miss','Miss','Miss','Other','Mr','Mrs','Mrs','Other','Other','Other','Mr','Mr','Mr'],inplace=True)
|
|
|
|
|
|
|
|
test_data.loc[(test_data.Age.isnull())&(test_data.Initial=='Mr'),'Age']=33
|
|
|
|
test_data.loc[(test_data.Age.isnull())&(test_data.Initial=='Mrs'),'Age']=36
|
|
|
|
test_data.loc[(test_data.Age.isnull())&(test_data.Initial=='Miss'),'Age']=22
|
|
|
|
test_data.loc[(test_data.Age.isnull())&(test_data.Initial=='Other'),'Age']=46
|
|
|
|
|
|
|
|
test_data['Embarked'].fillna('S', inplace=True)
|
|
|
|
|
|
|
|
test_data['Age_band']=0
|
|
|
|
test_data.loc[test_data['Age']<=16,'Age_band']=0
|
|
|
|
test_data.loc[(test_data['Age']>16)&(test_data['Age']<=32),'Age_band']=1
|
|
|
|
test_data.loc[(test_data['Age']>32)&(test_data['Age']<=48),'Age_band']=2
|
|
|
|
test_data.loc[(test_data['Age']>48)&(test_data['Age']<=64),'Age_band']=3
|
|
|
|
test_data.loc[test_data['Age']>64,'Age_band']=4
|
|
|
|
|
|
|
|
test_data['Family_Size']=0
|
|
|
|
test_data['Family_Size']=test_data['Parch']+test_data['SibSp']+1
|
|
|
|
test_data['Alone']=0
|
|
|
|
test_data.loc[test_data.Family_Size==1,'Alone']=1
|
|
|
|
|
|
|
|
test_data['Fare_cat']=0
|
|
|
|
test_data.loc[test_data['Fare']<=7.91,'Fare_cat']=0
|
|
|
|
test_data.loc[(test_data['Fare']>7.91)&(test_data['Fare']<=14.454),'Fare_cat']=1
|
|
|
|
test_data.loc[(test_data['Fare']>14.454)&(test_data['Fare']<=31),'Fare_cat']=2
|
|
|
|
test_data.loc[(test_data['Fare']>31)&(test_data['Fare']<=513),'Fare_cat']=3
|
|
|
|
|
|
|
|
test_data['Sex'].replace(['male','female'],[0,1],inplace=True)
|
|
|
|
test_data['Embarked'].replace(['S','C','Q'],[0,1,2],inplace=True)
|
|
|
|
test_data['Initial'].replace(['Mr','Mrs','Miss','Master','Other'],[0,1,2,3,4],inplace=True)
|
|
|
|
test_data['Cabin'].replace(['A', 'B', 'C', 'D', 'E', 'F', 'G', 'T'], [0, 1, 2, 3, 4, 5, 6, 7], inplace=True)
|
|
|
|
|
|
|
|
test_data.drop(['Name','Age','Ticket','Fare','Fare_Range','PassengerId'],axis=1,inplace=True)
|
|
|
|
```
|
|
|
|
|
|
|
|
然后可以使用机器学习模型来训练并预测了,这里使用的是随机森林。
|
|
|
|
|
|
|
|
```python
|
|
|
|
Y_train = data['Survived']
|
|
|
|
X_train = data.drop(['Survived'], axis=1)
|
|
|
|
|
|
|
|
Y_test = test_data['Survived']
|
|
|
|
X_test = test_data.drop(['Survived'], axis=1)
|
|
|
|
|
|
|
|
clf = RandomForestClassifier(n_estimators=10)
|
|
|
|
clf.fit(X_train, Y_train)
|
|
|
|
predict = clf.predict(X_test)
|
|
|
|
print(accuracy_score(Y_test, predict))
|
|
|
|
```
|
|
|
|
|
|
|
|
此时看到预测的准确率达到了 0.8275 。
|