def loadDataSet(): dataMat = []; labelMat = [] fr = open('/Users/hakuri/Desktop/testSet.txt') for line in fr.readlines(): lineArr = line.strip().split() dataMat.append([1.0, float(lineArr[0]), float(lineArr[1])]) labelMat.append(int(lineArr[2])) return dataMat,labelMat def sigmoid(inX): return 1.0/(1+exp(-inX)) 返回回归系数,对应于每个特征值,for循环实现了递归梯度上升算法。 def gradAscent(dataMatIn, classLabels): dataMatrix = mat(dataMatIn) #convert to NumPy matrix labelMat = mat(classLabels).transpose() #convert to NumPy matrix m,n = shape(dataMatrix) alpha = 0.001 maxCycles = 500 weights = ones((n,1)) for k in range(maxCycles): #heavy on matrix operations h = sigmoid(dataMatrix*weights) #matrix mult error = (labelMat - h) #vector subtraction weights = weights + alpha * dataMatrix.transpose()* error #matrix mult return weights
结果,返回了特征值的回归系数。我们的数据集有两个特征值分别是x1,x2。我们又增设了了x0变量。得到的结果
[[ 4.12414349] [ 0.48007329] [-0.6168482 ]] 我们得出x1和x2的关系(设x0=1),0=4.12414349+0.48007329*x1-0.6168482*x2 画出x1与x2的关系图
|
|