请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于split和try_split的两个理解!

这是split的代码:

def split(X, y, d, value):
    index_a = (X[:,d] <= value)
    index_b = (X[:,d] > value)
    return X[index_a], X[index_b], y[index_a], y[index_b]

关于split的理解:
假设y里面有五个种类,我们做的就是把这5个种类分成1个种类和4个种类的前提下,尽量使这个“1”纯净。

这是try_split的代码:

def try_split(X, y):
    
    best_entropy = float('inf')
    best_d, best_v = -1, -1
    for d in range(X.shape[1]):
        sorted_index = np.argsort(X[:,d])
        for i in range(1, len(X)):
            if X[sorted_index[i], d] != X[sorted_index[i-1], d]:
                v = (X[sorted_index[i], d] + X[sorted_index[i-1], d])/2
                X_l, X_r, y_l, y_r = split(X, y, d, v)
                e = entropy(y_l) + entropy(y_r)
                if e < best_entropy:
                    best_entropy, best_d, best_v = e, d, v
                
    return best_entropy, best_d, best_v

关于try_split的理解:
简单来说,就假设y里只有2种元素。在try_split过程中,进行索引排序后,如果对应的y确实是按照由弱到强,或者由强到弱分布的,那找到的这个v确实是合适的,可假如经过索引排序后,对应的y是由强到弱再到强分布的,那用这个方法找到的v其实是不合适的,也就是说这个方法并不合适。

不知道这两个理解对不对?

正在回答 回答被采纳积分+3

3回答

liuyubobobo 2019-04-08 10:09:00

整个过程是首先对某一个维度的x进行排序。排序以后,依次遍历每一个点的值,以每一个点的值作为分割点,看在这里分割,是不是最佳的分割点(信息熵最小)。使用最佳分割点分割。


关键在于,分割的依据,不是训练数据集的y,而是根据每一个位置x计算出的分割后的信息熵:)


继续加油!:)

1 回复 有任何疑惑可以回复我~
  • 提问者 爱西瓜同志 #1
    波波老师,之前我没有表达清楚,我的意思是X已经完成了索引排序,但是X对应的y并不是按照(1,1,1,1,1,0,0,0,0)这样子的,而是(1,1,1,1,0,0,0,0,1,1,1,1)这样子的,就像是抛物线,随着X的增加 的,y会有一个先增后减的过程,在这种情况下,这个决策树的try_split方法是不是就没有多大意义了,因为并不能挑选出一个好的信息熵
    回复 有任何疑惑可以回复我~ 2019-04-08 11:58:24
  • liuyubobobo 回复 提问者 爱西瓜同志 #2
    我修改了原答案,看能否解释你的疑问?:)
    回复 有任何疑惑可以回复我~ 2019-04-08 12:15:49
  • 提问者 爱西瓜同志 回复 liuyubobobo #3
    嗯嗯,分割的依据是x。波波老师,我仔细看了看自己的描述,发现还是没有明确的表达自己的想法,我做一个图示,波波老师可以看看,在回答区。
    回复 有任何疑惑可以回复我~ 2019-04-08 19:11:18
提问者 爱西瓜同志 2019-04-08 19:12:35

https://img1.sycdn.imooc.com//szimg/5cab2c720001511a22261076.jpg

计算信息熵的依据应该是y吧

0 回复 有任何疑惑可以回复我~
提问者 爱西瓜同志 2019-04-08 09:36:07

关于第二个理解中y由弱到强(由强到弱)的理解就是:

    y可以是(1,1,1,1,1,0,0,0,0,0),(0,0,0,0,0,1,1,1,1,1)这样的

    而有强到弱再到强的理解可以是(1,1,1,1,1,1,0,0,0,0,0,,1,1,1,1,1),就是这么个意思

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信