AttributeError: 函数对象没有'dlinreg'属性
我刚开始学习Python和编程,正在阅读《机器学习:算法视角》这本书。有人告诉我需要对数据进行归一化,把数据分成训练集和测试集,恢复beta向量,然后使用最小二乘误差的和。但是我总是遇到这个错误:
文件 "/Users/shaune/Dropbox/Shaune PhD/auto-mpg.py",第34行,出错位置是:
beta=linreg.linreg(trainin,traintgt)
错误信息是:AttributeError: 'function'对象没有'linreg'这个属性。
我在运行下面的代码时出现了这个问题:
import os
import pylab as pl
import numpy as np
from pylab import *
from numpy import *
import linreg
os.chdir('/Users/shaune/Dropbox/Shaune PhD')
auto=np.loadtxt('auto-mpg.data.txt',comments='"')
#normalise the data
auto=(auto-auto.mean(axis=0))/auto.var(axis=0)
#seperate the training and testing data
trainin=auto[::2,:8]
testin=auto[1::2,:8]
traintgt=auto[::2,1:2]
testtgt=auto[1::2,1:2]
#recover the beta vector
def linreg(trainin,traintgt):
trainin=np.concatenate((trainin,-np.ones((np.shape(trainin)[0],1))),axis=1)
beta=np.dot(np.dot(np.linalg.inv(np.dot(np.transpose(trainin),trainin)),np.transpose(trainin)),traintgt)
traintgt=np.dot(trainin, beta)
#sum of squares error to get predicted values on test set (want small values)
beta=linreg.linreg(trainin,traintgt)
testin=concatenate((testin,-np.ones((np.shape(testin)[0],1))),axis=1)
testout=dot(testin,beta)
error=sum((testout-testtgt)**2)
print error
请帮帮我!谢谢。
1 个回答
1
这个函数的定义
def linreg(trainin,traintgt):
覆盖了你之前导入的名字 linreg
,也就是说现在这个名字被新的东西替代了。
import linreg
建议你给这个函数换个名字。注释里提到要 恢复 beta 向量
,所以可以考虑用 recover_beta
这个名字。也就是说,把 def
语句改成
def recover_beta(trainin,traintgt):
在你修改的时候,可能还想给这个函数加一个 return
语句。现在这个函数没有返回任何东西。