python 回归树问题,报错求解决

问题描述

python 回归树问题,报错求解决

错误提示:
Traceback (most recent call last):

File "", line 1, in
runfile('F:/desktop/新建文件夹 (2)/书/machinelearninginaction/Ch09/regTrees.py', wdir='F:/desktop/新建文件夹 (2)/书/machinelearninginaction/Ch09')

File "C:UsersshiyingAnaconda2libsite-packagesspyderlibwidgetsexternalshellsitecustomize.py", line 685, in runfile
execfile(filename, namespace)

File "C:UsersshiyingAnaconda2libsite-packagesspyderlibwidgetsexternalshellsitecustomize.py", line 71, in execfile
exec(compile(scripttext, filename, 'exec'), glob, loc)

File "F:/desktop/新建文件夹 (2)/书/machinelearninginaction/Ch09/regTrees.py", line 140, in

File "F:/desktop/新建文件夹 (2)/书/machinelearninginaction/Ch09/regTrees.py", line 76, in createTree

File "F:/desktop/新建文件夹 (2)/书/machinelearninginaction/Ch09/regTrees.py", line 58, in chooseBestSplit

TypeError: unhashable type: 'matrix'

解决方案

Python zipfile报错问题

解决方案二:

源码如下:

from numpy import *

def loadDataSet(fileName): #general function to parse tab -delimited floats
dataMat = [] #assume last column is target value
fr = open(fileName)
for line in fr.readlines():
curLine = line.strip().split(' ')
fltLine = map(float,curLine) #map all elements to float()
dataMat.append(fltLine)
return dataMat

def binSplitDataSet(dataSet, feature, value):
mat0 = dataSet[nonzero(dataSet[:,feature] > value)[0],:][0]
mat1 = dataSet[nonzero(dataSet[:,feature] <= value)[0],:][0]
return mat0,mat1

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 linearSolve(dataSet): #helper function used in two places
m,n = shape(dataSet)
X = mat(ones((m,n))); Y = mat(ones((m,1)))#create a copy of data with 1 in 0th postion
X[:,1:n] = dataSet[:,0:n-1]; Y = dataSet[:,-1]#and strip out Y
xTx = X.T*X
if linalg.det(xTx) == 0.0:
raise NameError('This matrix is singular, cannot do inverse,

try increasing the second value of ops')
ws = xTx.I * (X.T * Y)
return ws,X,Y

def modelLeaf(dataSet):#create linear model and return coeficients
ws,X,Y = linearSolve(dataSet)
return ws

def modelErr(dataSet):
ws,X,Y = linearSolve(dataSet)
yHat = X * ws
return sum(power(Y - yHat,2))

def chooseBestSplit(dataSet, leafType=regLeaf, errType=regErr, ops=(1,4)):
tolS = ops[0]; tolN = ops[1]
#if all the target variables are the same value: quit and return value
if len(set(dataSet[:,-1].T.tolist()[0])) == 1: #exit cond 1
return None, leafType(dataSet)
m,n = shape(dataSet)
#the choice of the best feature is driven by Reduction in RSS error from mean
S = errType(dataSet)
bestS = inf; bestIndex = 0; bestValue = 0
for featIndex in range(n-1):
for splitVal in set(dataSet[:,featIndex]):
mat0, mat1 = binSplitDataSet(dataSet, featIndex, splitVal)
if (shape(mat0)[0] < tolN) or (shape(mat1)[0] < tolN): continue
newS = errType(mat0) + errType(mat1)
if newS < bestS:
bestIndex = featIndex
bestValue = splitVal
bestS = newS
#if the decrease (S-bestS) is less than a threshold don't do the split
if (S - bestS) < tolS:
return None, leafType(dataSet) #exit cond 2
mat0, mat1 = binSplitDataSet(dataSet, bestIndex, bestValue)
if (shape(mat0)[0] < tolN) or (shape(mat1)[0] < tolN): #exit cond 3
return None, leafType(dataSet)
return bestIndex,bestValue#returns the best feature to split on
#and the value used for that split

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

def isTree(obj):
return (type(obj).__name__=='dict')

def getMean(tree):
if isTree(tree['right']): tree['right'] = getMean(tree['right'])
if isTree(tree['left']): tree['left'] = getMean(tree['left'])
return (tree['left']+tree['right'])/2.0

def prune(tree, testData):
if shape(testData)[0] == 0: return getMean(tree) #if we have no test data collapse the tree
if (isTree(tree['right']) or isTree(tree['left'])):#if the branches are not trees try to prune them
lSet, rSet = binSplitDataSet(testData, tree['spInd'], tree['spVal'])
if isTree(tree['left']): tree['left'] = prune(tree['left'], lSet)
if isTree(tree['right']): tree['right'] = prune(tree['right'], rSet)
#if they are now both leafs, see if we can merge them
if not isTree(tree['left']) and not isTree(tree['right']):
lSet, rSet = binSplitDataSet(testData, tree['spInd'], tree['spVal'])
errorNoMerge = sum(power(lSet[:,-1] - tree['left'],2)) +
sum(power(rSet[:,-1] - tree['right'],2))
treeMean = (tree['left']+tree['right'])/2.0
errorMerge = sum(power(testData[:,-1] - treeMean,2))
if errorMerge < errorNoMerge:
print "merging"
return treeMean
else: return tree
else: return tree

def regTreeEval(model, inDat):
return float(model)

def modelTreeEval(model, inDat):
n = shape(inDat)[1]
X = mat(ones((1,n+1)))
X[:,1:n+1]=inDat
return float(X*model)

def treeForeCast(tree, inData, modelEval=regTreeEval):
if not isTree(tree): return modelEval(tree, inData)
if inData[tree['spInd']] > tree['spVal']:
if isTree(tree['left']): return treeForeCast(tree['left'], inData, modelEval)
else: return modelEval(tree['left'], inData)
else:
if isTree(tree['right']): return treeForeCast(tree['right'], inData, modelEval)
else: return modelEval(tree['right'], inData)

def createForeCast(tree, testData, modelEval=regTreeEval):
m=len(testData)
yHat = mat(zeros((m,1)))
for i in range(m):
yHat[i,0] = treeForeCast(tree, mat(testData[i]), modelEval)
return yHat

trainMat = mat(loadDataSet('bikeSpeedVsIq_train.txt'))
testMat = mat(loadDataSet('bikeSpeedVsIq_test.txt'))
myregTree=createTree(trainMat, ops=(1,20))
mymodTree=createTree(trainMat, modelLeaf, modelErr, (1,20))
yregHat=createForeCast(myregTree, testMat[:,0])
ymodHat=createForeCast(mymodTree, testMat[:,0], modelTreeEval)
regCo = corrcoef(yregHat, testMat[:,1], rowvar=0)[0,1]
modCo = corrcoef(ymodHat, testMat[:,1], rowvar=0)[0,1]
print "reg", regCo
1. print "model", modCo

时间: 2024-09-05 17:18:57

python 回归树问题,报错求解决的相关文章

select-sql的运行报错求解决!!!!!!!!!!!!!!!!!!!!

问题描述 sql的运行报错求解决!!!!!!!!!!!!!!!!!!!! update( select t.hosid t_hosid,t.devid t_devid,c.hosid chosid,c.devid cdevid,c.checkflag checkflag from ccyl_tran_2iccd t,boc_tran_csp c where c.checkflag is null and (t.iccd_time||t.iccd_flow) = c.iccd_traceno an

java-tomcat部署probe报错 求解决

问题描述 tomcat部署probe报错 求解决 问题如图所示: probe是直接下载的2.3.3的版本

android-网上的方法都试过了,软件也重装了,Android studio 报错,求解决,在线等..

问题描述 网上的方法都试过了,软件也重装了,Android studio 报错,求解决,在线等.. Error:Unable to start the daemon process. This problem might be caused by incorrect configuration of the daemon. For example, an unrecognized jvm option is used. Please refer to the user guide chapter

reportViewer 运行报错 求解决 新手

问题描述 reportViewer 运行报错 求解决 新手 : Report1.rdlc生成操作也改成内容 解决方案 Jboss运行WebService报错解决

Delphi xe4开发的软件, 出现各类型的报错, 求解决或查错方案.

问题描述 Delphi xe4开发的软件, 出现各类型的报错, 求解决或查错方案. 属于2次开发, 程序代码接手后. 在使用途中出现各种报错, 有各种内存报错, 或其他都是非常难重现的错误, 目前安装了EurekaLog, 但仍然无法定位, 会跳到一些莫明其妙的代码上. 程序属于比较大型的. 客户端是DELPHI开发, 服务端是C++开发, 客户端是单个EXE的结构, 带少量第3方的DLL. 更换过fastmm, 用过sharemem之类无效. 程序内部也有多个线程, 且有多个timer. 定位

javase-导入了swing包但JFrame,JPanel报错 求解决

问题描述 导入了swing包但JFrame,JPanel报错 求解决 我导入了swing包和awt包,但是这些控件都加载不了 怎么解决呀,但是打开我之前在其他系统上写程序的JPanel不报错 解决方案 肯定是包不识别,你确定引入好了么,用鼠标点击红叉,看什么错误,如果是没有找到相关类,再引入一遍,还有一个原因是 你写的这几个按钮相关类,没有引入到这类里,试着,点击红叉,看有什么解决办法

Ubuntu中安装Python程序后系统报错的解决方法

Python是一种面向对象.直译式计算机程序设计语言,也是一种http://www.aliyun.com/zixun/aggregation/17547.html">功能强大而完善的通用型语言,已经具有十多年的发展历史,成熟且稳定.这种语言具有非常简捷而清晰的语法特点,适合完成各种高层任务,几乎可以在所有的操作系统中运行.目前,基于这种语言的相关技术正在飞速的发展,用户数量急剧扩大,相关的资源非常多. 虽然Python可能被粗略地分类为"脚本语言"(script lan

MVC 4 部署服务器 报错 求解决 新人

问题描述 解决方案 解决方案二:看你IIS里面程序的.net版本是不是4.0解决方案三:看错误信息是找不到System.Web.Http.WebHost.dll..netframework4安装了吗?部署的时候要把bin中所有的dll都部署到服务器上.还是project,引用下找到System.Web.Http.WebHost.dll,确保属性中的CopyLocal设置成True.解决方案四:版本不对应?解决方案五:首先引用System.Web.Http.WebHost.dll,然发布网站后看看

node js-linux下安装node.js报错,求大神解决

问题描述 linux下安装node.js报错,求大神解决 目前正要部署应用到linux服务器上 在安装node.js时各种报错,首先是python版本问题,后来装了python2.7.5, 在执行./configure时,出现这个错误 ERROR:root:code for hash md5 was not found. Traceback (most recent call last): File "/usr/local/lib/python2.7/hashlib.py", line