91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 6KB
    文件類型: .py
    金幣: 1
    下載: 1 次
    發布日期: 2021-06-10
  • 語言: Python
  • 標簽: 決策樹??Python??

資源簡介

2017年3月16號關于決策樹的資源上傳錯了,這一份才是決策樹的Python代碼實現,包含詳細的中文注釋,歡迎下載學習。Python版本為2.7.

資源截圖

代碼片段和文件信息

#?-*-?coding:?utf-8?-*-
import?operator
from?math?import?log


‘‘‘創建數據集???‘‘‘
def?createData():??
????dataSet=[[11‘yes‘][11‘yes‘][10‘no‘][01‘no‘][01‘no‘]]
????label=[‘no?surfacing‘‘flippers‘]
????return?dataSetlabel


‘‘‘計算數據集的信息熵?(信息熵即指類別標簽的混亂程度,值越小越好)‘‘‘
def?calcshan(dataSet):???
????lenDataSet=len(dataSet)
????p={}
????H=0.0
????for?data?in?dataSet:
????????currentLabel=data[-1]??#獲取類別標簽
????????if?currentLabel?not?in?p.keys():??#若字典中不存在該類別標簽,即創建
????????????p[currentLabel]=0
????????p[currentLabel]+=1????#遞增類別標簽的值
????for?key?in?p:
????????px=float(p[key])/float(lenDataSet)??#計算某個標簽的概率
????????H-=px*log(px2)??#計算信息熵
????return?H
????????
????????????
‘‘‘根據某一特征分類數據集‘‘‘
def?spiltData(dataSetaxisvalue):????#dataSet為要劃分的數據集axis為給定的特征,value為給定特征的具體值
????subDataSet=[]
????for?data?in?dataSet:
????????subData=[]
????????if?data[axis]==value:
????????????subData=data[:axis]??#取出data中第0到axis-1個數進subData;
????????????subData.extend(data[axis+1:])??#取出data中第axis+1到最后一個數進subData;這兩行代碼相當于把第axis個數從數據集中剔除掉
????????????subDataSet.append(subData)?#此處要注意expend和append的區別
????return?subDataSet


‘‘‘遍歷所有特征,選擇信息熵最小的特征,即為最好的分類特征‘‘‘??????
def?chooseBestFeature(dataSet):??
????lenFeature=len(dataSet[0])-1????#計算特征維度時要把類別標簽那一列去掉
????shanInit=calcshan(dataSet)??????#計算原始數據集的信息熵
????feature=[]
????inValue=0.0
????bestFeature=0
????for?i?in?range(lenFeature):
????????shanCarry=0.0
????????feature=[example[i]?for?example?in?dataSet]??#提取第i個特征的所有數據
????????feature=set(feature)??#得到第i個特征所有的分類值,如‘0‘和‘1‘
????????for?feat?in?feature:??
????????????subData=spiltData(dataSetifeat)??#先對數據集按照分類值分類
????????????prob=float(len(subData))/float(len(dataSet))
????????????shanCarry+=prob*calcshan(subData)??#計算第i個特征的信息熵
????????outValue=shanInit-shanCarry??#原始數據信息熵與循環中的信息熵的差
????????if?(outValue>inValue):
????????????inValue=outValue??#將信息熵與原始熵相減后的值賦給inValue,方便下一個循環的信息熵差值與其比較
????????????bestFeature=i
????return?bestFeature

??
‘‘‘?如果數據集已經處理了所有屬性,但是類標簽依然不是唯一時使用,采用多數表決的方法定義該節點的分類‘‘‘
def?majorCount(classList):
????classCount={}
????for?vote?in?classList:
????????if?vote?not?in?classCount.keys():??#若字典中不存在該類別標簽,即創建
????????????classCount[vote]=0
????????classCount[vote]+=1????????????????#遞增類別標簽的值
????sortedClassCount=sorted(classCount.iterit

評論

共有 條評論