


def loadDataSet(): dataMat = []; labelMat = [] fr = open('4-Logistic/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])) fr.close() return dataMat, labelMatdef sigmoid(inX): return 1.0 / (1 + np.exp(-inX))def gradAscent(dataMatIn, classLabels): dataMatrix = np.mat(dataMatIn) labelMat = np.mat(classLabels).transpose() m, n = np.shape(dataMatrix) alpha = 0.001 maxCycles = 500 weights = np.ones((n,1)) for k in range(maxCycles): h = sigmoid(dataMatrix * weights) error = labelMat - h weights = weights + alpha * dataMatrix.transpose() * error return weights.getA()def plotBestFit(wei): dataMat, labelMat = loadDataSet() dataArr = np.array(dataMat) n = np.shape(dataMat)[0] xcord1 = []; ycord1 = [] xcord2 = []; ycord2 = [] for i in range(n): if int(labelMat[i]) == 1: xcord1.append(dataArr[i,1]); ycord1.append(dataArr[i,2]) else: xcord2.append(dataArr[i,1]); ycord2.append(dataArr[i,2]) fig = plt.figure() ax = fig.add_subplot(111) ax.scatter(xcord1, ycord1, s = 20, c = 'red', marker = 's',alpha=.5) ax.scatter(xcord2, ycord2, s = 20, c = 'green',alpha=.5) x = np.arange(-3.0, 3.0, 0.1) y = (-wei[0] - wei[1] * x) / wei[2] ax.plot(x, y) plt.title('BestFit') plt.xlabel('X1'); plt.ylabel('X2') plt.show()def stocGradAscentO(dataMatrix, classLabels): dataMatrix=np.array(dataMatrix) m,n = np.shape(dataMatrix) alpha = 0.01 weights = np.ones(n) for i in range(m): h = sigmoid(sum(dataMatrix[i]*weights)) error = classLabels[i] - h weights = weights + alpha * error * dataMatrix[i] return weightsdef stocGradAscent1(dataMatrix, classLabels, numIter=150): dataMatrix=np.array(dataMatrix) m,n = np.shape(dataMatrix) weights = np.ones(n) for j in range(numIter): dataIndex = list(range(m)) for i in range(m): alpha = 4/(1.0+j+i)+0.01 randIndex = int(random.uniform(0,len(dataIndex))) h = sigmoid(sum(dataMatrix[randIndex]*weights)) error = classLabels[randIndex] - h weights = weights + alpha * error * dataMatrix[randIndex] del(dataIndex[randIndex]) return weights