機器學習實戰 樹回歸 實現記錄

2021-08-29 04:54:03 字數 3915 閱讀 1138

def regleaf(dataset):#returns the value used for each leaf

return mean(dataset[:,-1])

def regerr(dataset):

return var(dataset[:,-1]) * shape(dataset)[0]

def createtree(dataset, leaftype=regleaf, errtype=regerr, ops=(1,4)):#assume dataset is numpy mat so we can array filtering

feat, val = choosebestsplit(dataset, leaftype, errtype, ops)#choose the best split

if feat == none: return val #if the splitting hit a stop condition return val

rettree = {}

rettree['spind'] = feat

rettree['spval'] = val

lset, rset = binsplitdataset(dataset, feat, val)

rettree['left'] = createtree(lset, leaftype, errtype, ops)

rettree['right'] = createtree(rset, leaftype, errtype, ops)

return rettree

# python3不適用:fltline = map(float,curline)

修改為: fltline = list(map(float, curline))#將每行對映成浮點數,python3返回值改變,所以需要

mat0 = dataset[nonzero(dataset[:, feature] > value)[0], :]

mat1 = dataset[nonzero(dataset[:, feature] <= value)[0], :]

#下面原書**報錯 index 0 is out of bounds,使用上面兩行**

#mat0 = dataset[nonzero(dataset[:, feature] > value)[0], :][0]

#mat1 = dataset[nonzero(dataset[:, feature] <= value)[0], :][0]

# for splitval in set(dataset[:,featindex]): python3報錯修改為下面

for splitval in set((dataset[:, featindex].t.a.tolist())[0]):#遍歷每個特徵裡不同的特徵值

測試**前,有三處錯誤: 

1、typeerror: unsupported operand type(s) for /: 『map『 and 『int『 

修改loaddataset函式某行為fltline = list(map(float,curline)),因為python3中map的返回值變了,所以要加list() 

2、typeerror: unhashable type: 『matrix』 

修改choosebestsplit函式某行為:for splitval in set((dataset[:,featindex].t.a.tolist())[0]): matrix型別不能被hash。 

3、typeerror: index 0 is out of bounds 

函式修改兩行binsplitdataset 

mat0 = dataset[nonzero(dataset[:, feature] > value)[0], :] 

mat1 = dataset[nonzero(dataset[:, feature] <= value)[0], :]

>>> root = tk()
執行完出來框以後不要關閉

>>> root=tk() #建立乙個空的tk視窗,注意彈出後不要關閉,然後繼續輸入下一行

>>> mylabel=label(root,text="hello,tkinter!")

解決: the figurecanvastk.show function was deprecated in version 2.2. use figurecanvastk.draw instead.

這是運用命令列的輸出得到的修改提示。

c:\windows\system32>cd c:/users/34856/desktop

c:\users\34856\desktop>python treeexplore.py

treeexplore.py:49: matplotlibdeprecationwarning: the figurecanvastk.show function was deprecated in version 2.2. use figurecanvastk.draw instead.

redraw.canvas.show()

traceback (most recent call last):

file "treeexplore.py", line 70, in redraw(1.0,10)

file "treeexplore.py", line 21, in redraw

redraw.a.scatter(redraw.rawdat[:,0],redraw.rawdat[:,1],s= 5)

file "f:\anaconda\lib\site-packages\matplotlib\__init__.py", line 1855, in inner

return func(ax, *args, **kwargs)

file "f:\anaconda\lib\site-packages\matplotlib\axes\_axes.py", line 4287, in scatter

x, y, s, c, colors, edgecolors, linewidths)

file "f:\anaconda\lib\site-packages\matplotlib\cbook\__init__.py", line 1657, in delete_masked_points

raise valueerror("masked arrays must be 1-d")

valueerror: masked arrays must be 1-d

c:\users\34856\desktop>

不清楚是什麼原理,只要加上array()就好了 = =

大概意思就是說矩陣物件不是一維(1-d)的,變成一維陣列就好了。

redraw.a.scatter(redraw.rawdat[:,0],redraw.rawdat[:,1],s= 5)

#正確:

#更改為

yhat = regtree.createforecast(mytree,redraw.testdat,regtree.modeltreeeval)

一般出現……has  no attribute '……'的時候一般都是拼寫錯誤

機器學習實戰 09 樹回歸

機器學習實戰 第9章的樹回歸執行時頻繁出錯,這裡主要有兩點 出錯的 行是 for splitval in set dataset featindex 應改為 for splitval in set dataset featindex t a.tolist 0 具體分析過程檢視 出錯的 行是 def ...

機器學習實戰之樹回歸

線性回歸包含一些強大的方法,但是這些方法建立的模型需要擬合所有的樣本點 區域性線性回歸除外 當資料擁有眾多特徵,且特徵之間關係十分複雜時,構建全域性模型的想法顯得困難。並且,生活中很多問題都是非線性的,不可能使用全域性線性模型來擬合任何模型。一種可行的方法是將資料集切分成很多份易建模的資料,然後利用...

《機器學習實戰》學習筆記 12 回歸 樹回歸

機器學習實戰 學習筆記 12 回歸 樹回歸 分類與回歸樹 classification and regression trees,cart 是由四人幫leo breiman,jerome friedman,richard olshen與charles stone於1984年提出,既可用於分類也可用於...