资源描述:
《机器学习第五章代码.docx》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、5—1.Logistic回归梯度上升优算法#加载数据,前两列是点所属的X1,X2坐标,最后一列是该点所属分类。fromnumpyimport*defloadDataSet():#加载数据dataMat=[];labelMat=[]fr=open('testSet.txt')#打开文本文件testSet.txtforlineinfr.readlines():#逐行读取lineArr=line.strip().split()dataMat.append([1.0,float(lineArr[0]),flo
2、at(lineArr[1])])#因为线性回归化式为H(x)=W0+W1*X1+W2*X2即为(W0,W1,W2)*(1,X1,X2),其中(W0,W1,W2)即为所求回归系数W。为了方便计算,读出X1,X2后要在前面补上一个1.0labelMat.append(int(lineArr[2]))returndataMat,labelMat#计算sigmoid函数defsigmoid(inX): return1.0/(1+exp(-inX))#梯度上升算法计算出最佳回归系数defgradAscen
3、t(dataMatIn,classLabels): dataMatrix=mat(dataMatIn)#转换为NumPy矩阵数据类型 labelMat=mat(classLabels).transpose()#转换为NumPy矩阵数据类型 m,n=shape(dataMatrix) alpha=0.001 #步长 maxCycles=500 #循环次数 weights=ones((n,1
4、)) #回归系数初始化为1#循环maxCycles次,每次都沿梯度向真实值labelMat靠拢Forkinrange(maxCycles): h=sigmoid(dataMatrix*weights) #矩阵相乘 error=(labelMat-h) #向量减法运算 weights=weights+alpha*dataMatrix.transpose()*error#矩阵相乘,dataMatrix.transpos
5、e()*error就是梯度f(w) returnweights5—2画出数据集和Logistic回归最佳拟合直线的函数。#画出各个训练点,根据weights(即回归的各个参数)画出直线,以便直观的看到划分是否正确defplotBestFit(weights): importmatplotlib.pyplotasplt #画点 dataMat,labelMat=loadDataSet() dataArr=array(dataMat) n=shape(dataArr)[0]
6、 xcord1=[];ycord1=[] xcord2=[];ycord2=[] foriinrange(n): ifint(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()
7、ax=fig.add_subplot(111) ax.scatter(xcord1,ycord1,s=30,c='red',marker='s')ax.scatter(xcord2,ycord2,s=30,c='green') #画线 x=arange(-3.0,3.0,0.1) #x取值区间为[-3.0,3.0),步长为0.1 y=(-weights[0]-weights[1]*x1)/weights[2] ax.plot(x,y) plt.xlabel('X1');plt.ylabel('X
8、2');#显示 plt.show()5—3随机梯度上升算法defstocGradAscent0(dataMatrix,classLabels):m,n=shape(dataMatrix)alpha=0.01weights=ones(n)#初始化为1的矩阵foriinrange(m):h=sigmoid(sum(dataMatrix[i]*weights))error=classLabels[i]-hweights=weights+alpha*error*