DAY08随机森林演算法(续6)

昨天,我们已建立完决策树,那今天,我打算带入资料去看他分类结果:
建立决策树的使用模型:

#用树来预测样本
def tree_Classify(decisionTree, featureLabel, testDataSet):
    firstFeature = list(decisionTree.keys())[0]
    secondFeatDict = decisionTree[firstFeature]
    splitValue = float(list(secondFeatDict.keys())[0][1:])
    #因为test资料少目标值,所以在计算索引时要少1
    featureIndex = featureLabel[firstFeature-1]
    
    if float(testDataSet[featureIndex] )<= splitValue:
        valueOfFeat = secondFeatDict['<' + str(splitValue)]
    else:
        valueOfFeat = secondFeatDict['>' + str(splitValue)]
    #如果还有字典,就继续往下
    if isinstance(valueOfFeat, dict):
        pred_label = tree_Classify(valueOfFeat, featureLabel, testDataSet)
    else:
        pred_label = valueOfFeat
    return pred_label
test_Data = [1.09,3.852,2,3.5]
pre_label = tree_Classify(myTree1, data.columns[1:], test_Data)
print(pre_label)

这样子就会得到结果:输出2
当然如果只有一棵树就当成预测结果,会显得太独断一点,所以利用之前说明的袋装法,来生成多个的train集就可以建立多个树,有了多个树就会有多个预测类别最後因为是类别型资料,所以取个数最多的就是最终预测
首先改写一下bagging_k

import random as rd
import pandas as pd
import copy
#一个5维资料,共5笔,data(第0维为y)
data=pd.DataFrame([[1,1.01,0.852,5,1.5],[2,2.01,0.31,8,8.1],[1,3.01,0.589,9,5.6],[1,3.01,0.01,8,2.3],[2,4.01,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)
        data_use1=copy.deepcopy(data[features])
        print(data_use1)
        rows=[]
        #重复抽样过程
        for i in range(m):
            rows.append(rd.randint(0, len(data_use1)-1))

        data_m=data_use1.iloc[rows]
        print("第",j+1,"组数据:",data_m)
		 #重排索引
data_m=data_m.reset_index(drop=True)
        data_k.append(data_m)
    return data_k
print("全部数据:",bagging_k(data))

结果如下:

全部数据: [   
0     1   3    4
0  2  4.01  10  1.1
1  2  2.01   8  8.1
2  1  1.01   5  1.5
3  2  4.01  10  1.1,  
  0     1      2    4
0  1  3.01  0.010  2.3
1  1  1.01  0.852  1.5
2  1  1.01  0.852  1.5
3  1  1.01  0.852  1.5,  
  0     1      2  3
0  1  3.01  0.010  8
1  1  3.01  0.010  8
2  1  3.01  0.589  9
3  1  3.01  0.589  9,   
 0     1      2    4
0  2  2.01  0.310  8.1
1  2  2.01  0.310  8.1
2  1  3.01  0.010  2.3
3  1  3.01  0.589  5.6,   
 0      2  3    4
0  1  0.010  8  2.3
1  2  0.310  8  8.1
2  1  0.589  9  5.6
3  2  0.310  8  8.1] 

这样就有多组数据,再来做关於决策树建立,

trees=[]
for i in bagging_k(data):
    trees.append(create_Tree(i))
for j in trees:
    print(j)

建立完後就会有很多棵树,如下:

{4: {'<3.55': {1: {'<2.51': 1.0, '>2.51': 2.0}}, '>3.55': 1.0}}
{1: {'<2.51': 2.0, '>2.51': 1.0}}
{3: {'<9.0': {1: {'<2.51': 2.0, '>2.51': 1.0}}, '>9.0': 2.0}}
{2: {'<0.4495': 2.0, '>0.4495': 1.0}}
{1: {'<1.51': 1.0, '>1.51': {2: {'<0.134': 1.0, '>0.134': 2.0}}}}

再来就是针对test集依照这几棵树来预测类别

trees=[]
data_k=bagging_k(data)
for i in data_k:
    trees.append(create_Tree(i))
for j in range(len(trees)):
    test_Data = pd.DataFrame([[1.09,3.852,2,3.5]],columns=[1,2,3,4])
    if isinstance(trees[j], dict):
        pre_label = tree_Classify(trees[j], data_k[j].columns[1:], test_Data)
    else:
        pre_label = trees[j]
    print("预测类别:",pre_label)

所以预测完後,选最多类别

预测类别: 2.0
预测类别: 1.0
预测类别: 1.0
预测类别: 2.0
预测类别: 1.0

-->所以就是第1类比例最多-->所以预测就是1
好,今天实作部分完成了,明天就说明下回归方法下随机森林差异

在男孩敲了门之後,屋内的歌声突然消失了,在一阵寂静之後,门缓缓打开,但却没有任何人出现,男孩疑惑地往屋内看,里面黑漆漆一片,甚麽也看不到,男孩顺着墙壁找到了电灯开关,他按了下去,瞬间,屋内充满光亮,但男孩发现里面甚麽都没有,只有刚刚的窗帘和正中央有一张桌子,桌子上只有一个木头做成的人偶,人偶上有一双大大的眼睛,正望着窗帘,男孩走近一看,发现这个人偶只有眼睛,但却没有嘴巴
				--|为了你,我失去了一切 |--     MS.CM

<<:  Day 07 : 操作基础篇 4 - 做好笔记备份 ,使用 iCloud 和 Google Drive 进行双重备份

>>:  渗透测试Web篇

Day 27: 暴力破解 WPA/WPA2 加密 wifi 密码

Day 27: 暴力破解 WPA/WPA2 加密 wifi 密码 tags: Others 自我挑战...

Day25-好用的网页服务器-nginx(一)

前言 系列文也来到尾声了,终於要进入最後一个观念:Nginx 了,有了前面 K8s 的观念其实就可...

Day25 跟着官方文件学习Laravel-Service Container

Service Container 是管理类别依赖和执行依赖注入的一个容器。 官方文件告诉我们可以利...

30天程序语言研究

今天是30天程序语言研究的第三十天,由於最近写unix语言的东西用到很多,所以做了很多笔记,就想说也...

虹语岚访仲夏夜-29(打杂的Allen篇)

第四题,就满直观的,回答破口和後门,应该都可以。 但这时候,我看小七应该是忍无可忍了... 小七:「...