最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python3.0 實(shí)現(xiàn)決策樹(shù)算法的流程

 更新時(shí)間:2019年08月08日 09:45:32   作者:wangxiaoming  
這篇文章主要介紹了Python3.0 實(shí)現(xiàn)決策樹(shù)算法的流程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

決策樹(shù)的一般流程

檢測(cè)數(shù)據(jù)集中的每個(gè)子項(xiàng)是否屬于同一個(gè)分類(lèi)

if so return 類(lèi)標(biāo)簽
Else

  尋找劃分?jǐn)?shù)據(jù)集的最好特征

    劃分?jǐn)?shù)據(jù)集

   創(chuàng)建分支 節(jié)點(diǎn)

from math import log
import operator
#生成樣本數(shù)據(jù)集
def createDataSet():
  dataSet = [[1,1,'yes'],
        [1,1,'yes'],
        [1,0,'no'],
        [0,1,'no'],
        [0,1,'no']]
  labels = ['no surfacing','flipper']
  return dataSet,labels
# 計(jì)算香農(nóng)熵 香農(nóng) 大神必須要膜拜啊,信息界的根目錄人物啊
# no surfacing 指的是 不浮出水面能否生存 1 標(biāo)識(shí) 是 0 指的是否
# flipper 指的是是否有腳
# yes no指的是否是魚(yú)類(lèi)
def calcShannonEnt(dataSet):
  numEntries = len(dataSet) # 用上面的createDataSet dataSet 這個(gè)值就是5
  #定義標(biāo)簽字典
  labelCounts = {}
  # 為所有可能的分類(lèi)創(chuàng)建字典
  for featVec in dataSet:
    currentLabel = featVec[-1] #這個(gè)-1指的是去取最后一個(gè)維度 對(duì)應(yīng)數(shù)據(jù)dataSet 這里取的是yes和no
    if currentLabel not in labelCounts.keys():
      # 如果當(dāng)前分類(lèi)標(biāo)簽不在 標(biāo)簽字典中
      labelCounts[currentLabel] = 0
    # 其他情況 分類(lèi)標(biāo)簽分類(lèi)加1
    labelCounts[currentLabel] += 1
  #定義香農(nóng)熵 以2為底數(shù)求對(duì)數(shù)
  shannonEnt = 0.0
  for key in labelCounts:
    #計(jì)算 yes 或者No 出現(xiàn)的概率
    pro = float(labelCounts[key])/numEntries
    # 計(jì)算香農(nóng)熵
    shannonEnt -= pro*log(pro,2)
  return shannonEnt
#dataSet是待劃分的數(shù)據(jù)集, 劃分?jǐn)?shù)據(jù)集的特征 axis 特征的返回值value
#最后是創(chuàng)建了一個(gè)新的列表對(duì)象
def splitDataSet(dataSet, axis , value):
  # 創(chuàng)建新list對(duì)象
  retDataSet = []
  for featVec in dataSet:
    if featVec[axis] == value:
      reducedFeatVec = featVec[:axis]
      reducedFeatVec.extend(featVec[axis+1:])
      retDataSet.append(reducedFeatVec)
  return retDataSet
# 選擇最好的特征值進(jìn)行數(shù)據(jù)集劃分
def chooseBestFeatureToSplit(dataSet):
  # len(dataSet[0])是計(jì)算這一行有多少列,即有多少個(gè)特征值
  numFeatures = len(dataSet[0])-1 # -1 是最后一個(gè)特征值就不要記錄在內(nèi)了,算baseEntrop的時(shí)候已經(jīng)算了最后一個(gè)特征值yes no
  baseEntropy = calcShannonEnt(dataSet)
  bestInfoGain = 0.0
  bestFeature = -1
  for i in range(numFeatures):
    #創(chuàng)建唯一的分類(lèi)標(biāo)簽列表 也就是說(shuō)提取dataSet每一行第i個(gè)值 就提取dat
    featList = [example[i] for example in dataSet]
    # 取出有幾種特征值
    uniqueVals = set(featList)
    newEntropy = 0.0
    for value in uniqueVals:
      #創(chuàng)建特征值的子數(shù)據(jù)集
      subDataSet = splitDataSet(dataSet,i, value)
      #計(jì)算該特征值數(shù)據(jù)對(duì)總數(shù)在數(shù)據(jù)對(duì)總數(shù)出現(xiàn)的概率
      pro = len(subDataSet)/float(len(dataSet))
      #計(jì)算分割出來(lái)的子集香農(nóng)熵
      newEntropy += pro*calcShannonEnt(subDataSet)
    #計(jì)算信息增益 得到最好的特征值 這個(gè)理論是這樣的g(D,A) = H(D)-H(D/A)
    infoGain = baseEntropy-newEntropy
    #取出最大的信息增益,此時(shí)特征值最大
    if(infoGain >bestInfoGain):
      bestInfoGain = infoGain
      bestFeature = i
  return bestFeature
'''
#構(gòu)建決策樹(shù)是根據(jù)特征值的消耗來(lái)計(jì)算的,如果后面的特征值已經(jīng)全部用完了
但是還沒(méi)有分出結(jié)果,這個(gè)時(shí)候就需要使用多數(shù)表決方式計(jì)算節(jié)點(diǎn)分類(lèi)
最后返回最大的分類(lèi)
'''
def majorityCnt(classList):
  # 分類(lèi)的字典
  classCount = {}
  for vote in range(classList):
    #如果不在 分類(lèi)字典中
    if vote not in classCount.keys(): classCount[vote] = 0
    classCount[vote] += 1
    # 根據(jù)出現(xiàn)的次數(shù)大到小排序
    sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)
  return sortedClassCount[0][0]
#創(chuàng)建決策樹(shù)
def createTree(dataSet, labels):
  # 獲取數(shù)據(jù)樣本每組最后一組的特征值 這里是yes,no
  classList = [example[-1] for example in dataSet]
  # 如果說(shuō)這個(gè)classList 全部都是 yes 或者全部是no 那肯定子返回yes 或者no
  if(classList.count(classList[0]) == len(classList)):
    return classList[0]
  #如果遍歷完所有的特征返回出現(xiàn)次數(shù)最多的
  #是用消耗特征值的方式進(jìn)行構(gòu)造決策樹(shù)的,每次會(huì)消掉一個(gè)特征值
  if len(dataSet[0]) == 1:
    return majorityCnt(classList)
  #選擇最好的特征值
  bestFeat = chooseBestFeatureToSplit(dataSet)
  bestFeatLabel = labels[bestFeat]
  myTree = {bestFeatLabel:{}}
  # 刪除labels中的一特征值
  del(labels[bestFeat])
  #找到特征值那一列
  featValues = [example[bestFeat] for example in dataSet]
  uniqueVals = set(featValues)
  for value in uniqueVals:
    # labels列表的賦值
    subLabels = labels[:]
    myTree[bestFeatLabel][value]=createTree(splitDataSet(dataSet,bestFeat,value),subLabels)
  return myTree
dataSet,lables = createDataSet()
shannonEnt= calcShannonEnt(dataSet)
my = createTree(dataSet,lables)
print(my)

總結(jié)

以上所述是小編給大家介紹的Python3.0 實(shí)現(xiàn)決策樹(shù)算法的流程,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

  • python實(shí)現(xiàn)字典(dict)和字符串(string)的相互轉(zhuǎn)換方法

    python實(shí)現(xiàn)字典(dict)和字符串(string)的相互轉(zhuǎn)換方法

    這篇文章主要介紹了python實(shí)現(xiàn)字典(dict)和字符串(string)的相互轉(zhuǎn)換方法,涉及Python字典dict的遍歷與字符串轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下
    2017-03-03
  • Python中的列表及其操作方法

    Python中的列表及其操作方法

    這篇文章主要介紹了Python中的列表及其操作方法,涉及到的方法包括對(duì)列表元素進(jìn)行修改、添加、刪除、排序以及求列表長(zhǎng)度等,此外還介紹了列表的遍歷、數(shù)值列表、切片和元組的一些操作,下文詳細(xì)介紹需要的小伙伴可以參考一下
    2022-03-03
  • python3中dict.keys().sort()用不了的解決方法

    python3中dict.keys().sort()用不了的解決方法

    本文主要介紹了python3中dict.keys().sort()用不了的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Python+OpenCV圖像處理之直方圖統(tǒng)計(jì)

    Python+OpenCV圖像處理之直方圖統(tǒng)計(jì)

    直方圖就是對(duì)圖像的另外一種解釋?zhuān)枋隽苏鶊D像的灰度分布。通過(guò)直方圖我們可以對(duì)圖像的亮度、灰度分布、對(duì)比度等有了一個(gè)直觀的認(rèn)識(shí)。本文將為大家詳細(xì)介紹一下如何通過(guò)OpenCV實(shí)現(xiàn)直方圖統(tǒng)計(jì),感興趣的可以了解一下
    2021-12-12
  • python轉(zhuǎn)換pkl模型文件為txt文件問(wèn)題

    python轉(zhuǎn)換pkl模型文件為txt文件問(wèn)題

    這篇文章主要介紹了python轉(zhuǎn)換pkl模型文件為txt文件問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Python 處理數(shù)據(jù)庫(kù)事務(wù)的操作方法

    Python 處理數(shù)據(jù)庫(kù)事務(wù)的操作方法

    在Python中,處理數(shù)據(jù)庫(kù)事務(wù)通常涉及使用特定的數(shù)據(jù)庫(kù)驅(qū)動(dòng)如sqlite3、PyMySQL和psycopg2等,這些庫(kù)提供事務(wù)管理功能,允許開(kāi)發(fā)者手動(dòng)控制事務(wù)的提交和回滾,本文給大家介紹Python如何處理數(shù)據(jù)庫(kù)事務(wù),感興趣的朋友一起看看吧
    2024-10-10
  • Pygame Time時(shí)間控制的具體使用詳解

    Pygame Time時(shí)間控制的具體使用詳解

    pygame.time 時(shí)間控制模塊,是 Pygame 中使用頻率較高的模塊,其主要功能是管理時(shí)間和游戲幀數(shù)率,本文就來(lái)詳細(xì)的介紹一下,感興趣的可以了解一下
    2021-11-11
  • python之ImportError:模塊引入異常問(wèn)題

    python之ImportError:模塊引入異常問(wèn)題

    這篇文章主要介紹了python之ImportError:模塊引入異常問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 趣味Python實(shí)戰(zhàn)練習(xí)之自動(dòng)更換桌面壁紙腳本附源碼

    趣味Python實(shí)戰(zhàn)練習(xí)之自動(dòng)更換桌面壁紙腳本附源碼

    讀萬(wàn)卷書(shū)不如行萬(wàn)里路,學(xué)的扎不扎實(shí)要通過(guò)實(shí)戰(zhàn)才能看出來(lái),本篇文章手把手帶你編寫(xiě)一個(gè)自動(dòng)更換桌面壁紙的腳本,代碼簡(jiǎn)潔而且短,相信你一定看得懂,大家可以在過(guò)程中查缺補(bǔ)漏,看看自己掌握程度怎么樣
    2021-10-10
  • python 虛擬環(huán)境的創(chuàng)建與使用方法

    python 虛擬環(huán)境的創(chuàng)建與使用方法

    本文先介紹虛擬環(huán)境的基礎(chǔ)知識(shí)以及使用方法,然后再深入介紹虛擬環(huán)境背后的工作原理,需要的朋友可以參考下
    2021-06-06

最新評(píng)論

武义县| 丰台区| 应用必备| 黔西县| 保亭| 襄垣县| 达拉特旗| 五大连池市| 图木舒克市| 灵山县| 华阴市| 会东县| 东明县| 盱眙县| 麦盖提县| 勃利县| 沙田区| 道孚县| 兰考县| 巨鹿县| 安多县| 星子县| 姜堰市| 道真| 株洲县| 清水河县| 喜德县| 启东市| 雷山县| 杭锦旗| 湖南省| 娱乐| 会昌县| 日喀则市| 繁昌县| 南丹县| 吕梁市| 婺源县| 晴隆县| 西宁市| 金山区|