sklearn中Logistics Regression的coef_和intercept_的具体意义

来源:互联网 发布:网络监控机怎么安装 编辑:程序博客网 时间:2024/06/10 07:06

使用sklearn库可以很方便的实现各种基本的机器学习算法,逻辑斯谛回归(Logistic Regression)实现完之后,可能陷入代码太久,忘记基本的算法原理了,突然想不到 coef_ 和 intercept_ 具体是代表什么意思了,就是具体到公式中的哪个字母,虽然总体知道代表的是模型参数。

我们使用sklearn官方的一个例子来作为说明,源码可以从这里下载,下面我截取其中一小段并做了一些修改:

import numpy as npimport matplotlib.pyplot as pltfrom sklearn.datasets import make_blobsfrom sklearn.linear_model import LogisticRegression# 构造一些数据点centers = [[-5, 0], [0, 1.5], [5, -1]]X, y = make_blobs(n_samples=1000, centers=centers, random_state=40)transformation = [[0.4, 0.2], [-0.4, 1.2]]X = np.dot(X, transformation)clf = LogisticRegression(solver='sag', max_iter=100, random_state=42, ).fit(X, y)print clf.coef_ print clf.intercept_
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

输出如图: 
[[-4.41615534 -2.23077034]
 [-0.36796618  1.64022091]
 [ 4.7027708   0.18133443]]
 
[-4.61020975 -1.91396323 -4.17213317]

可以看到 clf.coef_ 是一个3×2(n_class, n_features)的矩阵,clf.intercept_是一个1×3的矩阵(向量),那么这些到底是什么意思呢?

我们来回顾一下Logistic回归的模型: 



其中 θ 是模型参数,其实 θTx 就是一个线性表达式,将这个表达式的结果再一次利用Logistic函数映射到0~1之间。

知道了这个,也就可以搞清楚那个 clf.coef_ 和 clf.intercept_ 了: clf.coef_ 和 clf.intercept_ 就是 θ ,下面我们来验证一下:

i = 100print 1 / (1 + np.exp(-(np.dot(X[i].reshape(1, -1), cc.T) + clf.intercept_)))# 正确的类别print y[i]print clf.predict_proba(X[i].reshape(1, -1))print clf.predict_log_proba(X[i].reshape(1, -1))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

输出结果: 

可以看到结果是吻合的,说明我们的猜想是正确的。

阅读全文
0 0