思考連續值和離散值的不同之處:
二分子樹的時候不同:離散值需要求出最優的兩個組合,連續值需要找到乙個合適的分割點把特徵切分為前後兩塊
這裡不考慮特徵的減少問題
切分資料的不同:根據大於和小於等於切分資料集
def選擇最好特徵的最好特徵值splitdataset(dataset, axis, value,threshold):
retdataset =
if threshold == 'lt'
:
for featvec in
dataset:
if featvec[axis] <= value:
else
:
for featvec in
dataset:
if featvec[axis] > value:
return retdataset
def生成cart:總體上和離散值的差不多,主要差別在於分支的值要加上大於或者小於等於號choosebestfeaturetosplit(dataset):
numfeatures = len(dataset[0]) - 1bestginigain = 1.0; bestfeature = -1;bsetvalue=""
for i in range(numfeatures): #
遍歷特徵
featlist = [example[i] for example in dataset]#
得到特徵列
uniquevals = list(set(featlist)) #
從特徵列獲取該特徵的特徵值的set集合
uniquevals.sort()
for value in uniquevals:#
遍歷所有的特徵值
ginigain = 0.0
#左增益 left_subdataset = splitdataset(dataset, i, value,'lt'
) left_prob = len(left_subdataset)/float(len(dataset))
ginigain += left_prob *calgini(left_subdataset)
#print left_prob,calgini(left_subdataset),
#右增益
right_subdataset = splitdataset(dataset, i, value,'gt'
) right_prob = len(right_subdataset)/float(len(dataset))
ginigain += right_prob *calgini(right_subdataset)
#print right_prob,calgini(right_subdataset),
#print ginigain
if (ginigain < bestginigain): #
比較是否是最好的結果
bestginigain = ginigain #
記錄最好的結果和最好的特徵
bestfeature =i
bsetvalue=value
return bestfeature,bsetvalue
def我們看下連續值的cart大概是什麼樣的(資料集是我們之前用的100個點的資料集)createtree(dataset,labels):
classlist = [example[-1] for example in
dataset]
#print dataset
if classlist.count(classlist[0]) ==len(classlist):
return classlist[0]#
所有的類別都一樣,就不用再劃分了
if len(dataset) == 1: #
如果沒有繼續可以劃分的特徵,就多數表決決定分支的類別
return
majoritycnt(classlist)
bestfeat,bsetvalue =choosebestfeaturetosplit(dataset)
#print bestfeat,bsetvalue,labels
bestfeatlabel =labels[bestfeat]
if bestfeat==-1:
return
majoritycnt(classlist)
mytree =}
featvalues = [example[bestfeat] for example in
dataset]
uniquevals =list(set(featvalues))
sublabels =labels[:]
#print bsetvalue
mytree[bestfeatlabel][bestfeatlabel+'
<=
'+str(round(float(bsetvalue),3))] = createtree(splitdataset(dataset, bestfeat, bsetvalue,'lt'
),sublabels)
mytree[bestfeatlabel][bestfeatlabel+'
>
'+str(round(float(bsetvalue),3))] = createtree(splitdataset(dataset, bestfeat, bsetvalue,'gt'
),sublabels)
return mytree
CART分類回歸樹
cart分類回歸樹1984年提出,id3演算法1986年提出,c4.5演算法1993年提出 cart由特徵選擇 樹的生成及剪枝組成。cart假設決策樹是二叉樹,內部結點特徵取值為是和否 cart使用損失函式最小作為剪枝的標準。回歸樹的生成 使用平方誤差最小化準則。對於任意劃分特徵a,對應的任意劃分點...
CART分類和回歸樹
cart演算法根據類標號屬性的型別,當類標號屬性是連續型時,生成的模型是回歸樹 離散型則是分類樹。不同於id3演算法可以產生多個分支,cart每次 只能產生兩個分支,所以cart產生的決策樹是一棵二叉樹。雜度 不純度 gini t 1 各類數量在資料集中的概率 的平方和。標準問題集 所有候選分支方案...
CART分類與回歸樹
十大經典資料探勘演算法 系列 c4.5 k means svmapriori empagerank adaboost knnna ve bayes cart 分類與回歸樹 classification and regression trees,cart 是由四人幫leo breiman,jerome...