diff --git a/docs/7.集成方法-随机森林和AdaBoost.md b/docs/7.集成方法-随机森林和AdaBoost.md index 99c0caf8..8d1bd3bf 100644 --- a/docs/7.集成方法-随机森林和AdaBoost.md +++ b/docs/7.集成方法-随机森林和AdaBoost.md @@ -84,13 +84,11 @@ 适用数据范围:数值型和标称型 ``` -### 项目案例: 随机森林 - -![随机森林](/images/7.RandomForest/RandomForest_Flow.jpg) +### 项目案例: 声纳信号分类 #### 项目概述 -这是 Gorman 和 Sejnowski 在研究使用神经网络的声纳信号分类中使用的数据集。任务是训练一个网络来区分声纳信号。 +这是 Gorman 和 Sejnowski 在研究使用神经网络的声纳信号分类中使用的数据集。任务是训练一个模型来区分声纳信号。 #### 开发流程 @@ -99,7 +97,7 @@ 准备数据:转换样本集。 分析数据:手工检查数据。 训练算法:在数据上,利用 random_forest() 函数进行优化评估,返回模型的综合分类结果。 -测试算法:在采用自定义 n_folds 循环的随机重抽样就行测试评估,得出综合的预测评分。 +测试算法:在采用自定义 n_folds 份随机重抽样 进行测试评估,得出综合的预测评分。 使用算法:本例没有完成此步骤,若你感兴趣可以构建完整的应用程序,从案例进行封装,就可以构造一个实际运行的类似系统 ``` @@ -226,7 +224,7 @@ def random_forest(train, test, max_depth, min_size, sample_size, n_trees, n_feat return predictions ``` -> 测试算法:在采用自定义 n_folds 循环的随机重抽样就行测试评估,得出综合的预测评分。 +> 测试算法:在采用自定义 n_folds 份随机重抽样 进行测试评估,得出综合的预测评分。 * 计算随机森林的预测结果的正确率 @@ -238,7 +236,7 @@ def evaluate_algorithm(dataset, algorithm, n_folds, *args): Args: dataset 原始数据集 algorithm 使用的算法 - n_folds 树的个数 + n_folds 数据的份数 *args 其他的参数 Returns: scores 模型得分 @@ -343,7 +341,7 @@ def evaluate_algorithm(dataset, algorithm, n_folds, *args): > 收集数据:提供的文本文件。 -训练数据:horseColicTraining.txt +训练数据:horseColicTraining.txt
测试数据:horseColicTest.txt ``` @@ -378,6 +376,10 @@ def loadDataSet(fileName): ![过拟合](/images/7.AdaBoost/过拟合.png) +* 通俗来说:就是把一些噪音数据也拟合进去的,如下图。 + +![过拟合](/images/7.AdaBoost/过拟合图解.png) + > 训练算法:在数据上,利用 adaBoostTrainDS() 函数训练出一系列的分类器。 ```python @@ -501,10 +503,12 @@ print m, errArr[predicting10 != mat(labelArrTest).T].sum(), errArr[predicting10 > ROC 评估方法 * ROC 曲线: 最佳的分类器应该尽可能地处于左上角 -* ![ROC曲线](/images/7.AdaBoost/ROC曲线.png) - * 对不同的 ROC 曲线进行比较的一个指标是曲线下的面积(Area Unser the Curve, AUC). - * AUC 给出的是分类器的平均性能值,当然它并不能完全代替对整条曲线的观察。 - * 一个完美分类器的 AUC 为1,而随机猜测的 AUC 则为0.5。 + +![ROC曲线](/images/7.AdaBoost/ROC曲线.png) + +* 对不同的 ROC 曲线进行比较的一个指标是曲线下的面积(Area Unser the Curve, AUC). +* AUC 给出的是分类器的平均性能值,当然它并不能完全代替对整条曲线的观察。 +* 一个完美分类器的 AUC 为1,而随机猜测的 AUC 则为0.5。 > 代价函数 diff --git a/images/7.AdaBoost/过拟合图解.png b/images/7.AdaBoost/过拟合图解.png new file mode 100644 index 00000000..0bb222b7 Binary files /dev/null and b/images/7.AdaBoost/过拟合图解.png differ diff --git a/images/7.RandomForest/RandomForest_Flow.jpg b/images/7.RandomForest/RandomForest_Flow.jpg deleted file mode 100644 index 1382baec..00000000 Binary files a/images/7.RandomForest/RandomForest_Flow.jpg and /dev/null differ diff --git a/src/python/7.RandomForest/randomForest.py b/src/python/7.RandomForest/randomForest.py index 9b6afda6..7f6ddeca 100644 --- a/src/python/7.RandomForest/randomForest.py +++ b/src/python/7.RandomForest/randomForest.py @@ -163,7 +163,7 @@ def build_tree(train, max_depth, min_size, n_features): # Make a prediction with a decision tree def predict(node, row): # 预测模型分类结果 if row[node['index']] < node['value']: - if isinstance(node['left'], dict): # isinstance是Python中的一个内建函数。是用来判断一个对象是否是一个已知的类型。 + if isinstance(node['left'], dict): # isinstance 是 Python 中的一个内建函数。是用来判断一个对象是否是一个已知的类型。 return predict(node['left'], row) else: return node['left'] @@ -258,7 +258,7 @@ def evaluate_algorithm(dataset, algorithm, n_folds, *args): Args: dataset 原始数据集 algorithm 使用的算法 - n_folds 树的个数 + n_folds 数据的份数 *args 其他的参数 Returns: scores 模型得分