DAY09随机森林演算法(回归方法)

昨天,我们已建立完随机森林,那今天,我打算使用回归方法去看他得出来结果,所以会跟基尼系数预测类别方法,有些不同:
这边会列出不太一样的地方第一个是分割不采用基尼系数,而是采用MSE最小,作为最佳分割点:
我把原本基尼系数程序保留以做为参考

def Best_Feature_reg(data):
    #1为最大(效果最差)
    #best_Gini_cofe = 1
    #利用MSE最小值作为划分值
    best_R2 = float('inf')
    #位置最小为0,先设定-1
    best_feature_col = -1
    #因为数值有可能正或负,所以先设定None
    best_split_value = None
    #第i个特徵

    for l in data.columns:
        # print("第",i,"个特徵")
        if l==0:
            continue
        feat_list = [k for k in data[l]]
        sortfeats = sorted(list(set(feat_list)))
        #print("排序好特徵资料:",sortfeats)
        split_list = []

        if len(sortfeats)==1:
            splitList=sortfeats
        else:
            for j in range(len(sortfeats) - 1):
                split_list.append(np.round((sortfeats[j] + sortfeats[j + 1]) / 2,5))
        #print("节点:",split_list)
        #每个划分点都测试
        for split_value in split_list:   

            subdata1, subdata2 = split_Data_Set(data, l, split_value)
            lenLeft, lenRight = len(subdata1), len(subdata2)
            # 防止其中一边为空
            if lenLeft == 0 and lenRight != 0:
                rightMean = np.mean(subdata1)
                R2 = np.mean([(x - rightMean)**2 for x in subdata1])
            elif lenLeft != 0 and lenRight == 0:
                leftMean = np.mean(subdata2)
                R2 = np.mean([(x - leftMean) ** 2 for x in subdata2])
            else:
                leftMean, rightMean = np.mean(subdata2), np.mean(subdata1)
                leftR2 = np.mean([(x - leftMean)**2 for x in subdata2])
                rightR2 = np.mean([(x - rightMean)**2 for x in subdata1])
                #把MSE相加
                R2 = leftR2 + rightR2

            if R2 < best_R2:
                best_R2 = R2
                best_feature_col = l
                best_split_value = split_value
            # new_Gini = Gini_cofe(subdata1, subdata2)
            
            # #如果基尼系数较小代表比较好
            # if new_Gini < best_Gini_cofe:
            #     best_Gini_cofe = new_Gini
            #     best_feature_col = l
            #     best_split_value = split_value
    return best_feature_col, best_split_value
best_feature_col, best_split_value=Best_Feature_reg(data)    
print("最佳分割特徵为: 第",best_feature_col,"特徵")
print("最佳分割特徵数值为:",best_split_value)

结果如下:

最佳分割特徵为: 第 2 特徵
最佳分割特徵数值为: 0.4495

除了这个还有就是如果是特徵都分完还不能分类-->就用资料平均值
下去做即可

import random as rd
def one_feature_check_reg(data):
    if len(data[0])==1:   
        return np.mean(data)
    else:
        return False

-->其余方法基本上都相同,所以就不再赘述
好,今天随机森林算是完成了,明天就开始研究支持向量机

男孩看了桌上娃娃,他突然觉得心情悲伤了起来,而且感觉有东西卡在喉咙里,男孩掐住自己喉咙试图把东西吐出来,但毫无作用,紧接着东西不小心被他吞了下去,男孩发现他的胸口自己发出了声音,而那声音正是刚刚听到的歌声,男孩看了一下桌子,发现娃娃和桌子都消失不见,只剩下空荡荡的屋子,和不断发出歌声的胸口
		--|一部份是我,一部份是你,只是你想不起来|--  MS.CM

<<:  [Day23] Flutter - Domain Error Handle (part7)

>>:  ui li 列出清单标签-基础语法

Day16,Domain&自签凭证

正文 以前有透过Freenom注册了一个边缘网域,这次就设定了一个homelab domain,将A...

[ 卡卡 DAY 28 ] - React Native 自制 radio button + textarea

今天天外飞来一笔说需要 RN 表单画面 emergency!!! 咦咦咦 啊怎麽只有 TextIn...

Day24 React专案资料夹分类方式

React本身并没有特别限定专案资料夹的设定方式,但这边建议可以朝以下两种方式着手: 依照功能或所属...

Day1 整体经营策略、核心价值

谈到想要管理好一个IT专案,首先要对专案有认识。很多人是被赶鸭子上架以後才认识架子,原来鸭子是站在架...

【第二十五天 - Floyd-Warshall 题目分析】

先简单回顾一下,今天预计分析的题目: 题目连结:https://leetcode.com/prob...