亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

解讀python如何實現決策樹算法

2020-02-15 23:09:17
字體:
來源:轉載
供稿:網友

數據描述

每條數據項儲存在列表中,最后一列儲存結果

多條數據項形成數據集

data=[[d1,d2,d3...dn,result],   [d1,d2,d3...dn,result],        .        .   [d1,d2,d3...dn,result]]

決策樹數據結構

class DecisionNode:  '''決策樹節點  '''     def __init__(self,col=-1,value=None,results=None,tb=None,fb=None):    '''初始化決策樹節點         args:        col -- 按數據集的col列劃分數據集    value -- 以value作為劃分col列的參照    result -- 只有葉子節點有,代表最終劃分出的子數據集結果統計信息。{‘結果':結果出現次數}    rb,fb -- 代表左右子樹    '''    self.col=col    self.value=value    self.results=results    self.tb=tb    self.fb=fb

決策樹分類的最終結果是將數據項劃分出了若干子集,其中每個子集的結果都一樣,所以這里采用{‘結果':結果出現次數}的方式表達每個子集

def pideset(rows,column,value):  '''依據數據集rows的column列的值,判斷其與參考值value的關系對數據集進行拆分    返回兩個數據集  '''  split_function=None  #value是數值類型  if isinstance(value,int) or isinstance(value,float):    #定義lambda函數當row[column]>=value時返回true    split_function=lambda row:row[column]>=value  #value是字符類型  else:    #定義lambda函數當row[column]==value時返回true    split_function=lambda row:row[column]==value  #將數據集拆分成兩個  set1=[row for row in rows if split_function(row)]  set2=[row for row in rows if not split_function(row)]  #返回兩個數據集  return (set1,set2) def uniquecounts(rows):  '''計算數據集rows中有幾種最終結果,計算結果出現次數,返回一個字典  '''  results={}  for row in rows:    r=row[len(row)-1]    if r not in results: results[r]=0    results[r]+=1  return results def giniimpurity(rows):  '''返回rows數據集的基尼不純度  '''  total=len(rows)  counts=uniquecounts(rows)  imp=0  for k1 in counts:    p1=float(counts[k1])/total    for k2 in counts:      if k1==k2: continue      p2=float(counts[k2])/total      imp+=p1*p2  return imp def entropy(rows):  '''返回rows數據集的熵  '''  from math import log  log2=lambda x:log(x)/log(2)   results=uniquecounts(rows)  ent=0.0  for r in results.keys():    p=float(results[r])/len(rows)    ent=ent-p*log2(p)  return ent def build_tree(rows,scoref=entropy):  '''構造決策樹  '''  if len(rows)==0: return DecisionNode()  current_score=scoref(rows)   # 最佳信息增益  best_gain=0.0  #  best_criteria=None  #最佳劃分  best_sets=None   column_count=len(rows[0])-1  #遍歷數據集的列,確定分割順序  for col in range(0,column_count):    column_values={}    # 構造字典    for row in rows:      column_values[row[col]]=1    for value in column_values.keys():      (set1,set2)=pideset(rows,col,value)      p=float(len(set1))/len(rows)      # 計算信息增益      gain=current_score-p*scoref(set1)-(1-p)*scoref(set2)      if gain>best_gain and len(set1)>0 and len(set2)>0:        best_gain=gain        best_criteria=(col,value)        best_sets=(set1,set2)  # 如果劃分的兩個數據集熵小于原數據集,進一步劃分它們  if best_gain>0:    trueBranch=build_tree(best_sets[0])    falseBranch=build_tree(best_sets[1])    return DecisionNode(col=best_criteria[0],value=best_criteria[1],            tb=trueBranch,fb=falseBranch)  # 如果劃分的兩個數據集熵不小于原數據集,停止劃分  else:    return DecisionNode(results=uniquecounts(rows)) def print_tree(tree,indent=''):  if tree.results!=None:    print(str(tree.results))  else:    print(str(tree.col)+':'+str(tree.value)+'? ')    print(indent+'T->',end='')    print_tree(tree.tb,indent+' ')    print(indent+'F->',end='')    print_tree(tree.fb,indent+' ')  def getwidth(tree):  if tree.tb==None and tree.fb==None: return 1  return getwidth(tree.tb)+getwidth(tree.fb) def getdepth(tree):  if tree.tb==None and tree.fb==None: return 0  return max(getdepth(tree.tb),getdepth(tree.fb))+1  def drawtree(tree,jpeg='tree.jpg'):  w=getwidth(tree)*100  h=getdepth(tree)*100+120   img=Image.new('RGB',(w,h),(255,255,255))  draw=ImageDraw.Draw(img)   drawnode(draw,tree,w/2,20)  img.save(jpeg,'JPEG') def drawnode(draw,tree,x,y):  if tree.results==None:    # Get the width of each branch    w1=getwidth(tree.fb)*100    w2=getwidth(tree.tb)*100     # Determine the total space required by this node    left=x-(w1+w2)/2    right=x+(w1+w2)/2     # Draw the condition string    draw.text((x-20,y-10),str(tree.col)+':'+str(tree.value),(0,0,0))     # Draw links to the branches    draw.line((x,y,left+w1/2,y+100),fill=(255,0,0))    draw.line((x,y,right-w2/2,y+100),fill=(255,0,0))       # Draw the branch nodes    drawnode(draw,tree.fb,left+w1/2,y+100)    drawnode(draw,tree.tb,right-w2/2,y+100)  else:    txt=' /n'.join(['%s:%d'%v for v in tree.results.items()])    draw.text((x-20,y),txt,(0,0,0))            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一道本无吗dⅴd在线播放一区| 亚洲国产精品中文| 亚洲欧美在线一区二区| 久久精品小视频| 91久久精品国产91性色| 久久视频在线播放| 秋霞午夜一区二区| 国产性色av一区二区| 亚洲欧美精品一区二区| 欧美激情性做爰免费视频| 91久久在线视频| xx视频.9999.com| 欧美影院久久久| 91久久精品国产91久久性色| 色哟哟网站入口亚洲精品| 91麻豆桃色免费看| 中文字幕亚洲欧美一区二区三区| 欧美成年人网站| 日韩精品视频三区| 日韩视频在线免费| 国产精品久久色| 亚洲精品日韩av| 91av福利视频| 欧洲亚洲免费视频| 91久久在线播放| 黑人巨大精品欧美一区免费视频| 国产精品91久久久| 亚洲一区二区三区777| 国产精品久久久久久久久免费看| 国产精品69精品一区二区三区| 欧美性高跟鞋xxxxhd| 91在线观看免费高清| 亚洲精品电影网在线观看| 福利微拍一区二区| 97视频免费看| 久久久久久网址| 91精品国产91久久久久久不卡| 亚洲午夜久久久影院| 免费不卡在线观看av| 亚洲精品国偷自产在线99热| 国产精品日韩在线一区| 日韩av日韩在线观看| 国产日韩欧美在线看| 亚洲在线免费观看| 国产欧美日韩免费| 国产亚洲人成网站在线观看| 一区二区欧美亚洲| 高跟丝袜一区二区三区| 久久精品夜夜夜夜夜久久| 精品国产一区二区三区久久| 欧美午夜性色大片在线观看| 国产精品av在线播放| 国产精品揄拍一区二区| 亚洲国内高清视频| 一本色道久久88综合日韩精品| 欧美精品一区二区三区国产精品| 欧美又大又硬又粗bbbbb| 欧美精品久久久久久久久久| 尤物九九久久国产精品的分类| 神马久久桃色视频| www.久久久久久.com| 亚洲成av人乱码色午夜| 高清日韩电视剧大全免费播放在线观看| 中文字幕亚洲一区在线观看| 国产精品福利无圣光在线一区| 国产精品一二三视频| 亚洲bt欧美bt日本bt| 日韩久久精品电影| 精品日韩中文字幕| …久久精品99久久香蕉国产| 亚洲成人教育av| 亚洲免费影视第一页| 亚洲一区二区中文| 亚洲a∨日韩av高清在线观看| 国内精品久久久久久| 日韩欧美高清在线视频| 久久在线观看视频| 日韩精品视频在线免费观看| 日韩视频免费大全中文字幕| 欧美美女操人视频| 福利视频第一区| 国产精品久久久久久久天堂| 亚洲精品动漫久久久久| 九九精品在线播放| 国产精品老女人视频| 国产精品无码专区在线观看| 午夜免费久久久久| 国产精品国产亚洲伊人久久| 国产精品入口尤物| 中文字幕久热精品在线视频| 亚洲第一页中文字幕| 精品在线观看国产| 成人欧美一区二区三区在线| 久久精品99国产精品酒店日本| 成人免费福利在线| 久久国产精品偷| 亚洲国产另类 国产精品国产免费| 日本免费久久高清视频| 中文字幕亚洲无线码在线一区| 国产日韩在线看片| 永久免费看mv网站入口亚洲| 国产一区二区三区免费视频| 欧洲精品毛片网站| 国内精品国产三级国产在线专| 国产丝袜高跟一区| 欧美日韩国产中文精品字幕自在自线| 国产精品国产亚洲伊人久久| 亚洲精品国产拍免费91在线| 欧美极品少妇xxxxx| 国产69精品久久久| 久久男人的天堂| 亚洲国产第一页| 在线精品视频视频中文字幕| 91精品久久久久久久久不口人| 91网在线免费观看| 九九精品在线视频| 亚洲最大的av网站| 欧美xxxx18国产| 亚洲精品久久视频| 国模视频一区二区| 国产欧美一区二区三区在线看| 欧美成人在线免费视频| 欧美另类在线播放| 国产91网红主播在线观看| 韩国精品美女www爽爽爽视频| 亚洲视频网站在线观看| 亚洲国产精品va在线观看黑人| 亚洲第一区中文字幕| 2019中文字幕免费视频| 97精品伊人久久久大香线蕉| 精品福利在线观看| 欧美日韩不卡合集视频| 一区二区三区久久精品| 久久精品国产欧美激情| 欧美成人自拍视频| 欧美人在线观看| 成人福利免费观看| 日韩女优人人人人射在线视频| 久久久久亚洲精品| 尤物精品国产第一福利三区| 国产一区二区三区在线观看网站| 国产精品自产拍在线观看中文| 日本高清视频精品| 国产精品青草久久久久福利99| 国产中文字幕亚洲| 日韩亚洲欧美中文在线| 亚洲激情第一页| 亚洲国产欧美在线成人app| 91免费精品国偷自产在线| 久久国产精品久久国产精品| 久久精品国产亚洲精品2020| 欧美激情啊啊啊| 久久伊人91精品综合网站| 国产一区二区黄| 欧美成人精品一区| 国产精品国语对白| 欧洲美女7788成人免费视频| 亚洲精品国产精品乱码不99按摩| 久久久成人av| 日本不卡免费高清视频| 亚洲精品乱码久久久久久金桔影视| 日韩精品在线电影| 亚洲天堂影视av| 欧美洲成人男女午夜视频|