• 非线性逻辑回归--sklearn


    前言:

    大概两三周没动这块了,最近要抓紧时间复习并写博客记录,此次为利用sklearn库来解决非线性逻辑回归问题

    正文:

    import numpy as np
    import matplotlib.pyplot as plt
    from sklearn import linear_model
    #make_gaussian_quantiles函数
    #这个函数可以用来生成数据,不需要自己进行数据写入
    from sklearn.datasets import make_gaussian_quantiles
    from sklearn.preprocessing import PolynomialFeatures
    
    #将生成2维正太分布,生成的而数据按分位数分为两类,500个样本,2个样本特征
    #生成两类或多类数据
    #n_samples是样本个数 n_features是样本特征 n_classes是样本类型
    #将生成好的数据放入x_data和y_data里
    x_data,y_data = make_gaussian_quantiles(n_samples = 500,n_features = 2,n_classes = 2)
    #c代表颜色,即将y_data里的两类数据进行比较,是哪一类就用哪一种类型的颜色
    plt.scatter(x_data[:,0],x_data[:,1],c = y_data)
    plt.show()
    

    利用函数数据画出的图像如下:
    在这里插入图片描述

    logistic = linear_model.LogisticRegression()
    #这里是利用源数据来进行处理,没有做任何改动
    logistic.fit(x_data,y_data)
    
    #获取数据值所在范围,方便画图并规定x,y轴的界限
    x_min,x_max = x_data[:,0].min()-1,x_data[:,0].max()+1
    y_min,y_max = x_data[:,1].min()-1,x_data[:,1].max()+1
    #生成网格矩阵
    xx,yy = np.meshgrid(np.arange(x_min,x_max,0.02),
                        np.arange(y_min,y_max,0.02))
    #ravel函数能将多维数据转化为一维数据,np.c_函数需要这种类型的数据
    z = logistic.predict(np.c_[xx.ravel(),yy.ravel()])
    z = z.reshape(xx.shape)
    #等高线图
    cs = plt.contourf(xx,yy,z)
    #样本散点图
    plt.scatter(x_data[:,0],x_data[:,1],c=y_data)
    plt.show()
    #利用logistic.score函数来计算这个模型的准确率
    #结果为0.568,并不理想
    print('score',logistic.score(x_data,y_data))
    

    图片展示如下,可以看出正确率很低,还不如自己猜:
    在这里插入图片描述

    #由于并不理想,所以要继续进行处理
    poly_reg = PolynomialFeatures(degree=5)
    #特征处理
    #这次才正在明白,经过处理后的数据会得到很多非线性逻辑的特征
    #以前只是用,但不懂是什么意思
    x_poly = poly_reg.fit_transform(x_data)
    #定义逻辑回归模型
    logistic = linear_model.LogisticRegression()
    #训练模型
    logistic.fit(x_poly,y_data)
    
    #获取数据值所在的范围
    x_min,x_max = x_data[:,0].min()-1,x_data[:,0].max()+1
    y_min,y_max = x_data[:,1].min()-1,x_data[:,1].max()+1
    #生成网格矩阵
    xx,yy = np.meshgrid(np.arange(x_min,x_max,0.02),
                        np.arange(y_min,y_max,0.02))
    #将转型过的数据再进行处理
    z = logistic.predict(poly_reg.fit_transform(np.c_[xx.ravel(),yy.ravel()]))
    z = z.reshape(xx.shape)
    #等高线图
    cs = plt.contourf(xx,yy,z)
    #样本散点图
    plt.scatter(x_data[:,0],x_data[:,1],c=y_data)
    plt.show()
    
    print('score',logistic.score(x_poly,y_data))
    

    经过处理的数据带入图像如下:
    在这里插入图片描述
    正确率达到了百分之99,可见提前处理数据是非常必要的。

    总结:

    利用sklearn库来解决非线性逻辑回归是很可取的方法,可以简单快捷的解决此类问题。

  • 相关阅读:
    KEIL5.25生成.bin文件步骤
    【转】树莓派网线直连笔记本电脑
    由编译器指定数组长度带来的一个问题
    【转】C/C++位域结构深入解析
    【转】大小端存储模式精解
    【转】树莓派入门之装系统
    【转】树莓派Raspberry Pi
    stm32的双向io口
    小记之while循环条件的操作位置
    【转】浮点数在计算机中存储方式
  • 原文地址:https://www.cnblogs.com/lqk0216/p/12553562.html
Copyright © 2020-2023  润新知