昨天,我们把基尼系数算完,那今天,我打算建立bagging算法函数:
对於有n个资料的资料集,我们取出m个资料(m<=n),这m个资料采用:自助抽样法
(也就是每次从n笔资料中取出一笔,取完之後直接放资料里那代表该资料有机会再次被选取)
而重复这件事m次,就会得到一个子资料集m1
而再重复这件事,就会得到资料集m1,m2…mk当成训练集,再针对训练集下去做模型来取得k个模型後,再针对这k个模型去做取平均值、取多数票等方法,如图:
所以以下是关於bagging的程序码实际执行:基本上会设定m和k,但在随机森林里,我们想要建立随机树,而树的特徵也是随机选取,所以再筛选树的特徵时, 我们要用随机方式选取d个特徵,程序码如下(我先不用dataFrame来写(比较好理解),在後面完整实作时,再改用dataFrame):
import random as rd
#一个5维资料,共5笔,data(第0维为y)
data=[[1,"a",0.852,5,1.5],[2,"b",0.31,8,8.1],[1,"b",0.589,9,5.6],[1,"c",0.01,8,2.3],[2,"c",0.258,10,1.1]]
#预设m=4:表示重复抽资料4次;k=5:表示5组资料;d=3:随机选三个特徵
def bagging_k(data,m=4,k=5,d=3):
n=len(data)
#建立放全部资料的data_k
data_k=[]
for j in range(k):
data_use1=[]
#选取除目标以外d个特徵
features = rd.sample(range(1,n), d)
#把目标加回去
features.insert(0,0)
features.sort()
print("第",j+1,"组特徵:",features)
for r in range(n):
data_use2=[]
for q in features:
data_use2.extend([data[r][q]])
data_use1.append(data_use2)
#data_use1其实就是data资料-->只是只选择特徵下的资料
data_m=[]
#重复抽样过程
for i in range(m):
rows=rd.randint(0, len(data_use1)-1)
data_m.append(data_use1[rows])
print("第",j+1,"组数据:",data_m)
data_k.append(data_m)
return data_k
print("全部数据:",bagging_k(data))
结果如下:
第 1 组特徵: [0, 1, 3, 4]
第 1 组数据: [[2, 'b', 8, 8.1], [2, 'b', 8, 8.1], [1, 'a', 5, 1.5], [1, 'b', 9, 5.6]]
第 2 组特徵: [0, 2, 3, 4]
第 2 组数据: [[1, 0.01, 8, 2.3], [1, 0.01, 8, 2.3], [2, 0.31, 8, 8.1], [2, 0.31, 8, 8.1]]
第 3 组特徵: [0, 1, 2, 3]
第 3 组数据: [[1, 'c', 0.01, 8], [2, 'c', 0.258, 10], [2, 'b', 0.31, 8], [1, 'b', 0.589, 9]]
第 4 组特徵: [0, 1, 2, 4]
第 4 组数据: [[2, 'b', 0.31, 8.1], [2, 'c', 0.258, 1.1], [2, 'c', 0.258, 1.1], [1, 'a', 0.852, 1.5]]
第 5 组特徵: [0, 1, 2, 4]
第 5 组数据: [[1, 'b', 0.589, 5.6], [2, 'c', 0.258, 1.1], [1, 'c', 0.01, 2.3], [2, 'b', 0.31, 8.1]]
全部数据: [[[2, 'b', 8, 8.1], [2, 'b', 8, 8.1], [1, 'a', 5, 1.5], [1, 'b', 9, 5.6]], [[1, 0.01, 8, 2.3], [1, 0.01, 8, 2.3], [2, 0.31, 8, 8.1], [2, 0.31, 8, 8.1]], [[1, 'c', 0.01, 8], [2, 'c', 0.258, 10], [2, 'b', 0.31, 8], [1, 'b', 0.589, 9]], [[2, 'b', 0.31, 8.1], [2, 'c', 0.258, 1.1], [2, 'c', 0.258, 1.1], [1, 'a', 0.852, 1.5]], [[1, 'b', 0.589, 5.6], [2, 'c', 0.258, 1.1], [1, 'c', 0.01, 2.3], [2, 'b', 0.31, 8.1]]]
好,今天实作部分就到这,明天再开始做分类动作
苍蝇飞到了小屋内,停留在灯泡上,灯泡光芒慢慢的变亮,啪啦一声,灯泡瞬间破裂并刺穿了苍蝇的身体,一瞬间,苍蝇化成了一摊红水,洒向了地面,地面上突然冒出了一只红色手,正试图拨开土,往外爬,但在那只手碰触到掉在地板玻璃碎片时,那只手突然停了下来
--|你走了,我却未曾离开过 |-- CS.MM
<<: 缺乏计画的目标,只能叫做愿望。----目标设定篇(上)
前面我们讲了怎么通过参数的属性限制参数的个数和长度。今天我们来看看,通过参数的属性,限制参数的格式以...
大家好,这边是个人制作telegram时研究api和开发文件之後整理起来的文件 telegram 有...
第三十天 各位点进来的朋友,你们好阿 小的不才只能做这个系列的文章,但还是希望分享给点进来的朋友,知...
今日题目 题目连结:94. Binary Tree Inorder Traversal 题目主题:S...
我们前面认识完资料库端的技巧後,我们就可以来准备实际开发一个小程序来玩玩把所学应用上,是我觉得最有成...