from numpy import *
def loadDataSet(filename):
numFeat=len(open(filename).readline().split())-1
dataMat=[];labelMat=[]
fr=open(filename)
for line in fr.readlines():
lineArr=[]
curLine = line.strip().split()
for i in range(numFeat):
lineArr.append(float(curLine[i]))
dataMat.append(lineArr)
labelMat.append(float(curLine[-1]))
return dataMat, labelMat
def standRegret(xArr,yArr):
xMat=mat(xArr);yMat=mat(yArr).T
xTx=xMat.T*xMat
if linalg.det(xTx)==0:
print("singular")
return
ws=xTx.I*(xMat.T*yMat) #I计算逆矩阵
return ws
程序报错:IndexError: list index out of range
数据集:1.000000 0.067732 3.176513
1.000000 0.427810 3.816464
1.000000 0.995731 4.550095
1.000000 0.738336 4.256571
1.000000 0.981083 4.560815
1.000000 0.526171 3.929515
1.000000 0.378887 3.526170
1.000000 0.033859 3.156393
1.000000 0.132791 3.110301
1.000000 0.138306 3.149813
1.000000 0.247809 3.476346
1.000000 0.648270 4.119688
1.000000 0.731209 4.282233
1.000000 0.236833 3.486582
1.000000 0.969788 4.655492
1.000000 0.607492 3.965162
1.000000 0.358622 3.514900
1.000000 0.147846 3.125947
1.000000 0.637820 4.094115
1.000000 0.230372 3.476039
1.000000 0.070237 3.210610
1.000000 0.067154 3.190612
1.000000 0.925577 4.631504
1.000000 0.717733 4.295890
1.000000 0.015371 3.085028
1.000000 0.335070 3.448080
1.000000 0.040486 3.167440
1.000000 0.212575 3.364266
1.000000 0.617218 3.993482
1.000000 0.541196 3.891471
1.000000 0.045353 3.143259
1.000000 0.126762 3.114204
1.000000 0.556486 3.851484
代码可能有问题啊
你的数据集分割方式的问题导致的
可以在 loadDataSet 函数中指定分隔符为'\t'
比如
def loadDataSet(filename):
numFeat = len(open(filename).readline().split('\t')) - 1
dataMat = []; labelMat = []
fr = open(filename)
for line in fr.readlines():
lineArr = []
curLine = line.strip().split('\t') # 使用'\t'作为分隔符
for i in range(numFeat):
lineArr.append(float(curLine[i]))
dataMat.append(lineArr)
labelMat.append(float(curLine[-1]))
return dataMat, labelMat
问题点:IndexError: list index out of range
分析思路:第10行代码出错,numFeat表示的是第一行的长度, 不代表后续每一行的长度.
代码修改为:
from numpy import *
def loadDataSet(filename):
numFeat=len(open(filename).readline().split())-1
dataMat=[];labelMat=[]
fr=open(filename)
for line in fr.readlines():
lineArr=[]
curLine = line.strip().split()
for i in range(len(curLine)):
lineArr.append(float(curLine[i]))
dataMat.append(lineArr)
labelMat.append(float(curLine[-1]))
return dataMat, labelMat
def standRegret(xArr,yArr):
xMat=mat(xArr);yMat=mat(yArr).T
xTx=xMat.T*xMat
if linalg.det(xTx)==0:
print("singular")
return
ws=xTx.I*(xMat.T*yMat) #I计算逆矩阵
return ws
不知道你这个问题是否已经解决, 如果还没有解决的话: