昨天,我们把分类函数算法算完,那今天,我打算建立决策树:
有了第一个最佳分类点和数值後,接下来就要找那个子集的下一个最佳分类点,上次程序只是找寻最佳分割点,并未找到分割资料,所以现在要建立函数来分割资料:
#一个5维资料,共5笔, ,data(第0维为y)
data=[[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]]
import copy
def split_Data(data, best_feature_col, best_split_value):
new_data = copy.deepcopy(data)
#去除特徵点资料
for i in range(len(new_data)):
new_data[i].remove(data[i][best_feature_col])
leftData, rightData = [], []
leftDataindex,rightDataindex = [], []
#去除特徵後分类资料
for j in range(len(data)):
if data[j][best_feature_col] <= best_split_value:
leftData.append(new_data[j])
leftDataindex.append(j)
else:
rightData.append(new_data[j])
rightDataindex.append(j)
return new_data,leftData,leftDataindex,rightData,rightDataindex, best_feature_col
new_data,leftData,leftDataindex,rightData,rightDataindex, best_feature_col=split_Data(data,best_feature_col,best_split_value)
print("去除特徵後资料:",new_data)
print("去除特徵後左资料:",leftData)
print("左资料在原始资料序列:",leftDataindex)
print("去除特徵後右资料:",rightData)
print("右资料在原始资料序列:",rightDataindex)
print("被去除特徵点:第",split_Data(data, best_feature_col,"位")
这样子就会得到资料:
去除特徵後资料: [[1, 1.01, 5, 1.5], [2, 2.01, 8, 8.1], [1, 3.01, 9, 5.6], [1, 3.01, 8, 2.3], [2, 4.01, 10, 1.1]]
去除特徵後左资料: [[2, 2.01, 8, 8.1], [1, 3.01, 8, 2.3], [2, 4.01, 10, 1.1]]
左资料在原始资料序列: [1, 3, 4]
去除特徵後右资料: [[1, 1.01, 5, 1.5], [1, 3.01, 9, 5.6]]
右资料在原始资料序列: [0, 2]
被去除特徵点:第 2 位
接着剩余资料再带回上次说的分类,就会得到一组决策树,当然依据资料特性会做出下列限制:
#确认是否为同一类别
def one_data_check(data):
count = 0
#拿第一笔值当范例
check = data[0][0]
for i in range(len(data)):
#check所有资料
if data[i][0]==check:
count+=1
if count==len(data):
return [check]
else:
return False
#确认是否为空
def no_data_check(data):
if len(data)==0:
return True
else:
return False
#类别都分类完
import random as rd
def one_feature_check(data):
count_use={}
if len(data[0])==1:
new_data=[]
for i in range(len(data)):
new_data.append(data[i][0])
for i in new_data:
if i in count_use.keys():
count_use[i]+=1
else:
count_use[i]=1
#确认最大值
max_check=max(count_use, key=count_use.get)
#确认类别是否一样多
the_same=[]
for key,value in count_use.items():
if(value == max(count_use.values())):
the_same.append(key)
#如果有一样就随机取
return rd.sample(the_same,1)
else:
return False
#示范有可能是0或1
print(one_feature_check([[0],[0],[1],[1]]))
这样子就成功设定好条件
好,今天实作部分就到这,明天再开始做建立树的後半段动作
当男孩往森林走去时,小屋里那只红色的手,正摸着地上的灯泡碎片,然後像是愤怒一般,他把所有的灯泡碎片全部用手敲碎,奇怪的是,敲击时完全没有发出任何声音,当他敲碎所有碎片後,碎片留下的残渣在一瞬间变成黑色後,就消失得无影无踪,这时小屋内的土地开始崩塌,手的主人露了出来,他是一个高高瘦瘦的男人,看起来跟一般人没有差别,只是他的双手和双脚却有如鲜血般红润
--|你在哪里?到底在哪?在~哪~里? |-- CS.MM
<<: [Lesson5] BottomNavigationView
一. LSTM的问题 LSTM虽然非常强大,但LSTM也是有一个问题,就是计算时间较久导致执行速度较...
气泡图介绍 昨天已经介绍完散布图了,大致上与散布图的作法大同小异,差别在於气泡本身也就是circle...
认识变数 variable 在昨天的历程中小光学习到如何透过dotnet cli来产生专案跟方案,并...
前言 我们已经将TableView的Header给设置完毕了,那可以看到IPhone内建的画面: 两...
Did you have a brilliant concept for a product but...