mirror of
https://github.com/apachecn/ailearning.git
synced 2026-05-07 06:03:16 +08:00
更新 7.集成方法 AdaBoost项目案例.md
This commit is contained in:
@@ -356,15 +356,15 @@ def evaluate_algorithm(dataset, algorithm, n_folds, *args):
|
||||
#### 开发流程
|
||||
|
||||
```
|
||||
收集数据:提供的文本文件。
|
||||
准备数据:确保类别标签是+1和-1,而非1和0。
|
||||
分析数据:手工检查数据。
|
||||
训练算法:在数据上,利用 adaBoostTrainDS() 函数训练出一系列的分类器。
|
||||
测试算法:我们拥有两个数据集。在不采用随机抽样的方法下,我们就会对 AdaBoost 和 Logistic 回归的结果进行完全对等的比较。
|
||||
使用算法:观察该例子上的错误率。不过,也可以构建一个 Web 网站,让驯马师输入马的症状然后预测马是否会死去。
|
||||
收集数据:提供的文本文件
|
||||
准备数据:确保类别标签是+1和-1,而非1和0
|
||||
分析数据:统计分析
|
||||
训练算法:在数据上,利用 adaBoostTrainDS() 函数训练出一系列的分类器
|
||||
测试算法:我们拥有两个数据集。在不采用随机抽样的方法下,我们就会对 AdaBoost 和 Logistic 回归的结果进行完全对等的比较
|
||||
使用算法:观察该例子上的错误率。不过,也可以构建一个 Web 网站,让驯马师输入马的症状然后预测马是否会死去
|
||||
```
|
||||
|
||||
> 收集数据:提供的文本文件。
|
||||
> 收集数据:提供的文本文件
|
||||
|
||||
训练数据:horseColicTraining.txt<br/>
|
||||
测试数据:horseColicTest.txt
|
||||
@@ -375,7 +375,7 @@ def evaluate_algorithm(dataset, algorithm, n_folds, *args):
|
||||
2.000000 1.000000 38.300000 40.000000 24.000000 1.000000 1.000000 3.000000 1.000000 3.000000 3.000000 1.000000 0.000000 0.000000 0.000000 1.000000 1.000000 33.000000 6.700000 0.000000 0.000000 1.000000
|
||||
```
|
||||
|
||||
> 准备数据:确保类别标签是+1和-1,而非1和0。
|
||||
> 准备数据:确保类别标签是+1和-1,而非1和0
|
||||
|
||||
```python
|
||||
def loadDataSet(fileName):
|
||||
@@ -394,7 +394,7 @@ def loadDataSet(fileName):
|
||||
return dataArr, labelArr
|
||||
```
|
||||
|
||||
> 分析数据:手工检查数据。
|
||||
> 分析数据:统计分析
|
||||
|
||||
过拟合(overfitting, 也称为过学习)
|
||||
* 发现测试错误率在达到一个最小值之后有开始上升,这种现象称为过拟合。
|
||||
@@ -405,7 +405,7 @@ def loadDataSet(fileName):
|
||||
|
||||

|
||||
|
||||
> 训练算法:在数据上,利用 adaBoostTrainDS() 函数训练出一系列的分类器。
|
||||
> 训练算法:在数据上,利用 adaBoostTrainDS() 函数训练出一系列的分类器
|
||||
|
||||
```python
|
||||
def adaBoostTrainDS(dataArr, labelArr, numIt=40):
|
||||
@@ -420,7 +420,7 @@ def adaBoostTrainDS(dataArr, labelArr, numIt=40):
|
||||
"""
|
||||
weakClassArr = []
|
||||
m = shape(dataArr)[0]
|
||||
# 初始化 D,设置每个特征的权重值,平均分为m份
|
||||
# 初始化 D,设置每个样本的权重值,平均分为m份
|
||||
D = mat(ones((m, 1))/m)
|
||||
aggClassEst = mat(zeros((m, 1)))
|
||||
for i in range(numIt):
|
||||
@@ -435,12 +435,12 @@ def adaBoostTrainDS(dataArr, labelArr, numIt=40):
|
||||
weakClassArr.append(bestStump)
|
||||
|
||||
print "alpha=%s, classEst=%s, bestStump=%s, error=%s " % (alpha, classEst.T, bestStump, error)
|
||||
# -1主要是下面求e的-alpha次方; 如果判断正确,乘积为1,否则成绩为-1,这样就可以算出分类的情况了
|
||||
# 分类正确:乘积为1,不会影响结果,-1主要是下面求e的-alpha次方
|
||||
# 分类错误:乘积为 -1,结果会受影响,所以也乘以 -1
|
||||
expon = multiply(-1*alpha*mat(labelArr).T, classEst)
|
||||
# 判断正确的,就乘以-1,否则就乘以1, 为什么? 书上的公式。
|
||||
print '(-1取反)预测值expon=', expon.T
|
||||
# 计算e的expon次方,然后计算得到一个综合的概率的值
|
||||
# 结果发现: 判断错误的特征,D对于的特征的权重值会变大。
|
||||
# 结果发现: 判断错误的样本,D对于的样本权重值会变大。
|
||||
D = multiply(D, exp(expon))
|
||||
D = D/D.sum()
|
||||
|
||||
@@ -460,10 +460,10 @@ def adaBoostTrainDS(dataArr, labelArr, numIt=40):
|
||||
|
||||
```
|
||||
发现:
|
||||
alpha (模型权重)目的主要是计算每一个分类器实例的权重(组合就是分类结果)
|
||||
alpha (模型权重)目的主要是计算每一个分类器实例的权重(加和就是分类结果)
|
||||
分类的权重值:最大的值= alpha 的加和,最小值=-最大值
|
||||
D (特征权重)的目的是为了计算错误概率: weightedError = D.T*errArr,求最佳分类器
|
||||
特征的权重值:如果一个值误判的几率越小,那么 D 的特征权重越少
|
||||
D (样本权重)的目的是为了计算错误概率: weightedError = D.T*errArr,求最佳分类器
|
||||
样本的权重值:如果一个值误判的几率越小,那么 D 的样本权重越小
|
||||
```
|
||||
|
||||

|
||||
|
||||
@@ -148,15 +148,16 @@ def adaBoostTrainDS(dataArr, labelArr, numIt=40):
|
||||
# 得到决策树的模型
|
||||
bestStump, error, classEst = buildStump(dataArr, labelArr, D)
|
||||
|
||||
# alpha目的主要是计算每一个分类器实例的权重(组合就是分类结果)
|
||||
# 计算每个分类器的alpha权重值
|
||||
# alpha 目的主要是计算每一个分类器实例的权重(加和就是分类结果)
|
||||
# 计算每个分类器的 alpha 权重值
|
||||
alpha = float(0.5*log((1.0-error)/max(error, 1e-16)))
|
||||
bestStump['alpha'] = alpha
|
||||
# store Stump Params in Array
|
||||
weakClassArr.append(bestStump)
|
||||
|
||||
# print "alpha=%s, classEst=%s, bestStump=%s, error=%s " % (alpha, classEst.T, bestStump, error)
|
||||
# -1主要是下面求e的-alpha次方; 如果判断正确,乘积为1,否则成绩为-1,这样就可以算出分类的情况了
|
||||
# 分类正确:乘积为1,不会影响结果,-1主要是下面求e的-alpha次方
|
||||
# 分类错误:乘积为 -1,结果会受影响,所以也乘以 -1
|
||||
expon = multiply(-1*alpha*mat(labelArr).T, classEst)
|
||||
# print '\n'
|
||||
# print 'labelArr=', labelArr
|
||||
@@ -166,11 +167,11 @@ def adaBoostTrainDS(dataArr, labelArr, numIt=40):
|
||||
# 判断正确的,就乘以-1,否则就乘以1, 为什么? 书上的公式。
|
||||
# print '(-1取反)预测值expon=', expon.T
|
||||
# 计算e的expon次方,然后计算得到一个综合的概率的值
|
||||
# 结果发现: 判断错误的特征,D对于的特征的权重值会变大。
|
||||
# 结果发现: 判断错误的样本,D对于的样本权重值会变大。
|
||||
D = multiply(D, exp(expon))
|
||||
D = D/D.sum()
|
||||
print "D: ", D.T
|
||||
print '\n'
|
||||
# print "D: ", D.T
|
||||
# print '\n'
|
||||
|
||||
# 预测的分类结果值,在上一轮结果的基础上,进行加和操作
|
||||
# print '当前的分类结果:', alpha*classEst.T
|
||||
|
||||
Reference in New Issue
Block a user