《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 業界動態 > 介紹機器學習分類算法——決策樹

介紹機器學習分類算法——決策樹

2018-07-27

  今天,我們介紹機器學習里比較常用的一種分類算法,決策樹。決策樹是對人類認知識別的一種模擬,給你一堆看似雜亂無章的數據,如何用盡可能少的特征,對這些數據進行有效的分類。

  決策樹借助了一種層級分類的概念,每一次都選擇一個區分性最好的特征進行分類,對于可以直接給出標簽 label 的數據,可能最初選擇的幾個特征就能很好地進行區分,有些數據可能需要更多的特征,所以決策樹的深度也就表示了你需要選擇的幾種特征。

  在進行特征選擇的時候,常常需要借助信息論的概念,利用最大熵原則。

  決策樹一般是用來對離散數據進行分類的,對于連續數據,可以事先對其離散化。

  在介紹決策樹之前,我們先簡單的介紹一下信息熵,我們知道,熵的定義為:

1.jpg

  我們先構造一些簡單的數據:

  from sklearn import datasets

  import numpy as np

  import matplotlib.pyplot as plt

  import math

  import operator

  def Create_data():

  dataset = [[1, 1, 'yes'],

  [1, 1, 'yes'],

  [1, 0, 'no'],

  [0, 1, 'no'],

  [0, 1, 'no'],

  [3, 0, 'maybe']]

  feat_name = ['no surfacing', 'flippers']

  return dataset, feat_name

  然后定義一個計算熵的函數:

  def Cal_entrpy(dataset):

  n_sample = len(dataset)

  n_label = {}

  for featvec in dataset:

  current_label = featvec[-1]

  if current_label not in n_label.keys():

  n_label[current_label] = 0

  n_label[current_label] += 1

  shannonEnt = 0.0

  for key in n_label:

  prob = float(n_label[key]) / n_sample

  shannonEnt -= prob * math.log(prob, 2)

  return shannonEnt

  要注意的是,熵越大,說明數據的類別越分散,越呈現某種無序的狀態。

  下面再定義一個拆分數據集的函數:

  def Split_dataset(dataset, axis, value):

  retDataSet = []

  for featVec in dataset:

  if featVec[axis] == value:

  reducedFeatVec = featVec[:axis]

  reducedFeatVec.extend(featVec[axis+1 :])

  retDataSet.append(reducedFeatVec)

  return retDataSet

  結合前面的幾個函數,我們可以構造一個特征選擇的函數:

  def Choose_feature(dataset):

  num_sample = len(dataset)

  num_feature = len(dataset[0]) - 1

  baseEntrpy = Cal_entrpy(dataset)

  best_Infogain = 0.0

  bestFeat = -1

  for i in range (num_feature):

  featlist = [example[i] for example in dataset]

  uniquValus = set(featlist)

  newEntrpy = 0.0

  for value in uniquValus:

  subData = Split_dataset(dataset, i, value)

  prob = len(subData) / float(num_sample)

  newEntrpy += prob * Cal_entrpy(subData)

  info_gain = baseEntrpy - newEntrpy

  if (info_gain > best_Infogain):

  best_Infogain = info_gain

  bestFeat = i

  return bestFeat

  然后再構造一個投票及計票的函數

  def Major_cnt(classlist):

  class_num = {}

  for vote in classlist:

  if vote not in class_num.keys():

  class_num[vote] = 0

  class_num[vote] += 1

  Sort_K = sorted(class_num.iteritems(),

  key = operator.itemgetter(1), reverse=True)

  return Sort_K[0][0]

  有了這些,就可以構造我們需要的決策樹了:

  def Create_tree(dataset, featName):

  classlist = [example[-1] for example in dataset]

  if classlist.count(classlist[0]) == len(classlist):

  return classlist[0]

  if len(dataset[0]) == 1:

  return Major_cnt(classlist)

  bestFeat = Choose_feature(dataset)

  bestFeatName = featName[bestFeat]

  myTree = {bestFeatName: {}}

  del(featName[bestFeat])

  featValues = [example[bestFeat] for example in dataset]

  uniqueVals = set(featValues)

  for value in uniqueVals:

  subLabels = featName[:]

  myTree[bestFeatName][value] = Create_tree(Split_dataset

  (dataset, bestFeat, value), subLabels)

  return myTree

  def Get_numleafs(myTree):

  numLeafs = 0

  firstStr = myTree.keys()[0]

  secondDict = myTree[firstStr]

  for key in secondDict.keys():

  if type(secondDict[key]).__name__ == 'dict' :

  numLeafs += Get_numleafs(secondDict[key])

  else:

  numLeafs += 1

  return numLeafs

  def Get_treedepth(myTree):

  max_depth = 0

  firstStr = myTree.keys()[0]

  secondDict = myTree[firstStr]

  for key in secondDict.keys():

  if type(secondDict[key]).__name__ == 'dict' :

  this_depth = 1 + Get_treedepth(secondDict[key])

  else:

  this_depth = 1

  if this_depth > max_depth:

  max_depth = this_depth

  return max_depth

  我們也可以把決策樹繪制出來:

  def Plot_node(nodeTxt, centerPt, parentPt, nodeType):

  Create_plot.ax1.annotate(nodeTxt, xy=parentPt,

  xycoords='axes fraction',

  xytext=centerPt, textcoords='axes fraction',

  va=center, ha=center, bbox=nodeType, arrowprops=arrow_args)

  def Plot_tree(myTree, parentPt, nodeTxt):

  numLeafs = Get_numleafs(myTree)

  Get_treedepth(myTree)

  firstStr = myTree.keys()[0]

  cntrPt = (Plot_tree.xOff + (1.0 + float(numLeafs))/2.0/Plot_tree.totalW,

  Plot_tree.yOff)

  Plot_midtext(cntrPt, parentPt, nodeTxt)

  Plot_node(firstStr, cntrPt, parentPt, decisionNode)

  secondDict = myTree[firstStr]

  Plot_tree.yOff = Plot_tree.yOff - 1.0/Plot_tree.totalD

  for key in secondDict.keys():

  if type(secondDict[key]).__name__=='dict':

  Plot_tree(secondDict[key],cntrPt,str(key))

  else:

  Plot_tree.xOff = Plot_tree.xOff + 1.0/Plot_tree.totalW

  Plot_node(secondDict[key], (Plot_tree.xOff, Plot_tree.yOff),

  cntrPt, leafNode)

  Plot_midtext((Plot_tree.xOff, Plot_tree.yOff), cntrPt, str(key))

  Plot_tree.yOff = Plot_tree.yOff + 1.0/Plot_tree.totalD

  def Create_plot (myTree):

  fig = plt.figure(1, facecolor = 'white')

  fig.clf()

  axprops = dict(xticks=[], yticks=[])

  Create_plot.ax1 = plt.subplot(111, frameon=False, **axprops)

  Plot_tree.totalW = float(Get_numleafs(myTree))

  Plot_tree.totalD = float(Get_treedepth(myTree))

  Plot_tree.xOff = -0.5/Plot_tree.totalW; Plot_tree.yOff = 1.0;

  Plot_tree(myTree, (0.5,1.0), '')

  plt.show()

  def Plot_midtext(cntrPt, parentPt, txtString):

  xMid = (parentPt[0] - cntrPt[0]) / 2.0 + cntrPt[0]

  yMid = (parentPt[1] - cntrPt[1]) / 2.0 + cntrPt[1]

  Create_plot.ax1.text(xMid, yMid, txtString)

  def Classify(myTree, featLabels, testVec):

  firstStr = myTree.keys()[0]

  secondDict = myTree[firstStr]

  featIndex = featLabels.index(firstStr)

  for key in secondDict.keys():

  if testVec[featIndex] == key:

  if type(secondDict[key]).__name__ == 'dict' :

  classLabel = Classify(secondDict[key],featLabels,testVec)

  else:

  classLabel = secondDict[key]

  return classLabel

  最后,可以測試我們的構造的決策樹分類器:

  decisionNode = dict(boxstyle=sawtooth, fc=0.8)

  leafNode = dict(boxstyle=round4, fc=0.8)

  arrow_args = dict(arrowstyle=-)

  myData, featName = Create_data()

  S_entrpy = Cal_entrpy(myData)

  new_data = Split_dataset(myData, 0, 1)

  best_feat = Choose_feature(myData)

  myTree = Create_tree(myData, featName[:])

  num_leafs = Get_numleafs(myTree)

  depth = Get_treedepth(myTree)

  Create_plot(myTree)

  predict_label = Classify(myTree, featName, [1, 0])

  print(the predict label is: , predict_label)

  print(the decision tree is: , myTree)

  print(the best feature index is: , best_feat)

  print(the new dataset: , new_data)

  print(the original dataset: , myData)

  print(the feature names are: , featName)

  print(the entrpy is:, S_entrpy)

  print(the number of leafs is: , num_leafs)

  print(the dpeth is: , depth)

  print(All is well.)

  構造的決策樹最后如下所示:

2.jpg


本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          在线观看成人av电影| 国产精品久久久久久久久免费| 欧美韩日视频| 国产精品久久久久久久久久妞妞| 国产精品美女在线观看| 久久久久久久久久久一区| 国产三级精品三级| 欧美一区二区三区男人的天堂| 欧美综合77777色婷婷| 开心色5月久久精品| 欧美特黄一区| 一区在线播放视频| 一区二区三区在线视频播放| 在线观看日韩www视频免费| 一区二区三区在线免费视频| 亚洲日本中文字幕区| 国产精品视频区| 国产精品无码专区在线观看| 在线观看亚洲| 久久久久99精品国产片| 久久中文字幕一区| 一本色道88久久加勒比精品| 国产精品社区| 国产精品入口尤物| 一区二区三区欧美亚洲| 国产欧美精品一区二区三区介绍| 亚洲欧美日韩综合aⅴ视频| 亚洲成人在线| 亚洲人成欧美中文字幕| 欧美日韩视频在线一区二区观看视频| 在线视频欧美日韩精品| 国内精品久久久久久久果冻传媒| 国产精品区二区三区日本| 久久噜噜噜精品国产亚洲综合| 久久精品国产亚洲5555| 亚洲精品综合精品自拍| 亚洲国产一区二区a毛片| 国产精品a久久久久久| 亚洲一区二区视频| 亚洲精品乱码久久久久久按摩观| 亚洲日本精品国产第一区| 国产美女精品视频免费观看| 欧美日韩激情小视频| 欧美中文在线观看国产| 久久精品女人的天堂av| 欧美一二三视频| 欧美精品一区二区在线播放| 午夜精品久久久久久久99热浪潮| 蜜桃伊人久久| 亚洲大胆人体视频| 狠狠色丁香婷婷综合| 欧美专区在线| 国产人妖伪娘一区91| 亚洲国产欧美日韩另类综合| 国产欧美在线观看| 久久aⅴ国产紧身牛仔裤| 久久国产精品99精品国产| 欧美在线三级| 麻豆91精品91久久久的内涵| 午夜精品福利视频| 午夜免费电影一区在线观看| 亚洲免费综合| 亚洲国产成人精品久久久国产成人一区| 国产在线精品一区二区夜色| 黄色免费成人| 宅男噜噜噜66一区二区| 亚洲伊人伊色伊影伊综合网| 亚洲第一在线综合网站| 一区二区三区国产在线观看| 午夜亚洲视频| 久久男人资源视频| 久久精品91| 亚洲综合精品自拍| 久久久中精品2020中文| 一本色道久久综合亚洲精品婷婷| 美女国内精品自产拍在线播放| 国产欧美一区二区三区久久人妖| 亚洲人成人一区二区三区| 国产精品久久久久久久久免费桃花| 国产一区二区三区免费在线观看| 欧美日韩一区二区三区| 国产一区二区看久久| 宅男噜噜噜66国产日韩在线观看| 欧美成人免费全部| 性一交一乱一区二区洋洋av| 欧美日韩国产123| 亚洲一区二区三区四区视频| 亚洲深夜影院| 国产精品日韩一区二区三区| 亚洲激精日韩激精欧美精品| 国产日韩欧美在线| 另类图片综合电影| 欧美日韩精品一区二区三区| 美女精品国产| 这里只有精品丝袜| 欧美日韩高清不卡| 一区二区电影免费在线观看| 欧美a级片一区| 国产主播一区二区三区四区| 欧美精品 国产精品| 欧美精品一区在线播放| 国产一区999| 日韩视频永久免费观看| 欧美日韩极品在线观看一区| 欧美日一区二区三区在线观看国产免| 欧美日韩在线大尺度| 亚洲黄色免费| 久久久久久久网站| 国产精品久久久久久福利一牛影视| 一本久久综合亚洲鲁鲁| 日韩视频中午一区| 欧美日韩午夜激情| 欧美日在线观看| 亚洲一区二区三区视频| 久久免费视频网站| 国产亚洲欧美日韩精品| 国产精品久久久一区麻豆最新章节| 欧美日韩一区二区三区四区在线观看| 久久久精品一区二区三区| 欧美精品色一区二区三区| 欧美日韩视频专区在线播放| 久久成人久久爱| 久久久久久国产精品mv| 欧美日韩精品一区二区| 亚洲图片欧洲图片日韩av| 国产日韩欧美亚洲一区| 久久久激情视频| 国产偷自视频区视频一区二区| 欧美精品日韩www.p站| 欧美精品一区二区三区在线看午夜| 亚洲欧美国产高清va在线播| 亚洲国产精品va在看黑人| 欧美黄色大片网站| 亚洲精品久久久久久久久久久久| 亚洲经典一区| 精品不卡在线| 亚洲影院一区| 亚洲高清视频在线| 韩国精品主播一区二区在线观看| 亚洲婷婷免费| 久久精品水蜜桃av综合天堂| 国产精品综合色区在线观看| 国产亚洲一区二区在线观看| 亚洲第一福利社区| 欧美日韩一区二区三区| 国产精品日韩在线观看| 国内揄拍国内精品久久| 午夜欧美电影在线观看| 一本高清dvd不卡在线观看| 亚洲精品国产精品国产自| 久久久精品国产一区二区三区| 亚洲激情网站免费观看| 亚洲伊人一本大道中文字幕| 久久永久免费| 亚洲欧洲精品一区二区| 国产精品国码视频| 老司机精品视频一区二区三区| 老司机午夜精品| 国内在线观看一区二区三区| 欧美一区二区三区视频免费| 亚洲精品久久久久久久久| 国产亚洲欧美中文| 香港久久久电影| 欧美成年人视频网站欧美| 欧美激情亚洲视频| 免费一区视频| 在线观看欧美| 国产一区91精品张津瑜| 国产人妖伪娘一区91| 亚洲精品自在久久| 久久久噜噜噜久噜久久| 欧美激情一区二区三区高清视频| 欧美日本一道本在线视频| 亚洲日本aⅴ片在线观看香蕉| 国产精品久久午夜夜伦鲁鲁| 欧美日韩hd| 欧美jizz19性欧美| 毛片基地黄久久久久久天堂| 亚洲国产精品va在线看黑人动漫| 亚洲国产成人一区| 国产精品视频你懂的| 国产精品看片资源| 激情懂色av一区av二区av| 欧美一级成年大片在线观看| 免费成人小视频| 欧美一区国产一区| 欧美激情综合| 久久精品123| 国产亚洲福利社区一区| 欧美国产日韩一二三区| 欧美在线视频播放| 国产美女在线精品免费观看| 欧美精品久久久久久久免费观看| 精品成人国产| 亚洲第一久久影院| 午夜欧美电影在线观看| 亚洲国产一区二区三区青草影视| 欧美日韩国产一区精品一区| 欧美日韩成人精品| 亚洲高清免费在线| 亚洲毛片在线观看.| 国产视频精品免费播放| 国产久一道中文一区| 免费观看成人| 在线视频亚洲| 国产一区二区三区在线观看网站| 亚洲欧美一区二区精品久久久| 樱桃视频在线观看一区| 蜜臀av在线播放一区二区三区| 欧美日韩国产影院| 欧美激情综合亚洲一二区| 国产精品视频自拍| 欧美精品日韩www.p站| 欧美电影免费观看大全| 亚洲人成77777在线观看网| 久久aⅴ乱码一区二区三区| 亚洲精品在线三区| 欧美jjzz| 欧美精品尤物在线| 亚洲与欧洲av电影| 国产曰批免费观看久久久| 极品尤物av久久免费看| 国产欧美日韩三区| 欧美激情在线有限公司| 亚洲深夜激情| 国产欧美日韩精品a在线观看| 国产欧美一二三区| 亚洲一区二区成人在线观看| 国内精品一区二区| 亚洲美女黄色片| 国产精品视频观看| 亚洲天堂成人| 玖玖玖免费嫩草在线影院一区| 国产一级精品aaaaa看| 亚洲视频碰碰| 国产精品久久二区| 在线视频中文亚洲| 亚洲精品自在久久| 欧美日韩一区在线视频| 久久躁日日躁aaaaxxxx| 欧美天堂亚洲电影院在线观看| 亚洲国产一区二区视频| 亚洲免费中文字幕| 国产日韩欧美三区| 久久在线播放| 欧美一区二区三区男人的天堂| 欧美日韩一区在线视频| 国产精品国产馆在线真实露脸| 亚洲尤物在线视频观看| 欧美日韩大片一区二区三区| 国产精品a久久久久久| 国产一区二区三区在线免费观看| 亚洲免费观看视频| 久久激情视频| 亚洲激情午夜| 欧美88av| 欧美电影专区| 亚洲精品乱码久久久久久日本蜜臀| 亚洲欧美日韩综合一区| 欧美日韩岛国| 欧美成人综合一区| 亚洲蜜桃精久久久久久久| 欧美xart系列高清| 国产精品免费一区豆花| 免费在线播放第一区高清av| 一区二区三区四区五区精品视频| 国产精品欧美久久久久无广告| 亚洲午夜精品视频| 一区二区三区三区在线| 亚洲素人在线| 国产欧美一区二区三区久久| 亚洲永久精品大片| 日韩视频免费在线观看| 国产精品视频一区二区三区| 亚洲久久一区| 国产日韩欧美a| 激情久久综艺| 久久精品一区中文字幕| 亚洲欧美国产77777| 久久精品国产69国产精品亚洲| 日韩一区二区福利| 国产午夜精品全部视频在线播放| 久久手机免费观看| 亚洲欧美国产高清va在线播| 一本一本久久a久久精品综合麻豆| 在线亚洲欧美视频| 亚洲欧美国产日韩天堂区| 国产麻豆精品在线观看| 久久精品亚洲精品| 91久久国产综合久久蜜月精品| 欧美日韩国产精品一卡| 国产一区导航| 亚洲欧美伊人| 亚洲国产成人久久综合一区| 亚洲美女少妇无套啪啪呻吟| 毛片精品免费在线观看| 亚洲欧美日韩中文播放| 老鸭窝毛片一区二区三区| 国产亚洲福利| 国产精品九色蝌蚪自拍| 欧美日韩免费观看一区| 麻豆成人在线播放| 欧美日韩亚洲一区在线观看| 亚洲国产精品视频一区| 免费影视亚洲| 麻豆成人综合网| 日韩视频免费观看高清完整版| 一区二区三区在线视频播放| 亚洲精品一区二区三区樱花| 亚洲欧美日韩另类精品一区二区三区| 韩日精品视频一区| 一区二区三区国产在线观看| 免费观看国产成人| 精品电影一区| 国产精品私房写真福利视频| 国内精品视频在线播放| 亚洲少妇诱惑| 一区二区三区久久网| 亚洲第一网站免费视频| 国产乱码精品1区2区3区| 午夜在线一区| 艳女tv在线观看国产一区| 国产精品久久久久久久免费软件| 欧美人成在线| 亚洲欧美日韩一区二区在线| 欧美一区二粉嫩精品国产一线天| 性做久久久久久久免费看| 老司机67194精品线观看|