From bb8b807d0772ee2b7dfb20ff0192b392337b0f25 Mon Sep 17 00:00:00 2001 From: chenyyx Date: Wed, 23 Aug 2017 22:37:34 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B92,3,7=E7=9A=84=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E6=A0=BC=E5=BC=8F=EF=BC=8C=E5=8E=BB=E9=99=A4=E7=89=B9?= =?UTF-8?q?=E6=AE=8A=E5=AD=97=E7=AC=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/2.k-近邻算法.md | 18 +++++++------- docs/3.决策树.md | 2 +- docs/7.集成方法-随机森林和AdaBoost.md | 30 +++++++++++------------ src/python/7.RandomForest/randomForest.py | 2 +- 4 files changed, 26 insertions(+), 26 deletions(-) diff --git a/docs/2.k-近邻算法.md b/docs/2.k-近邻算法.md index 7aa32d7f..b1d56ed6 100644 --- a/docs/2.k-近邻算法.md +++ b/docs/2.k-近邻算法.md @@ -104,7 +104,7 @@ knn 算法按照距离最近的三部电影的类型,决定未知电影的类 将文本记录转换为 NumPy 的解析程序 - ```Python + ```python def file2matrix(filename): """ Desc: @@ -139,7 +139,7 @@ def file2matrix(filename): > 分析数据:使用 Matplotlib 画二维散点图 -```Python +```python import matplotlib import matplotlib.pyplot as plt fig = plt.figure() @@ -166,7 +166,7 @@ $$\sqrt{(0-67)^2 + (20000-32000)^2 + (1.1-0.1)^2 }$$ 归一化特征值,消除特征之间量级不同导致的影响 -```Python +```python def autoNorm(dataSet): """ Desc: @@ -202,7 +202,7 @@ def autoNorm(dataSet): kNN 分类器针对约会网站的测试代码 -```Python +```python def datingClassTest(): """ Desc: @@ -237,7 +237,7 @@ def datingClassTest(): 约会网站预测函数 -```Python +```python def clasdifyPerson(): resultList = ['not at all', 'in small doses', 'in large doses'] percentTats = float(raw_input("percentage of time spent playing video games ?")) @@ -252,7 +252,7 @@ def clasdifyPerson(): 实际运行效果如下: -```Python +```python >>> kNN.classifyPerson() percentage of time spent playing video games?10 frequent flier miles earned per year?10000 @@ -294,7 +294,7 @@ You will probably like this person: in small doses 将图像文本数据转换为向量 -```Python +```python def img2vector(filename): returnVect = zeros((1,1024)) fr = open(filename) @@ -309,7 +309,7 @@ def img2vector(filename): 在 Python 命令行中输入下列命令测试 img2vector 函数,然后与文本编辑器打开的文件进行比较: -```Python +```python >>> testVector = kNN.img2vector('testDigits/0_13.txt') >>> testVector[0,0:31] array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 1., 1., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]) @@ -323,7 +323,7 @@ array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 1., 1., 1., 1., 1., 1 > 测试算法:编写函数使用提供的部分数据集作为测试样本,如果预测分类与实际类别不同,则标记为一个错误 -```Python +```python def handwritingClassTest(): # 1. 导入训练数据 hwLabels = [] diff --git a/docs/3.决策树.md b/docs/3.决策树.md index d024d7e7..06f4e0a1 100644 --- a/docs/3.决策树.md +++ b/docs/3.决策树.md @@ -28,7 +28,7 @@ #### 信息熵 & 信息增益 -熵: +熵: 熵(entropy)指的是体系的混乱的程度,在不同的学科中也有引申出的更为具体的定义,是各领域十分重要的参量。 信息熵(香农熵): diff --git a/docs/7.集成方法-随机森林和AdaBoost.md b/docs/7.集成方法-随机森林和AdaBoost.md index b55edbba..34724cf6 100644 --- a/docs/7.集成方法-随机森林和AdaBoost.md +++ b/docs/7.集成方法-随机森林和AdaBoost.md @@ -13,7 +13,7 @@ 2. 再学习(boosting): 是基于所有分类器的加权求和的方法 -## 集成方法 场景 +## 集成方法 场景 目前 bagging 方法最流行的版本是: 随机森林(random forest)
选男友:美女选择择偶对象的时候,会问几个闺蜜的建议,最后选择一个综合得分最高的一个作为男朋友 @@ -94,10 +94,10 @@ ``` 收集数据:提供的文本文件 -准备数据:转换样本集 +准备数据:转换样本集 分析数据:手工检查数据 -训练算法:在数据上,利用 random_forest() 函数进行优化评估,返回模型的综合分类结果 -测试算法:在采用自定义 n_folds 份随机重抽样 进行测试评估,得出综合的预测评分 +训练算法:在数据上,利用 random_forest() 函数进行优化评估,返回模型的综合分类结果 +测试算法:在采用自定义 n_folds 份随机重抽样 进行测试评估,得出综合的预测评分 使用算法:若你感兴趣可以构建完整的应用程序,从案例进行封装,也可以参考我们的代码 ``` @@ -111,7 +111,7 @@ 0.0262,0.0582,0.1099,0.1083,0.0974,0.228,0.2431,0.3771,0.5598,0.6194,0.6333,0.706,0.5544,0.532,0.6479,0.6931,0.6759,0.7551,0.8929,0.8619,0.7974,0.6737,0.4293,0.3648,0.5331,0.2413,0.507,0.8533,0.6036,0.8514,0.8512,0.5045,0.1862,0.2709,0.4232,0.3043,0.6116,0.6756,0.5375,0.4719,0.4647,0.2587,0.2129,0.2222,0.2111,0.0176,0.1348,0.0744,0.013,0.0106,0.0033,0.0232,0.0166,0.0095,0.018,0.0244,0.0316,0.0164,0.0095,0.0078,R ``` -> 准备数据:转换样本集 +> 准备数据:转换样本集 ```python # 导入csv文件 @@ -135,9 +135,9 @@ def loadDataSet(filename): return dataset ``` -> 分析数据:手工检查数据 +> 分析数据:手工检查数据 -> 训练算法:在数据上,利用 random_forest() 函数进行优化评估,返回模型的综合分类结果 +> 训练算法:在数据上,利用 random_forest() 函数进行优化评估,返回模型的综合分类结果 * 样本数据随机无放回抽样-用于交叉验证 @@ -209,7 +209,7 @@ def get_split(dataset, n_features): for row in dataset: groups = test_split(index, row[index], dataset) # groups=(left, right), row[index] 遍历每一行 index 索引下的特征值作为分类值 value, 找出最优的分类特征和特征值 gini = gini_index(groups, class_values) - # 左右两边的数量越一样,说明数据区分度不高,gini系数越大 + # 左右两边的数量越一样,说明数据区分度不高,gini系数越大 if gini < b_score: b_index, b_value, b_score, b_groups = index, row[index], gini, groups # 最后得到最优的分类特征 b_index,分类特征值 b_value,分类结果 b_groups。b_value 为分错的代价成本 # print b_score @@ -249,7 +249,7 @@ def random_forest(train, test, max_depth, min_size, sample_size, n_trees, n_feat return predictions ``` -> 测试算法:在采用自定义 n_folds 份随机重抽样 进行测试评估,得出综合的预测评分。 +> 测试算法:在采用自定义 n_folds 份随机重抽样 进行测试评估,得出综合的预测评分。 * 计算随机森林的预测结果的正确率 @@ -313,7 +313,7 @@ def evaluate_algorithm(dataset, algorithm, n_folds, *args): `能否使用弱分类器和多个实例来构建一个强分类器? 这是一个非常有趣的理论问题。` -### AdaBoost 原理 +### AdaBoost 原理 > AdaBoost 工作原理 @@ -360,8 +360,8 @@ def evaluate_algorithm(dataset, algorithm, n_folds, *args): 准备数据:确保类别标签是+1和-1,而非1和0。 分析数据:手工检查数据。 训练算法:在数据上,利用 adaBoostTrainDS() 函数训练出一系列的分类器。 -测试算法:我们拥有两个数据集。在不采用随机抽样的方法下,我们就会对 AdaBoost 和 Logistic 回归的结果进行完全对等的比较。 -使用算法:观察该例子上的错误率。不过,也可以构建一个 Web 网站,让驯马师输入马的症状然后预测马是否会死去。 +测试算法:我们拥有两个数据集。在不采用随机抽样的方法下,我们就会对 AdaBoost 和 Logistic 回归的结果进行完全对等的比较。 +使用算法:观察该例子上的错误率。不过,也可以构建一个 Web 网站,让驯马师输入马的症状然后预测马是否会死去。 ``` > 收集数据:提供的文本文件。 @@ -468,13 +468,13 @@ D (特征权重)的目的是为了计算错误概率: weightedError = D.T* ![AdaBoost算法权重计算公式](/images/7.AdaBoost/adaboost_alpha.png "AdaBoost算法权重计算公式") -> 测试算法:我们拥有两个数据集。在不采用随机抽样的方法下,我们就会对 AdaBoost 和 Logistic 回归的结果进行完全对等的比较。 +> 测试算法:我们拥有两个数据集。在不采用随机抽样的方法下,我们就会对 AdaBoost 和 Logistic 回归的结果进行完全对等的比较。 ```python def adaClassify(datToClass, classifierArr): """adaClassify(ada分类测试) Args: - datToClass  多个待分类的样例 + datToClass 多个待分类的样例 classifierArr 弱分类器的集合 Returns: sign(aggClassEst) 分类结果 @@ -493,7 +493,7 @@ def adaClassify(datToClass, classifierArr): return sign(aggClassEst) ``` -> 使用算法:观察该例子上的错误率。不过,也可以构建一个 Web 网站,让驯马师输入马的症状然后预测马是否会死去。 +> 使用算法:观察该例子上的错误率。不过,也可以构建一个 Web 网站,让驯马师输入马的症状然后预测马是否会死去。 ```python # 马疝病数据集 diff --git a/src/python/7.RandomForest/randomForest.py b/src/python/7.RandomForest/randomForest.py index 7f6ddeca..c9ec6da4 100644 --- a/src/python/7.RandomForest/randomForest.py +++ b/src/python/7.RandomForest/randomForest.py @@ -99,7 +99,7 @@ def get_split(dataset, n_features): for row in dataset: groups = test_split(index, row[index], dataset) # groups=(left, right), row[index] 遍历每一行 index 索引下的特征值作为分类值 value, 找出最优的分类特征和特征值 gini = gini_index(groups, class_values) - # 左右两边的数量越一样,说明数据区分度不高,gini系数越大 + # 左右两边的数量越一样,说明数据区分度不高,gini系数越大 if gini < b_score: b_index, b_value, b_score, b_groups = index, row[index], gini, groups # 最后得到最优的分类特征 b_index,分类特征值 b_value,分类结果 b_groups。b_value 为分错的代价成本 # print b_score