梯度下降实现逻辑回归

首先,逻辑回归并不是用于解决回归问题,而是分类问题。

逻辑回归自然要用到逻辑函数 Sigmoid

 这个函数有个特点,其取值范围在0到1之间。该函数图像为:

 

我们令 

 可以将输出限制在 (0,1)

 

 以下是推导过程

 

# 读取数据并预处理
def pretreat(file):
    data = pd.read_csv(file,sep=',')
    
    data.dropna(how='any',axis=0) # 缺失值处理
    
    #异常值处理
    Q1 = data.quantile(0.25)
    Q3 = data.quantile(0.75)
    IQR = Q3 - Q1
    lowerBound = Q1 - 1.5 * IQR
    upperBound = Q3 + 1.5 * IQR
    data[(data>=lowerBound) & (data<=upperBound)]
    
    m = data.shape[0]   # 样例数
    n = len(data.columns) - 1  # 特征个数
    X = np.hstack([ np.ones([m,1]),data.iloc[:,0:-1] ])  #得到X
    y = np.array([data.iloc[:,-1]]).transpose()   #得到y
    
    W = np.random.random([n+1,1]) * 2 * 1 - 1  #权重
    
    a = np.random.random()  #学习率
    return X,y,W,a

# 逻辑函数
def sigmoid(z):
    return 1 / ( 1 + np.exp(-z) )

# 代价函数
def costFunction(X,y,W):
    temp1 = np.multiply( y,np.log( sigmoid(np.dot(X,W)) ) )
    temp2 = np.multiply( 1-y,np.log(1-sigmoid(np.dot(X,W)) ) )
    m = X.shape[0]
    J = -1/m * (temp1+temp2).sum()
    return J
# 梯度下降
def gradient(X,y,W,a):
    temp1 = sigmoid(np.dot(X,W)) - y 
    temp2 = np.dot(temp1.transpose(),X)
    temp3 = a / m * temp2.transpose()
    W = W - temp3
    return W

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值