分类问题AdaBoost算法

import math
import numpy as npclass Adaboost_tree:def __init__(self,X,Y,feature_type='discrete'):self.X = np.array(X)self.Y = np.array(Y)self.N = len(X)self.feature_num = len(X[0])self.w = np.array([1/self.N] * self.N)self.g_x=[]self.feature_type=feature_type #特征类型self.get_feature_dict()def compute_error(self,y):y = np.array(y)return np.sum(self.w[y != self.Y])def compute_am(self,em):return 1/2*math.log((1-em)/em)def get_feature_dict(self):self.f_dict = {}for i in range(self.feature_num):self.f_dict[i] = list(set([x[i] for x in self.X]))def fit(self,max_iter=20):for iter in range(max_iter):index_list=[]error_list1=[]error_list2 = []pred_y_list1 = []pred_y_list2 = []if self.feature_type == 'discrete':for i in range(self.feature_num):for j in self.f_dict[i]:y1 = [1 if m[i] == j else -1 for m in self.X]y2 = [-1 if m[i] == j else 1 for m in self.X]error1 = self.compute_error(y1)error2 = self.compute_error(y2)index_list.append((i,j))error_list1.append(error1)error_list2.append(error2)pred_y_list1.append(y1)pred_y_list2.append(y2)if self.feature_type == 'continuous':for i in range(self.feature_num):for j in self.f_dict[i]:y1 = [1 if m[i] <= j else -1 for m in self.X]y2 = [-1 if m[i] <= j else 1 for m in self.X]error1 = self.compute_error(y1)error2 = self.compute_error(y2)index_list.append((i,j))error_list1.append(error1)error_list2.append(error2)pred_y_list1.append(y1)pred_y_list2.append(y2)if min(error_list1) <= min(error_list2):min_index = error_list1.index(min(error_list1))split_f_index,split_value = index_list[min_index]pred_y = pred_y_list1[min_index]positive = 1else:min_index = error_list2.index(min(error_list2))split_f_index,split_value = index_list[min_index]pred_y = pred_y_list2[min_index]positive = -1em = self.compute_error(pred_y)if em == 0:print('em is zero break')breakam = self.compute_am(em)self.g_x.append((split_f_index,split_value,positive,am))w_list = self.w * np.exp(-am * self.Y * np.array(pred_y))self.w = w_list/np.sum(w_list)def predict_single(self,x):result = 0for split_f_index,split_value,positive,am in self.g_x:if self.feature_type == 'discrete':if x[split_f_index] == split_value:result += positive * amelse:result += - positive * amelif self.feature_type == 'continuous':if x[split_f_index] <= split_value:result += positive * amelse:result += - positive * amreturn np.sign(result)def predict(self,X):result = [self.predict_single(x) for x in X]return resultdef main():X = np.array([[0, 1, 3], [0, 3, 1], [1, 2, 2], [1, 1, 3], [1, 2, 3],[0, 1, 2], [1, 1, 2], [1, 1, 1], [1, 3, 1], [0, 2, 1]])Y = np.array([-1, -1, -1, -1, -1, -1, 1, 1, -1, -1])Adaboost_tree_ = Adaboost_tree(X,Y,feature_type='continuous')Adaboost_tree_.fit(20)print(Adaboost_tree_.predict(X))if __name__ == '__main__':main()#############result########################
/usr/bin/python3 /Users/zhengyanzhao/PycharmProjects/tongjixuexi/shixian2/AdaBoost_cat.py
[-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, -1.0, -1.0]

回归问题提升树算法

单个平方误差回归树代码 请参考我之前的博客
统计学习方法第五章作业:ID3/C4.5算法分类决策树、平方误差二叉回归树代码实现

from shixian2 import reg_tree
import numpy as npclass adboost_reg_tree:def __init__(self):self.tree_list = []def fit(self,X,Y,max_iter=5,min_leave_data=3):self.X = np.array(X)self.Y = np.array(Y)for i in range(max_iter):reg_t = reg_tree.Cart_reg(self.X, self.Y, min_leave_data)reg_t.build_tree()pred_y = np.array(reg_t.predict(self.X))print(pred_y)self.tree_list.append(reg_t)self.Y = self.Y - pred_yif (self.Y == 0).all():print('total_fit')breakdef predict(self,X):result = np.zeros(len(X))for i in self.tree_list:y = i.predict(X)result += np.array(y)return resultdef main():X=[[1,5,7,4,8,1,2],[2,3,5,5,2,7,8],[1,2,3,4,5,6,7],[1,2,1,2,2,3,9],[2,8,9,7,0,1,4],[4,8,3,4,5,6,7],[4,1,3,1,5,8,0]]Y= [2,6,2,5,8,3,2]adboost_reg_tree_ = adboost_reg_tree()adboost_reg_tree_.fit(X,Y,max_iter=5,min_leave_data=4)print(adboost_reg_tree_.predict(X))if __name__ == '__main__':main()#######result#########################
/usr/bin/python3 /Users/zhengyanzhao/PycharmProjects/tongjixuexi/shixian2/adboost_reg_tree.py
[2.25       6.33333333 2.25       6.33333333 6.33333333 2.252.25      ]
[-0.27083333 -0.27083333 -0.27083333 -1.33333333  1.20833333  1.20833333-0.27083333]
[ 0.015625   -0.0625      0.015625    0.015625    0.45833333 -0.458333330.015625  ]
[ 0.00390625  0.00390625  0.00390625 -0.015625    0.          0.0.00390625]
[ 0.00130208 -0.00195312  0.00043403  0.00043403 -0.00195312  0.000434030.00130208]
[2.         6.00195312 1.99913194 5.00043403 7.99804688 3.000434032.        ]Process finished with exit code 0

统计学习方法第八章作业:分类问题AdaBoost算法、回归问题提升树算法 代码实现相关推荐

  1. 1.1 统计学习方法的定义与分类

    统计学习方法的定义与分类 统计学习的概念 统计学习的定义 统计学习运用到的领域 统计学习的步骤 统计学习的分类 统计学习的概念 统计学习的定义 统计学习 (Statistical Machine Le ...

  2. Adaboost算法原理分析和实例+代码(简明易懂)

    Adaboost算法原理分析和实例+代码(简明易懂) [尊重原创,转载请注明出处] http://blog.csdn.net/guyuealian/article/details/70995333   ...

  3. Adaboost算法原理分析和实例+代码(转载)

    [尊重原创,转载请注明出处] http://blog.csdn.net/guyuealian/article/details/70995333     本人最初了解AdaBoost算法着实是花了几天时 ...

  4. 统计学习方法 第八章总结

    集成方法主要包括:bagging和boosting思想 其中boosting的思想是:通过改变训练样本的权重(即改变训练数据的概率分布),学习多个分类器,并将这些分类器进行线性组合,提高分类的性能. ...

  5. 统计学习方法读书笔记(九)-EM算法及其推广

    全部笔记的汇总贴:统计学习方法读书笔记汇总贴 EM算法用于含有隐变量(hidden variable)的概率模型参数的极大似然估计,或极大后验概率估计.EM算法的每次迭代由两步组成:E步,求期望(ex ...

  6. 数据挖掘领域十大经典算法之—AdaBoost算法(超详细附代码)

    相关文章: 数据挖掘领域十大经典算法之-C4.5算法(超详细附代码) 数据挖掘领域十大经典算法之-K-Means算法(超详细附代码) 数据挖掘领域十大经典算法之-SVM算法(超详细附代码) 数据挖掘领 ...

  7. 统计学习方法第二十章作业:潜在狄利克雷分配 LDA 吉布斯抽样法算法 代码实现

    潜在狄利克雷分配 LDA 吉布斯抽样法算法 import numpy as np import jiebaclass LDA:def __init__(self,text_list,k):self.k ...

  8. 统计学习方法第十章作业:HMM模型—概率计算问题、Baum-Welch学习算法、维特比预测算法 代码实现

    HMM模型 import numpy as npclass HMM:def __init__(self,A=None,B=None,Pi=None,O = None):if A:self.A = np ...

  9. 统计学习方法第九章作业:三硬币EM算法、GMM高维高斯混合模型 代码实现

    三硬币EM算法 import numpy as np import mathclass Three_coin:def __init__(self,pai=0.0,p=0.0,q=0.0):self.p ...

最新文章

  1. android Spinner 例子
  2. Cell综述-建立因果关系:合成菌群在植物菌群研究中的机会
  3. gif分解工具_Python之GIF图倒放,沙雕快乐源泉
  4. 在MySQL的InnoDB存储引擎中count(*)函数的优化
  5. ts获取服务器数据_怎么使用Satruts2实现页面列表数据导出到Excel表格
  6. CSS之中间固定两边自适应宽度
  7. 为什么说“医可救众生?佛可救众生!”
  8. 职场中比拿到工资更有幸福感的是什么?
  9. CSS3动画序列(CSS3)
  10. java map排序_探索Java常用集合
  11. python的ctypes模块详解数组_如何使用Python的ctypes和readinto读取包含数组的结构?...
  12. ASP.Net Ajax框架 Timer控件 计时器
  13. nodejs菜鸟教程
  14. 百度网盘免费扩容2T的内幕
  15. 炒汇常识--股市与汇市的区别
  16. Windows桌面应用程序(1-2-4-4th) 您的第一个Direct2D程序
  17. UIButton文字颜色无法修改的解决方法和知识拓展
  18. 阿里高层大调整,集团CEO张勇兼任阿里云总裁,CTO鲁肃卸任
  19. [GO项目]开源免费在线客服系统-真正免费开源-GOFLY0.3.2发布-极简强大Go语言开发网页客服...
  20. 时域分析——无量纲特征值含义一网打尽

热门文章

  1. 用户体验分析: 以 “南通市图书馆微信公众号” 为例
  2. 2.异步回调检测线程结束
  3. 使用c#类库绘制柱状图
  4. 人工智能技术的新突破:MIT科学家发明Church AI语言
  5. Mac中IDEA在配置tomcat时一直出现404的错误
  6. 第19天学习Java的笔记-String字符串
  7. python采集修改原创_python应用系列教程——python中ftp操作:连接、登录、获取目录,重定向、上传下载,删除更改...
  8. 云服务centos搭建jupyter notebook并通过外网访问
  9. mysql数据库 数据类型自动编号选哪个_MySQL表类型、选择合适数据类型、字符集...
  10. Python实现kNN算法