拉风小宇 2018-04-06
XGBoost是一种流行的技术,是传统回归/神经网络的完美替代方案。它代表E X treme G radient Boost ing,基本上构建了一些决策树来计算梯度
这听起来很简单,但可以非常强大。以帕金森检测为例:我们有几个指标可以分析,最终我们需要诊断帕金森病(分类!)。
让我们开始收集一些数据:跳到UCI的ML数据库并下载帕金森氏调用的数据集parkinsons.data。他们是CSV,所以我们可以用Pandas快速解析它们:
df = pd.read_csv('parkinsons.data')
接下来,我们需要获取功能和标签。除了第一列(名称)外,这些列方便地是所有数字,并且具有标签的列是“状态”(已经是0或1)。让我们忽略他们现在的含义,并盲目分析它们(不要在实践中这样做)。这使我们能够很快地获得培训数据:
features = df.loc [:, df.columns!='status']。values [:, 1:]
labels = df.loc [:,'status']。values
接下来,我们需要调整我们的功能,以便它们在-1和1之间,以便它们被标准化。我们可以用这样sklearn的辉煌来做到这一点MinMaxScaler:
Scaler = MinMaxScaler(( - 1,1))
X = scaler.fit_transform(features)
到目前为止我们已经有5条线了。接下来,让我们将其分解为训练和测试数据,以便防止过度拟合。没有太多的数据点,所以让我们分成14%的测试数据,这次使用sklearn的train_test_split便利功能:
X_r, X_s, Y_r, Y_s = train_test_split(X, labels, test_size=0.14)
然后我们使用xgboost已经构建好的用于分类并通过xgboost模块(pip install xgboost)提供的XGBClassifier :
model = XGBClassifier()
model.fit(X_r,Y_r)
让我们通过评估我们的模型与之前的测试集来评估我们的模型,其accuracy_score功能来自sklearn:
Y_hat = [round(yhat) for yhat in model.predict(X_test)]
print(accuracy_score(Y_test, Y_hat))
你应该看到在90年代的高准确度(在测试集~96.42%)!
就是这样!10行代码,你已经为帕金森氏训练了一个完整的XGBoosting分类器。
XGBoosting功能非常强大,绝对可以成为您下一个项目的有用工具!这更深入 - 对于多输出,你需要一个MultiOutput模型(SciKit Learn有很好的包装),为了获得更准确的信息,你需要微调你的XGBoost模型。