diff --git a/docs/7.集成方法-随机森林和AdaBoost.md b/docs/7.集成方法-随机森林和AdaBoost.md index 8d1bd3bf..b55edbba 100644 --- a/docs/7.集成方法-随机森林和AdaBoost.md +++ b/docs/7.集成方法-随机森林和AdaBoost.md @@ -93,15 +93,15 @@ #### 开发流程 ``` -收集数据:提供的文本文件。 -准备数据:转换样本集。 -分析数据:手工检查数据。 -训练算法:在数据上,利用 random_forest() 函数进行优化评估,返回模型的综合分类结果。 -测试算法:在采用自定义 n_folds 份随机重抽样 进行测试评估,得出综合的预测评分。 -使用算法:本例没有完成此步骤,若你感兴趣可以构建完整的应用程序,从案例进行封装,就可以构造一个实际运行的类似系统 +收集数据:提供的文本文件 +准备数据:转换样本集 +分析数据:手工检查数据 +训练算法:在数据上,利用 random_forest() 函数进行优化评估,返回模型的综合分类结果 +测试算法:在采用自定义 n_folds 份随机重抽样 进行测试评估,得出综合的预测评分 +使用算法:若你感兴趣可以构建完整的应用程序,从案例进行封装,也可以参考我们的代码 ``` -> 收集数据:提供的文本文件。 +> 收集数据:提供的文本文件 样本数据:sonar-all-data.txt @@ -139,17 +139,17 @@ def loadDataSet(filename): > 训练算法:在数据上,利用 random_forest() 函数进行优化评估,返回模型的综合分类结果 -* 数据随机化 +* 样本数据随机无放回抽样-用于交叉验证 ```python def cross_validation_split(dataset, n_folds): - """cross_validation_split(将数据集进行抽重抽样 n_folds 份,数据可以重复重复抽取,每一次list的元素是无重复的) + """cross_validation_split(将数据集进行抽重抽样 n_folds 份,数据可以重复重复抽取) Args: dataset 原始数据集 n_folds 数据集dataset分成n_flods份 Returns: - dataset_split list集合,存放的是:将数据集进行抽重抽样 n_folds 份,数据可以重复重复抽取,每一次list的元素是无重复的 + dataset_split list集合,存放的是:将数据集进行抽重抽样 n_folds 份,数据可以重复重复抽取 """ dataset_split = list() dataset_copy = list(dataset) # 复制一份 dataset,防止 dataset 的内容改变 @@ -161,13 +161,38 @@ def cross_validation_split(dataset, n_folds): index = randrange(len(dataset_copy)) # 将对应索引 index 的内容从 dataset_copy 中导出,并将该内容从 dataset_copy 中删除。 # pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。 - # fold.append(dataset_copy.pop(index)) # 无放回的方式 - fold.append(dataset_copy[index]) # 有放回的方式 + fold.append(dataset_copy.pop(index)) # 无放回的方式 + # fold.append(dataset_copy[index]) # 有放回的方式 dataset_split.append(fold) # 由dataset分割出的n_folds个数据构成的列表,为了用于交叉验证 return dataset_split ``` +* 训练数据集随机化 + +```python +# Create a random subsample from the dataset with replacement +def subsample(dataset, ratio): # 创建数据集的随机子样本 + """random_forest(评估算法性能,返回模型得分) + + Args: + dataset 训练数据集 + ratio 训练数据集的样本比例 + Returns: + sample 随机抽样的训练样本 + """ + + sample = list() + # 训练样本的按比例抽样。 + # round() 方法返回浮点数x的四舍五入值。 + n_sample = round(len(dataset) * ratio) + while len(sample) < n_sample: + # 有放回的随机采样,有一些样本被重复采样,从而在训练集中多次出现,有的则从未在训练集中出现,此则自助采样法。从而保证每棵决策树训练集的差异性 + index = randrange(len(dataset)) + sample.append(dataset[index]) + return sample +``` + * 特征随机化 ```python @@ -242,7 +267,7 @@ def evaluate_algorithm(dataset, algorithm, n_folds, *args): scores 模型得分 """ - # 将数据集进行抽重抽样 n_folds 份,数据可以重复重复抽取,每一次 list 的元素是无重复的 + # 将数据集进行随机抽样,分成 n_folds 份,数据无重复的抽取 folds = cross_validation_split(dataset, n_folds) scores = list() # 每次循环从 folds 从取出一个 fold 作为测试集,其余作为训练集,遍历整个 folds ,实现交叉验证 @@ -277,7 +302,7 @@ def evaluate_algorithm(dataset, algorithm, n_folds, *args): return scores ``` -> 使用算法:本例没有完成此步骤,若你感兴趣可以构建完整的应用程序,从案例进行封装,就可以构造一个实际运行的类似系统 +> 使用算法:若你感兴趣可以构建完整的应用程序,从案例进行封装,也可以参考我们的代码 [完整代码地址](https://github.com/apachecn/MachineLearning/blob/master/src/python/7.RandomForest/randomForest.py):