首页 > 其他分享 >logistic回归

logistic回归

时间:2022-12-31 23:22:33浏览次数:36  
标签:plt predict 回归 proba fearures grid logistic np

一、概念
logistic回归是一种广义线性回归(generalized linear model),因此与多重线性回归分析有很多相同之处。它们的模型形式基本上相同,都具有 w‘x+b,其中w和b是待求参数,其区别在于他们的因变量不同,多重线性回归直接将w‘x+b作为因变量,即y =w‘x+b,而logistic回归则通过函数L将w‘x+b对应一个隐状态p,p =L(w‘x+b),然后根据p 与1-p的大小决定因变量的值。如果L是logistic函数,就是logistic回归,如果L是多项式函数就是多项式回归。
logistic回归的因变量可以是二分类的,也可以是多分类的,但是二分类的更为常用,也更加容易解释,多类可以使用softmax方法进行处理。实际中最为常用的就是二分类的logistic回归。
Logistic回归模型的适用条件
1 因变量为二分类的分类变量或某事件的发生率,并且是数值型变量。但是需要注意,重复计数现象指标不适用于Logistic回归。
2 残差和因变量都要服从二项分布。二项分布对应的是分类变量,所以不是正态分布,进而不是用最小二乘法,而是最大似然法来解决方程估计和检验问题。
3 自变量和Logistic概率是线性关系
4 各观测对象间相互独立。

二、logistic回归的一般过程:
(1)收集数据:采用任意方法收集数据
(2)准备数据:由于需要进行距离计算,因此要求数据类型为数值型。另外,结构化数据格式则最佳
(3)分析数据:采用任意方法对数据进行分析
(4)训练算法:大部分时间将用于训练,训练的目的是为了找到最佳的分类回归系数
(5)使用算法:首先,我们需要输入一些数据,并将其转换成对应的结构化数值;接着,基于训练好的回归系数就可以对这些数值进行简单的回归计算,判定他们属于哪个类别;在这之后,我们就可以在输出的类别上做一些其他分析工作。

三、实验
回归是如何变成分类的呢?
如果可以将连续的数值转化成对应的区间,这样就可以完成分类任务了,逻辑回归中借助sigmoid函数完成了数值映射,通过概率值比较来完成分类任务
sigmoid函数:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(-6,6,0.02)
y = 1/(1+np.exp(-x))

plt.plot(x,y)
plt.xlabel('z')
plt.ylabel('y')
plt.grid()
plt.show()

1.准备数据
我这里准备的数据集较少,可适量修改数据集

2.导入库函数

基础函数库

from tkinter import Y
import numpy as np

导入画图库

import matplotlib.pyplot as plt
import seaborn as sns

导入逻辑回归模型函数

from sklearn.linear_model import LogisticRegression

3.构造数据集

构造数据集

这里的x与y一一对应,y是x的分类标签。

x_fearures = np.array([[-1,-4],[-2,-2],[-1,-1],[-1, -3], [-3, -1], [-4, -2], [1, 2], [5, 1], [3, 4],[2,1],[4,4],[1,0],[1,6]])
y_label = np.array([0,0,0,0, 0, 0,1,1,1,1, 1, 1, 1])

调用逻辑回归模型

lr_clf = LogisticRegression()

用逻辑回归模型拟合构造的数据集

其拟合方程为 y=w0+w1x1+w2x2

lr_clf = lr_clf.fit(x_fearures, y_label)

4.查看对应的模型

查看其对应模型的w

print('the weight of Logistic Regression:',lr_clf.coef_)

查看其对应模型的w0

print('the intercept(w0) of Logistic Regression:',lr_clf.intercept_)

5.展示构造的数据样本点

可视化构造的数据样本点

plt.figure()
plt.scatter(x_fearures[:, 0], x_fearures[:, 1],
c=y_label, s=40, cmap='viridis')
plt.title('Dataset')
plt.show()

6.画决策边界

可视化决策边界

plt.figure()
plt.scatter(x_fearures[:, 0], x_fearures[:, 1],
c=y_label, s=50, cmap='viridis')
plt.title('Dataset')

nx, ny = 200, 100
x_min, x_max = plt.xlim()
y_min, y_max = plt.ylim()
x_grid, y_grid = np.meshgrid(np.linspace(
x_min, x_max, nx), np.linspace(y_min, y_max, ny))

z_proba = lr_clf.predict_proba(np.c_[x_grid.ravel(), y_grid.ravel()])
z_proba = z_proba[:, 1].reshape(x_grid.shape)
plt.contour(x_grid, y_grid, z_proba, [0.5], linewidths=2., colors='blue')

plt.show()

7.预测新样本

可视化预测新样本

plt.figure()

new point 1

x_fearures_new1 = np.array([[0, -1]])
plt.scatter(x_fearures_new1[:,0],x_fearures_new1[:,1], s=50, cmap='viridis')
plt.annotate('New point 1',xy=(0,-1),xytext=(-2,0),color='blue',arrowprops=dict(arrowstyle='-|>',connectionstyle='arc3',color='red'))

new point 2

x_fearures_new2 = np.array([[1, 2]])
plt.scatter(x_fearures_new2[:,0],x_fearures_new2[:,1], s=50, cmap='viridis')
plt.annotate('New point 2',xy=(1,2),xytext=(-1.5,2.5),color='red',arrowprops=dict(arrowstyle='-|>',connectionstyle='arc3',color='red'))

训练样本

plt.scatter(x_fearures[:, 0], x_fearures[:, 1],
c=y_label, s=50, cmap='viridis')
plt.title('Dataset')

nx, ny = 200, 100
x_min, x_max = plt.xlim()
y_min, y_max = plt.ylim()
x_grid, y_grid = np.meshgrid(np.linspace(
x_min, x_max, nx), np.linspace(y_min, y_max, ny))

z_proba = lr_clf.predict_proba(np.c_[x_grid.ravel(), y_grid.ravel()])
z_proba = z_proba[:, 1].reshape(x_grid.shape)
plt.contour(x_grid, y_grid, z_proba, [0.5], linewidths=2., colors='blue')

plt.show()

8.进行预测

在训练集和测试集上分别利用训练好的模型进行预测

y_label_new1_predict = lr_clf.predict(x_fearures_new1)
y_label_new2_predict = lr_clf.predict(x_fearures_new2)

print('The New Point 1 predict class:\n', y_label_new1_predict)
print('The New Point 2 predict class:\n', y_label_new2_predict)

由于逻辑回归模型是概率预测模型(前文介绍的 p = p(y=1|x,\theta)),所以我们可以利用 predict_proba 函数预测其概率

y_label_new1_predict_proba = lr_clf.predict_proba(x_fearures_new1)
y_label_new2_predict_proba = lr_clf.predict_proba(x_fearures_new2)

print('The New Point 1 predict Probability of each class:\n',
y_label_new1_predict_proba)
print('The New Point 2 predict Probability of each class:\n',
y_label_new2_predict_proba)

四、总结
逻辑回归最大的优势在于它的输出结果不仅可以用于分类,还可以表征某个样本属于某类别的概率。
逻辑斯谛函数将原本输出结果从范围(−∞,+∞)(−∞,+∞) 映射到(0,1),从而完成概率的估测。
逻辑回归得判定的阈值能够映射为平面的一条判定边界,随着特征的复杂化,判定边界可能是多种多样的样貌,但是它能够较好地把两类样本点分隔开,解决分类问题。
求解逻辑回归参数的传统方法是梯度下降,构造为凸函数的代价函数后,每次沿着偏导方向(下降速度最快方向)迈进一小部分,直至N次迭代后到达最低点。

标签:plt,predict,回归,proba,fearures,grid,logistic,np
From: https://www.cnblogs.com/lh123456789/p/17017554.html

相关文章