公号:码农充电站pro
主页:https://codeshellme.github.iohtml
上一篇文章介绍了线性回归模型,它用于处理回归问题。python
此次来介绍一下 Logistic 回归,中文音译为逻辑回归,它是一个非线性模型,是由线性回归改进而来(因此逻辑回归的名字中带有“回归”二字)。git
虽然 Logistic 回归的名字中也有回归二字,可是该算法并不是用于回归问题,而是用于处理分类问题,主要用于处理二分类问题,也能够用于处理多分类问题。github
Logistic 回归模型将一个事件出现的几率适应到一条S 型曲线上,这条曲线称为 Logistic 曲线。算法
Logistic 回归函数也叫作 Sigmoid 函数,其基本形式以下:shell
其中:dom
g(z) 公式中的自变量 z 就是咱们以前介绍的线性模型公式:函数
NumPy 库中的 linspace(start, stop, num) 方法在 [start, stop]
范围内生成 num
个等距的数字,好比:优化
>>> import numpy as np >>> >>> np.linspace(2.0, 3.0, num=5) # 在[2.0, 3.0] 范围生成 5 个数字 array([2. , 2.25, 2.5 , 2.75, 3. ]) >>> >>> np.linspace(2.0, 3.0, num=6) # 在[2.0, 3.0] 范围生成 6 个数字 array([2. , 2.2, 2.4, 2.6, 2.8, 3. ])
为了画出 Logistic 曲线,定义 x,y 以下:spa
x = np.linspace(-10, 10, 1000) # 在[10, -10] 范围生成 1000 个数字 y = [1/(1+np.exp(-i)) for i in x] # 根据 Sigmoid 函数求出 y
用 Matplotlib 画出折线图:
import matplotlib.pyplot as plt plt.plot(x, y) plt.show()
S 型曲线以下:
其中橙色的直线是我添加上去的。从上图能够直观的看出S 型曲线的走势,当 x 值在 [-6, 6] 以外时,y 的值变化很是小。
将 Logistic 回归用于二分类问题时,分类为 0 和 1,当 g(z) 大于0.5 时,纳入1 类;当 g(z) 小于0.5 时,纳入0 类。
sklearn 库中的 LogisticRegression 类是Logistic 回归的实现。
LogisticRegression 类的原型以下:
LogisticRegression(penalty='l2', dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver='lbfgs', max_iter=100, multi_class='auto', verbose=0, warm_start=False, n_jobs=None, l1_ratio=None)
来看下其中比较重要的几个参数:
l1
,l2
,elasticnet
,none
,默认为 l2
。
l2
:当模型参数知足高斯分布的时候,使用 l2
。支持 l2
的优化方法有 newton-cg
,sag
和lbfgs
。l1
:当模型参数知足拉普拉斯分布的时候,使用 l1
。在0.19 版本中,sag
支持 l1
。elasticnet
:仅 liblinear
支持 elasticnet
。none
:表示不使用正则化(liblinear
不支持)。liblinear
:coordinate descent (CD),坐标降低法。适用于数据量小的数据集。lbfgs
:为默认值,在0.22 版本中改成 liblinear
。newton-cg
:牛顿CG法。sag
:平均梯度降低法,适用数据量大的数据集。saga
:随机平均梯度降低法,适用数据量大的数据集。关于上面的一些参数,也能够参考这里。
下面咱们使用 Logistic 回归对鸢尾花数据集进行分析。
首先加载数据集:
from sklearn.datasets import load_iris X, y = load_iris(return_X_y=True)
构建 Logistic 回归模型:
from sklearn.linear_model import LogisticRegression clf = LogisticRegression() # 建立对象 clf.fit(X, y) # 拟合模型
对模型的准确率进行评分:
>>> clf.score(X, y) 0.97
能够看到,用 Logistic 回归对鸢尾花数据集进行分类,最终的准确率为 97%
,可见效果仍是不错的。
Logistic 回归多用于二分类问题,但也能够用于多分类,就像上面对鸢尾花数据集的分析。要让 Logistic 回归处理多分类问题,就要作出一些改进。
一种改进方式是经过屡次二分类实现多分类的目的。假如一个数据集有 N 个分类,那就须要训练 N 个二分类模型。对于一个新的特征数据,就须要用这 N 个分类器都对其进行处理,最终选择几率最大的那个分类做为多分类的结果。
另外一种方法是将 Logistic 回归改进为 Softmax 回归,Softmax 回归给出的是实例在每一种分类下出现的几率,从而处理多分类任务。
Logistic 回归模型是线性回归的改进,用于处理分类问题。实际应用中,Logistic 回归普遍用于广告系统预估点击率,生物统计等领域。
(本节完。)
推荐阅读:
欢迎关注做者公众号,获取更多技术干货。