sklearn逻辑回归:提取模型系数与系数反归一化

《老饼讲解机器学习》icon-default.png?t=N7T8https://www.bbbdata.com/ml/text/48


目录

一.无归一化情况 

二. 数据归一化时情况 

(一) 公式推导

(二) 例子说明


在建好模型后,我们需要提取出逻辑回归模型的表达式。

本文讲解

1.无归一化时,直接提取。

2.数据作归一化后,对应原始数据的模型系数。

一.无归一化情况 

直接 使用 clf.coef_[0] 和 clf.intercept_提取 即可。

代码:

from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
import numpy as np
#----数据加载------
data = load_breast_cancer()
X    = data.data[:,4:8]
y    = data.target
#-----训练模型--------------------
clf = LogisticRegression(random_state=0)            
clf.fit(X,y)
#------模型预测-------------------------------
pred_y      = clf.predict(X)
pred_prob_y = clf.predict_proba(X)[:,1]
#------------提取系数w与阈值b-----------------------
w = clf.coef_[0]                                # 模型系数(对应归一化数据)
b = clf.intercept_                              # 模型阈值(对应归一化数据)
self_prob_y = 1/(1+np.exp(-(X.dot(w)+ b) ))     # 用公式预测
#------------打印信息--------------------------
print("\n------模型参数-------")     
print( "模型系数:",w)
print( "模型阈值:",b)
print("提取公式计算的概率与sklearn自带预测概率的最大误差", abs(pred_prob_y-self_prob_y).max())

运行结果:

------模型参数-------
模型系数: [-0.53024026 -3.48636783 -6.89132654 -4.37965412]
模型阈值: [1.80112869]
提取公式计算的概率与sklearn自带预测概率的最大误差 5.551115123125783e-17

结果解读:

将结果中的模型系数代入逻辑回归模型:

可得

二. 数据归一化时情况 

在数据做了归一化处理后,从模型中提取到的系数,是对应归一化数据的,
可以在预测时,先对X作归一化,再用提取到的公式预测。
但这样不够优雅。我们希望一式提取对应原始数据的模型系数

(一) 公式推导

则由归一化公式:x_{norm} = \dfrac{x-x_{min}}{x_{max}-x_{min}}与模型线性部分:w*x_{norm}+b可得:  

w*x_{norm}+b = w*\dfrac{x-x_{min}}{x_{max}-x_{min}}+b = \dfrac{w}{x_{max}-x_{min}}x+(b-\dfrac{w}{x_{max}-x_{min}}*x_{min})

(注意,上式中,除号是对应相除,乘号是矩阵乘法)

(二) 例子说明

代码:

from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
import numpy as np
#----数据加载------
data = load_breast_cancer()
X    = data.data[:,4:8]
y    = data.target
#----数据归一化------
xmin=X.min(axis=0)
xmax=X.max(axis=0)
X_norm=(X-xmin)/(xmax-xmin)
#-----训练模型--------------------
clf = LogisticRegression(random_state=0)            
clf.fit(X_norm,y)
#------模型预测-------------------------------
pred_y      = clf.predict(X_norm)
pred_prob_y = clf.predict_proba(X_norm)[:,1]
#------------提取系数w与阈值b-----------------------
w_norm = clf.coef_[0]                         # 模型系数(对应归一化数据)
b_norm = clf.intercept_                        # 模型阈值(对应归一化数据)
w       = w_norm/(xmax-xmin)                     # 模型系数(对应原始数据)
b      = b_norm -  (w_norm/(xmax - xmin)).dot(xmin)      # 模型阈值(对应原始数据)
self_prob_y = 1/(1+np.exp(-(X.dot(w)+ b) ))             # 用公式预测

#------------打印信息--------------------------
print("\n------对应归一化数据的模型参数-------")     
print( "模型系数(对应归一化数据):",clf.coef_[0])
print( "模型阈值(对应归一化数据):",clf.intercept_)
print("\n------对应原始数据的模型参数-------")   
print("模型系数(对应原始数据):",w)
print("模型阈值(对应原始数据):",b)
print("提取公式计算的概率与模型概率的最大误差", abs(pred_prob_y-self_prob_y).max())  

运行结果:

------对应归一化数据的模型参数-------
模型系数(对应归一化数据): [ 0.18783816 -1.11495824 -3.6342363  -7.06872446]
模型阈值(对应归一化数据): [3.27959399]

------对应原始数据的模型参数-------
模型系数(对应原始数据): [  1.69574943  -3.4199075   -8.51508037 -35.13282533]
模型阈值(对应原始数据): [3.25662451]
提取公式计算的概率与模型概率的最大误差 3.885780586188048e-16

结果解读:

将结果中的模型系数代入逻辑回归模型:P=\displaystyle \dfrac{1}{1+e^{-(w_1x_1+w_2x_2+....w_kx_k+b)}}

可得

对应原始数据的模型为:

P = \dfrac{1}{1+e^{-( 1.69574943x_1-3.4199075x_2-8.51508037x_3-35.13282533x_4+3.25662451)}}


相关文章

逻辑回归过拟合分析与解决方案

sklearn:一个简单的逻辑回归例子

sklearn提取逻辑回归模型系数

逻辑回归建模完整流程

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值