diff --git "a/docs/7.\351\233\206\346\210\220\345\255\246\344\271\240\345\222\214\351\232\217\346\234\272\346\243\256\346\236\227.md" "b/docs/7.\351\233\206\346\210\220\345\255\246\344\271\240\345\222\214\351\232\217\346\234\272\346\243\256\346\236\227.md" index aa8578c3d600d640bd6ea0b42705edaa04be2351..c4676502582eeb24068d56d63e1f55e5607640a5 100644 --- "a/docs/7.\351\233\206\346\210\220\345\255\246\344\271\240\345\222\214\351\232\217\346\234\272\346\243\256\346\236\227.md" +++ "b/docs/7.\351\233\206\346\210\220\345\255\246\344\271\240\345\222\214\351\232\217\346\234\272\346\243\256\346\236\227.md" @@ -96,7 +96,7 @@ Bootstrap 在每个预测器被训练的子集中引入了更多的分集,所 对于 Bagging 来说,一些实例可能被一些分类器重复采样,但其他的有可能不会被采样。`BaggingClassifier`默认采样。`BaggingClassifier`默认是有放回的采样`m`个实例 (`bootstrap=True`),其中`m`是训练集的大小,这意味着平均下来只有63%的训练实例被每个分类器采样,剩下的37%个没有被采样的训练实例就叫做 *Out-of-Bag* 实例。注意对于每一个的分类器它们的 37% 不是相同的。 -因为在训练中分类器从开没有看到过 oob 实例,所以它可以在这些实例上进行评估,而不需要单独的验证集或交叉验证。你可以拿出每一个分类器的 oob 来评估集成本身。 +因为在训练中分类器从来没有看到过 oob 实例,所以它可以在这些实例上进行评估,而不需要单独的验证集或交叉验证。你可以拿出每一个分类器的 oob 来评估集成本身。 在 sklearn 中,你可以在训练后需要创建一个`BaggingClassifier`来自动评估时设置`oob_score=True`来自动评估。接下来的代码展示了这个操作。评估结果通过变量`oob_score_`来显示: @@ -111,7 +111,7 @@ Bootstrap 在每个预测器被训练的子集中引入了更多的分集,所 ```python >>> from sklearn.metrics import accuracy_score ->>>y_pred = bag_clf.predict(X_test) +>>> y_pred = bag_clf.predict(X_test) >>> accuracy_score(y_test, y_pred) 0.93600000000000005 ``` @@ -306,15 +306,17 @@ sklearn 通常使用 Adaboost 的多分类版本 *SAMME*(这就代表了 *分 ```python >>>import numpy as np ->>>from sklearn.model_selection ->>>import train_test_split from sklearn.metrics ->>>import mean_squared_error +>>>from sklearn.model_selection import train_test_split +>>>from sklearn.metrics import mean_squared_error + >>>X_train, X_val, y_train, y_val = train_test_split(X, y) ->>>gbrt = GradientBoostingRegressor(max_depth=2, n_estimators=120) gbrt.fit(X_train, y_train) +>>>gbrt = GradientBoostingRegressor(max_depth=2, n_estimators=120) +>>>gbrt.fit(X_train, y_train) >>>errors = [mean_squared_error(y_val, y_pred) for y_pred in gbrt.staged_predict(X_val)] >>>bst_n_estimators = np.argmin(errors) ->>>gbrt_best = GradientBoostingRegressor(max_depth=2,n_estimators=bst_n_estimators) >>>gbrt_best.fit(X_train, y_train) +>>>gbrt_best = GradientBoostingRegressor(max_depth=2,n_estimators=bst_n_estimators) +>>>gbrt_best.fit(X_train, y_train) ``` 验证错误在图 7-11 的左面展示,最优模型预测被展示在右面。 @@ -353,7 +355,7 @@ for n_estimators in range(1, 120): 为了训练这个 *blender* ,一个通用的方法是采用保持集。让我们看看它怎么工作。首先,训练集被分为两个子集,第一个子集被用作训练第一层(详见图 7-13). -![图7-13](../images/chapter_7/7-12.png) +![图7-13](../images/chapter_7/7-12.png) 接下来,第一层的分类器被用来预测第二个子集(保持集)(详见 7-14)。这确保了预测结果很“干净”,因为这些分类器在训练的时候没有使用过这些事例。现在对在保持集中的每一个实例都有三个预测值。我们现在可以使用这些预测结果作为输入特征来创建一个新的训练集(这使得这个训练集是三维的),并且保持目标数值不变。随后 *blender* 在这个新的训练集上训练,因此,它学会了预测第一层预测的目标值。