当前位置:   article > 正文

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

logistic实现多分类python代码

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


目录

一.问题

二.流程与代码

(一) 流程

(二)代码

(三)模型表达式


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.20
4.93.01.40.20
4.73.21.30.20
...............
5.03.31.40.20
7.03.24.71.41
6.43.24.51.51
6.93.14.91.51
...............
5.72.84.11.31
6.33.36.02.52
5.82.75.11.92
7.13.05.92.12
...............
5.93.05.11.82

二.流程与代码

(一) 流程

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

(二)代码

  1. # -*- coding: utf-8 -*-
  2. """
  3. sklearn逻辑回归多分类例子(带模型公式提取)
  4. """
  5. from sklearn.linear_model import LogisticRegression
  6. import numpy as np
  7. from sklearn.datasets import load_iris
  8. #----数据加载------
  9. iris = load_iris()
  10. X = iris.data
  11. y = iris.target
  12. #----数据归一化------
  13. xmin = X.min(axis=0)
  14. xmax = X.max(axis=0)
  15. X_norm = (X-xmin)/(xmax-xmin)
  16. #-----训练模型--------------------
  17. clf = LogisticRegression(random_state=0,multi_class='multinomial')
  18. clf.fit(X_norm,y)
  19. #------模型预测-------------------------------
  20. pred_y = clf.predict(X_norm)
  21. pred_prob_y = clf.predict_proba(X_norm)
  22. #------------提取系数w与阈值b-----------------------
  23. w_norm = clf.coef_ # 模型系数(对应归一化数据)
  24. b_norm = clf.intercept_ # 模型阈值(对应归一化数据)
  25. w = w_norm/(xmax-xmin) # 模型系数(对应原始数据)
  26. b = b_norm - (w_norm/(xmax - xmin)).dot(xmin) # 模型阈值(对应原始数据)
  27. # ------------用公式预测------------------------------
  28. wxb = X.dot(w.T)+ b
  29. wxb = wxb - wxb.sum(axis=1).reshape((-1, 1)) # 由于担心数值过大会溢出,对wxb作调整
  30. self_prob_y = np.exp(wxb)/np.exp(wxb).sum(axis=1).reshape((-1, 1))
  31. self_pred_y = self_prob_y.argmax(axis=1)
  32. #------------打印信息--------------------------
  33. print("\n------模型参数-------")
  34. print( "模型系数:",w)
  35. print( "模型阈值:",b)
  36. print("\n-----验证准确性-------")
  37. print("提取公式计算的概率与sklearn自带预测概率的最大误差", abs(pred_prob_y-self_prob_y).max())

运行结果:

  1. ------模型参数-------
  2. 模型系数: [[-0.3902573 0.65000868 -0.48485313 -1.16130665]
  3. [ 0.07259933 -0.59884596 0.0709145 -0.19934931]
  4. [ 0.31765797 -0.05116272 0.41393863 1.36065596]]
  5. 模型阈值: [ 3.18277053 2.06368594 -5.24645647]
  6. -----验证准确性-------
  7. 提取公式计算的概率与sklearn自带预测概率的最大误差 3.3306690738754696e-16

(三)模型表达式

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

P=\displaystyle\begin{bmatrix} \dfrac{e^{(-0.39x_1+0.65x_2-0.48x_3-1.16x_4+3.18)}}{e^{(-0.39x_1+0.65x_2-0.48x_3-1.16x_4+3.18)}+e^{( 0.07x_1 -0.59x_2 + 0.07x_3 -0.19x_4+2.06)}+e^{( 0.31x_1 -0.05x_2 + 0.41x_3 + 1.36x_4-5.24)}} \\ \\ \dfrac{e^{( 0.07x_1 -0.59x_2 + 0.07x_3 -0.19x_4+2.06)}}{e^{(-0.39x_1+0.65x_2-0.48x_3-1.16x_4+3.18)}+e^{( 0.07x_1 -0.59x_2 + 0.07x_3 -0.19x_4+2.06)}+e^{( 0.31x_1 -0.05x_2 + 0.41x_3 + 1.36x_4-5.24)}} \\ \\ \dfrac{e^{( 0.31x_1 -0.05x_2 + 0.41x_3 + 1.36x_4-5.24)}}{e^{(-0.39x_1+0.65x_2-0.48x_3-1.16x_4+3.18)}+e^{( 0.07x_1 -0.59x_2 + 0.07x_3 -0.19x_4+2.06)}+e^{( 0.31x_1 -0.05x_2 + 0.41x_3 + 1.36x_4-5.24)}} \end{bmatrix}

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


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


相关文章

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

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

sklearn提取逻辑回归模型系数

逻辑回归建模完整流程

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/477468
推荐阅读
相关标签
  

闽ICP备14008679号