python 实现逻辑回归_第1页
python 实现逻辑回归_第2页
python 实现逻辑回归_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第python实现逻辑回归self.data=np.loadtxt(./data2.txt,delimiter=,)

self.data_mat=self.data[:,0:2]

self.label_mat=self.data[:,2]

self.thetas=np.zeros((self.data_mat.shape[1]))

#生成多项式特征,最高6次项

self.poly=PolynomialFeatures(6)

self.p_data_mat=self.poly.fit_transform(self.data_mat)

defcost_func_reg(self,theta,reg):

损失函数具体实现

:paramtheta:逻辑回归系数

:paramdata_mat:带有截距项的数据集

:paramlabel_mat:标签数据集

:paramreg:

:return:

m=self.label_mat.size

label_mat=self.label_mat.reshape(-1,1)

h=self.sigmoid(self.p_data_mat.dot(theta))

J=-1*(1/m)*(np.log(h).T.dot(label_mat)+np.log(1-h).T.dot(1-label_mat))\

+(reg/(2*m))*np.sum(np.square(theta[1:]))

ifnp.isnan(J[0]):

returnnp.inf

returnJ[0]

defgradient_reg(self,theta,reg):

m=self.label_mat.size

h=self.sigmoid(self.p_data_mat.dot(theta.reshape(-1,1)))

label_mat=self.label_mat.reshape(-1,1)

grad=(1/m)*self.p_data_mat.T.dot(h-label_mat)+(reg/m)*np.r_[[[0]],theta[1:].reshape(-1,1)]

returngrad

defgradient_descent_reg(self,alpha=0.01,reg=0,iterations=200):

逻辑回归梯度下降收敛函数

:paramalpha:学习率

:paramreg:

:paramiterations:最大迭代次数

:return:逻辑回归系数组

m,n=self.p_data_mat.shape

theta=np.zeros((n,1))

theta_set=[]

foriinrange(iterations):

grad=self.gradient_reg(theta,reg)

theta=theta-alpha*grad.reshape(-1,1)

theta_set.append(theta)

returntheta,theta_set

defplot_data_reg(self,x_label=None,y_label=None,neg_text=negative,pos_text=positive,thetas=None):

neg=self.label_mat==0

pos=self.label_mat==1

fig1=plt.figure(figsize=(12,8))

ax1=fig1.add_subplot(111)

ax1.scatter(self.p_data_mat[neg][:,1],self.p_data_mat[neg][:,2],marker=o,s=100,label=neg_text)

ax1.scatter(self.p_data_mat[pos][:,1],self.p_data_mat[pos][:,2],marker=+,s=100,label=pos_text)

ax1.set_xlabel(x_label,fontsize=14)

#描绘逻辑回归直线(曲线)

ifisinstance(thetas,type(np.array([]))):

x1_min,x1_max=self.p_data_mat[:,1].min(),self.p_data_mat[:,1].max()

x2_min,x2_max=self.p_data_mat[:,2].min(),self.p_data_mat[:,2].max()

xx1,xx2=np.meshgrid(np.linspace(x1_min,x1_max),np.linspace(x2_min,x2_max))

h=self.sigmoid(self.poly.fit_transform(np.c_[xx1.ravel(),xx2.ravel()]).dot(thetas))

h=h.reshape(xx1.shape)

ax1.contour(xx1,xx2,h,[0.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论