提升(Boosting)分类器隶属于集成学习模型。它的基本思想是把成百上千个分类准确率低的树模型组合起来,成为一个准确率很高的模型。这个模型的特点在于不断迭代,每次迭代就生成一颗新的树。
在合理的参数设置下,我们往往要生成一定数量的树才能达到令人满意的准确率。在数据集较大较复杂的时候,模型可能需要几千次迭代计算。但是XGBoost工具更好地解决这个问题。
对比随机决策森林以及XGBoost模型对泰坦尼克号上的乘客是否生还的预测能力
import pandas as pd
titanic=pd.read_csv('http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt')
#选取pclass,age,sex作为训练特征
X=titanic[['pclass','age','sex']]
y=titanic['survived']
#对缺失的age信息,采用平均值方法进行补全,即以age列已知数据的平均值填充
X['age'].fillna(X['age'].mean(),inplace=True)
#对原数据进行分割,随机采样25%作为测试集
from sklearn.cross_validation import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.25,random_state=33)
from sklearn.feature_extraction import DictVectorizer
vec=DictVectorizer(sparse=False)
#对原数据进行特征向量化处理
X_train=vec.fit_transform(X_train.to_dict(orient='record'))
X_test=vec.fit_transform(X_test.to_dict(orient='record'))
#使用默认配置的随机森林分类器对测试集进行预测
from sklearn.ensemble import RandomForestClassifier
rfc=RandomForestClassifier()
rfc.fit(X_train,y_train)
print('The accuracy of RandomForestClassifier on testing set:',rfc.score(X_test,y_test))
The accuracy of RandomForestClassifier on testing set: 0.781155015198
#采用默认配置的XGBoost模型对相同的测试集进行预测
from xgboost import XGBClassifier
xgbc=XGBClassifier()
xgbc.fit(X_train,y_train)
print('The accuracy of XGBClassifier on testing set:',xgbc.score(X_test,y_test))
The accuracy of XGBClassifier on testing set:0.787234042553
通过对上述输出的观察,我们可以发现,XGBoost分类模型的确可以发挥更好的预测能力。