一个简单的逻辑回归多分类例子与代码(python-sklearn实现)

一个简单的逻辑回归多分类例子与代码(python-sklearn实现)

目录

一.问题

二.流程与代码

(一) 流程

(二)代码

(三)模型表达式

sklearn逻辑回归多分类有两种模式: ovr与multinomial。

在multi_class设为auto的时候,如果二分类或者求解器为liblinear时,则为OVR,否则为multinomial,
多分类时ovr与multinomial的区别请参考:《sklearn逻辑回归多分类ovr与multinomial

本文讲解sklearn逻辑回归以multinomial模式做多分类的一个简单例子,并提取最后的模型表达式

一.问题

现已采集150组 鸢尾花数据:鸢尾花类别(山鸢尾,杂色鸢尾,弗吉尼亚鸢尾)与四个特征(花萼长度sepal length (cm) 、花萼宽度sepal width (cm)、花瓣长度petal length (cm)、花瓣宽度petal width (cm))。
则我们可以通过采集的数据训练一个决策模型,之后就可以用该模型进行预测鸢尾花类别

数据如下(即sk-learn中的iris数据):

花萼长度花萼宽度花瓣长度花瓣宽度花类别5.13.51.40.204.93.01.40.204.73.21.30.20……………5.03.31.40.207.03.24.71.416.43.24.51.516.93.14.91.51……………5.72.84.11.316.33.36.02.525.82.75.11.927.13.05.92.12……………5.93.05.11.82

二.流程与代码

(一) 流程

1.数据归一化(用sklearn的逻辑回归一般要作数据归一化)
2.用归一化数据训练逻辑回归模型
3.用训练好的逻辑回归模型预测。
4.模型参数提取

(二)代码

-*- coding: utf-8 -*-
"""
sklearn逻辑回归多分类例子(带模型公式提取)
"""
from sklearn.linear_model import LogisticRegression
import numpy as np
from sklearn.datasets import load_iris
#----数据加载------

iris = load_iris()
X    = iris.data
y    = iris.target
#----数据归一化------
xmin   = X.min(axis=0)
xmax   = X.max(axis=0)
X_norm = (X-xmin)/(xmax-xmin)

#-----训练模型--------------------
clf = LogisticRegression(random_state=0,multi_class='multinomial')
clf.fit(X_norm,y)

#------模型预测-------------------------------
pred_y      = clf.predict(X_norm)
pred_prob_y    = clf.predict_proba(X_norm)

#------------提取系数w与阈值b-----------------------
w_norm = clf.coef_                             # 模型系数(对应归一化数据)
b_norm = clf.intercept_                           # 模型阈值(对应归一化数据)
w    = w_norm/(xmax-xmin)                       # 模型系数(对应原始数据)
b    = b_norm -  (w_norm/(xmax - xmin)).dot(xmin)      # 模型阈值(对应原始数据)
------------用公式预测------------------------------
wxb = X.dot(w.T)+ b
wxb = wxb - wxb.sum(axis=1).reshape((-1, 1)) # 由于担心数值过大会溢出,对wxb作调整
self_prob_y = np.exp(wxb)/np.exp(wxb).sum(axis=1).reshape((-1, 1))
self_pred_y = self_prob_y.argmax(axis=1)

#------------打印信息--------------------------
print("\n------模型参数-------")
print( "模型系数:",w)
print( "模型阈值:",b)
print("\n-----验证准确性-------")
print("提取公式计算的概率与sklearn自带预测概率的最大误差", abs(pred_prob_y-self_prob_y).max())

运行结果:

提取公式计算的概率与sklearn自带预测概率的最大误差 3.3306690738754696e-16

(三)模型表达式

由模型系数,得到最后的模式表达式为:

P=

一个简单的逻辑回归多分类例子与代码(python-sklearn实现)

类别预测:哪个的值大,就是哪一类。
概率预测:P归一化后即类别。

备注: sklearn担心e的指数部分太大,产生数值溢出,会再做一些处理。详细见代码里的处理。

相关文章

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

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

sklearn提取逻辑回归模型系数

逻辑回归建模完整流程

Original: https://blog.csdn.net/ywj_1991/article/details/123688120
Author: 老饼讲解机器学习
Title: 一个简单的逻辑回归多分类例子与代码(python-sklearn实现)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/661648/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球