逻辑回归代码

1、导入需要的库

import pandas as pd
import numpy as np
import matplotlib as mpl
from matplotlib import pyplot as plt
from scipy.optimize import minimize 

2、加载和显示数据

def loadData(file,delimeter):#delimeter指的是分隔符
    data=np.loadtxt(file,delimiter=delimeter)
    print("数据结构为:",data.shape)
    print(data[1:6,:])#显示前五行数据
    return data
def plotData(data,label_x,label_y,label_pos,label_neg,axes=None):
    neg=data[:,2]==0
    pos=data[:,2]==1
    if axes==None:
        axes=plt.gca()
    axes.scatter(data[pos][:,0],data[pos][:,1],marker="*",c='g',s=60,linewidth=2,label=label_pos)
    axes.scatter(data[neg][:,0],data[neg][:,1],c='r',s=60,linewidth=2,label=label_neg)
    axes.set_xlabel(label_x)
    axes.set_ylabel(label_y)
    axes.legend()
    #print(neg)
    #print(pos)
    print("pos",data[pos])

注意这里delimiter指的是数据之间的分割符号

3、调用函数显示数据

data=loadData("./data1.txt",',')
x=np.c_[np.ones((data.shape[0],1)),data[:,0:2]]
y=np.c_[data[:,2]]
plotData(data,"exam 1 score","exam 2 score","pass","fail")

注:https://blog.csdn.net/qq_33728095/article/details/102512600
这个网址说明了np.c_的用法

4、定义激活函数

def sigmoid(z):
    return (1/(1+np.exp(-z)))

5、定义损失函数

def costFunction(theta,x,y):
    m=y.size
    h=sigmoid(x.dot(theta))
    j=-1.0*(1.0/m)*(np.log(h).T.dot(y)+np.log(1-h).T.dot(1-y))
    if np.isnan(j[0]):
        return (np.inf)
    return j[0]

注:dot:计算过程就是将向量中对应元素相乘,再相加所得。即普通的向量乘法运算。最后得到一个数字。

6、定义梯度下降函数

def gradient(theta,x,y):
    m=y.size
    h=sigmoid(x.dot(theta.reshape(-1,1)))
    print(h.shape[0],h.shape[1])
    print(theta.reshape(-1,1))
    grad=(1.0/m)*x.T.dot(h-y)
    return (grad.flatten())

7、显示损失

initial_thera=np.zeros(x.shape[1])
cost=costFunction(initial_thera,x,y)
grad=gradient(initial_thera,x,y)
print('cost=',cost)

8、寻找分类边界、预测结果

res=minimize(costFunction,np.zeros(x.shape[1]),args=(x,y),jac=gradient,options={'maxiter':400})
sigmoid(np.array([1,45, 85]).dot(res.x.T))

注:https://www.jianshu.com/p/72948cce955f这个网址是关于minimize函数的使用的
以上一切的类似于一个有监督的神经网络训练过程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神来回复

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值