栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

手动Python实现逻辑回归LR

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

手动Python实现逻辑回归LR

LR的基本思想是基于极大似然估计进行的:

# 导入相应的库
import numpy as np
import matplotlib.pyplot as plt

# 随机生成样本数据。 二分类问题,每一个类别生成5000个样本数据
np.random.seed(12)
num_observations = 5000
x1 = np.random.multivariate_normal([0, 0], [[1, .75],[.75, 1]], num_observations)
x2 = np.random.multivariate_normal([1, 4], [[1, .75],[.75, 1]], num_observations)
X = np.vstack((x1, x2)).astype(np.float32)
y = np.hstack((np.zeros(num_observations),
               np.ones(num_observations)))
a =0
def sigmoid(X):
    return 1/(1+np.exp(-X))



def max_likelihood(X,y,w,b):
    pos,neg = np.where(y==1),np.where(y==0)
    pos_sum = np.sum(np.log(sigmoid(np.dot(X[pos],w)+b)))
    neg_sum = np.sum(np.log(1-sigmoid(np.dot(X[neg],w)+b)))
    
    return pos_sum + neg_sum


def logistic_regression_minibatch(X, y, num_steps, learning_rate):
    w,b = np.zeros(X.shape[1]),0 # w可以初始化为0,但神经网络不可以
    for t in range(num_steps):
        batch = np.random.choice(X.shape[0],100)
        x_batch,y_batch = X[batch],y[batch]
        errors = sigmoid(np.dot(x_batch,w)+b) - y_batch  #这是推导出来的,w的导数
        
        grad_w = np.matmul(x_batch.T,errors)    # 上面的errors*x 为w的导数
        grad_b = np.sum(errors) # 这也是推导出来的 sigmod(x) 的导数为sigmod(x)(1-sigmod(x))
        
        w -= learning_rate*grad_w
        b -= learning_rate*grad_b
        
        if t % 10000 == 0:
            print("似然函数为:",max_likelihood(x_batch,y_batch,w,b))
    return w,b
w, b = logistic_regression_minibatch(X, y, num_steps = 500000, learning_rate = 5e-4)
print ("(自己写的)逻辑回归的参数w, b分别为: ", w, b)

# 这里我们直接调用sklearn的模块来训练,看看跟自己手写的有没有区别。如果结果一样就说明是正确的!
from sklearn.linear_model import LogisticRegression

# C设置一个很大的值,意味着不想加入正则项 (在会看到正则作用,这里就理解成为了公平的比较)
clf = LogisticRegression(fit_intercept=True, C = 1e15)
clf.fit(X, y)
print ("(sklearn)逻辑回归的参数w, b分别为: ", clf.coef_, clf.intercept_, )

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/331489.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号