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年提出,既可用於分類也可用於...