非线性逻辑回归--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库来解决非线性逻辑回归是很可取的方法,可以简单快捷的解决此类问题。

posted @ 2020-03-23 17:30  超级无敌57  阅读(1314)  评论(0编辑  收藏  举报