采用iris数据集,抽取sepal length 和 sepal width两个特征,抽取0和1两个类别,运用logistic回归对其进行分类,数据集如图所示
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
#sigmoid函数
def basic_sigmoid(x):
sigmoid = 1.0 / (1 + np.exp(-x))
return sigmoid
#sigmoid的导函数
def sigmoid_derivative(x):
s = basic_sigmoid(x)
ds = s * (1 - s)
return ds
#初始化权重
def initialize(dim):
W=np.zeros((dim,1))
b=0
return W,b
def propagate(X,Y,W,b,learn):
#正向传播X:nxm Y:1xm W:nx1
m=X.shape[1]
Z=np.dot(W.T,X)+b
A=basic_sigmoid(Z)
#print(A)
cost=-1/m*np.sum(Y * np.log(A) + (1 - Y) * np.log(1 - A))
#反向
dw=1/m*np.dot(X,(A-Y).T)
db=1/m*np.sum(A-Y)
#更新
W=W-learn*dw
b=b-learn*db
retu