import matplotlib.pyplot as pltfrom numpy import *def loadDataset():dataMat=[]labelMat=[]f=open('ex4x.txt')linesx=f.readlines()q=open('ex4y.txt')linesy=q.readlines()for i in range(len(linesx)):x=linesx[i].strip().split()y=linesy[i].strip()dataMat.append([1.0,float(x[0]),float(x[1])])labelMat.append(float(y))return dataMat,labelMatdef sigmoid(inX):return 1.0/(1+exp(-inX))def gradDescent(dataMatIn,classLabel):dataMatrix=mat(dataMatIn)labelMat=mat(classLabel).transpose()m,n=shape(dataMatrix)alpha=0.001maxCycles=500weights=ones((n,1))for k in range(maxCycles):h=sigmoid(dataMatrix*weights)error=(labelMat-h)weights=weights-alpha*dataMatrix.transpose()*errorprint(weights)return weightsdef plotBestFit(weights,dataMat,labelMat):weights=array(weights)dataArr=array(dataMat)n=shape(dataArr)[0]x1=[];y1=[]x2=[];y2=[]for i in range(n):if int(labelMat[i])==1:x1.append(dataArr[i,1]);y1.append(dataArr[i,2])else:x2.append(dataArr[i,1]);y2.append(dataArr[i,2])fig=plt.figure()ax=fig.add_subplot(111)ax.scatter(x1,y1,s=30,c='red',marker='s')ax.scatter(x2,y2,s=30,c='green')x=arange(-3.0,60.0,0.1)y=(-weights[0]-weights[1]*x)/weights[2]+80ax.plot(x,y)plt.xlabel('X1');plt.ylabel('X2')plt.show()data,label=loadDataset()weights=gradDescent(data,label)plotBestFit(weights,data,label)