zoukankan      html  css  js  c++  java
  • 梯度下降法求解逻辑回归

    采用的测试数据:参考上一篇博客4.1部分

    https://www.cnblogs.com/hhjing/p/14340924.html

    1、实现使用梯度下降求解的逻辑回归算法

    import numpy as np
    #d定义梯度下降法求解的迭代公式
    def logistic_regression(X,y,learning_rate,max_iter=1000):
        #初始化w
        w=np.zeros(X.shape[1])
        for t in range(max_iter):
            #计算yx
            yx=y.values.reshape((len(y),1))*X
            #计算1+e^(yXW)
            logywx=(1+np.power(np.e,X.dot(w)*y)).values.reshape(len(y),1)
            w_grad=np.divide(yx,logywx).sum()
            #迭代
            w=w+learning_rate*w_grad
        return w

    2、将数据及标签带入上面定义的函数,学习率为0.5,迭代次数为1000次,输出训练好的参数,并将参数分类结果进行可视化

    #输出训练好的参数
    w=logistic_regression(data[["x1","x2","ones"]],data["label"],0.5,max_iter=1000)
    print(w)
    
    #可视化分类结果
    x1=np.linspace(-6,6,50)
    x2=-(w[0]/w[1])*x1-w[2]/w[1]
    
    plt.figure(figsize=(8,8))#设置图片尺寸
    
    plt.scatter(data_pos["x1"],data_pos["x2"],c="#E4007F",marker="^")#类别为1的数据绘制成洋红色
    plt.scatter(data_neg["x1"],data_neg["x2"],c="#007979",marker="o")#类别为-1的数据绘制成深绿色
    plt.plot(x1,x2,c="gray")#画出分类直线
    
    plt.xlabel("$x_1$")#设置横轴标签
    plt.ylabel("$x_2$")#设置纵轴标签
    plt.title('手动实现的感知机模型')
    plt.xlim(-6,6)#设置横轴显示范围
    plt.ylim(1,5)#设置纵轴显示范围
    plt.show()

    3、运行截图:

  • 相关阅读:
    Java map双括号初始化方式的问题
    Koa 中间件的执行
    JavaScript 实现页面中录音功能
    Koa 中实现 chunked 数据传输
    WebAssembly 上手
    TypeScript `infer` 关键字
    Vim 插件的安装
    MySQL EXPLAIN 语句
    面向切面编程(AOP)
    CSS 类名的问题
  • 原文地址:https://www.cnblogs.com/hhjing/p/14341709.html
Copyright © 2011-2022 走看看