以鸢尾花逻辑回归为例,如何理解预测结果的系数和截距?
发布于 作者:苏南大叔 来源:程序如此灵动~本文再次审视鸢尾花数据集的逻辑回归模型,审视的角度是:模型训练后得到的系数coef_
和截距intercept_
。得到这两个数据后,可以说明什么问题呢?
苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验文章。测试环境:win10
,python@3.12.0
,sklearn@1.2.2
。
本文结论 coef_ / intercept_
先说一下本文的结论,然后再看论证的过程。如果大家觉得苏南大叔哪里说的不对,欢迎留言给我。
训练的数据集,直观的体现了n_features
和n_class
:
- 训练集有
n_features
个特性。对应鸢尾花的四列数据:萼长,萼宽,瓣长,瓣宽。 - 训练集有
n_class
种分类方法。二分类法:是或者不是【某个】分类(针对某个分类,是或者不是)。多分类[n>2]法:是【哪个】分类法,(是分类一,还是分类二,还是分类三)。
LogisticRegression
逻辑回归,可以正常处理二分类,也可以正常处理多分类,自由切换。当然,也可以主动指明参数,使用二分类还是多分类模型。
理解系数coef_
和截距intercept_
:
coef_
属性,“斜率”参数(w,也叫作权重或系数)。.coef_
是个(n_class, n_features)的矩阵。intercept_ 属性
,偏移或截距(b).intercept_
是个(1, n_class)的矩阵。
准备训练集
阐述这两个参数的不同,主要取决于鸢尾花数据集的不同分割,就会产生出不同的系数和截距。所以,本文代码的关键点就在于X_train, X_test, y_train, y_test
这四个值的获取了。不同的数据划分,会得到不同的系数coef_
和截距intercept_
。(主要是矩阵形状不同)。
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=8)
鸢尾花普通预测
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(X_train, y_train)
print(model.coef_)
print(model.intercept_)
# ...
参考下面这篇文章:
不同的切分方案[临界点]
load_iris()
的鸢尾花数据集,150条数据。分类0、1、2各占50条。前50条是分类0,中间50条是分类1,最后50条是分类2。所以,如果要通过train_test_split()
进行区分的话,是这样区分的:
train_size = 重点在这里
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=train_size, shuffle=False)
情况一:训练集(train_size)取前[1,50],全部是分类0,训练失败。
ValueError: This solver needs samples of at least 2 classes in the data, but the data contains only one class: 0
情况二:训练集(train_size)取[51,100],分类就是二分法了。是分类0么?是或者不是。
输出类似是:
[[ 0.68356372 -0.10543896 1.14568169 0.40767542]]
[-9.82160855]
情况三:训练集(train_size)取[101,149),至少留一个测试集数据吧?否则,会得到错误提示:
ValueError: train_size=150 should be either positive and smaller than the number of samples 150 or a float in the (0, 1) range
这种情况就是多分类了。是分类0么?是分类1么?是分类2么?
输出类似是:
[[-0.38126136 0.62368848 -1.81658703 -0.7706714 ]
[ 0.23689646 -0.91695469 0.58560897 -0.09521547]
[ 0.14436491 0.29326621 1.23097805 0.86588687]]
[ 7.514447 1.81896707 -9.33341407]
表格总结
训练集数量 | 特性数量 | 训练集分类 | 方法 | coef | intercept |
---|---|---|---|---|---|
[1,50] | 4 | [0] | 二分法 | error | error |
[51,100] | 4 | [0,1] | 二分法 | 1行4列 | 一行1列 |
[101,149] | 4 | [0,1,2] | 多分类 | 3行4列 | 一行3列 |
model.coef_
实际上反应的是features
特征的重要程度。这句话在后续的特征优化环节中,可以再次看到。待续。
结论
通过对比观察系数coef_
和截距intercept_
的数据变化,可以佐证苏南大叔的相关猜测。其实,系数coef_
和截距intercept_
,还可以客观预测测试集合的可能性数据。不同的模型,有着不同的算法。但是都和这两个值有关系。待文章后续更新。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。