2020.08.20_Task1_基于逻辑斯特模型,实现分类预测
Hello大家好,今天就来学习和了解一下逻辑斯特模型,以及它在机器学习领域中的一个重要用途:实现分类预测。
其实一开始看到标题是:”基于逻辑回归的分类预测“,我挺疑惑的。一是完全不懂逻辑回归是什么,二是完全不懂为什么要说是回归,三是完全不懂怎么实现分类以及预测。直到去学了之后,看了些文章,再总结之前自己学过的高数课,才明白原来这个东西我学过。
以及在慢慢开始要去学习机器学习这个新兴学科后,我发现了解它的科学发展史很有必要,只有认识它的发展轨迹,才会明白为什么会涌现出这么多我们耳熟能详的模型,以及为什么会有这么多迭代的出现,这样更有助于我们去记忆这些东西。
当然,记忆之后,也就是要看你的应用能力。这是后话。
所以我在介绍的时候,都会先铺垫一段发展历史,为的是给后面自己的学习做好铺垫。
其实这里讲的“逻辑回归”,使用到的数学模型,就是逻辑斯特模型。这个模型最早出现的原因是为了修正马尔萨斯的人口模型理论的。马尔萨斯在1789年匿名发表了《人口论》,里面提到了一个很重点的观点:人口的增长定理和人口的制约定理。人口的增长定理,是说明当生活资料增加时,人口数也会跟着增加。人口的制约定理是说明人口的增长, 必然要受到生活资料的限制。因此翻译成数学语言,就有了以下的简单一阶微分方程:
这里面 N(t)是指t时刻的人口数量,至于这么想是因为他直观认为,当人口数量变多,说明当下人口的增长率很快;反之,当人口数量变少了,说明当下人口增长率很慢。先不论他想的对不对,但是这是他的直观思维,因此就有了(1)这个方程。求解后就是一个典型的指数方程。称作:“马尔萨斯人口增长模型”
当然一看这个方程就已经知道这个方程局限性很多了:(1)资源有限的情况下,人口不可能随着时间推移一直不停增长,甚至可以减退等等。
后来,一位数学生物学家: Pierre - Francois Verhulst 。针对资源有限的情况下,提出了新的人口增长模型,叫做:“逻辑斯特方程”,并且被成功应用到生态发展,医学,经济学等领域,现在还被改装后用到机器学习中了。
这里面,P是t时刻的物种数量,K是某环境下最大的容纳数量。r是不同物种的增长系数。
这个方程的求解结果:
上述方程的函数图像:
这个和我们平时看到的逻辑回归对应的那个假设函数可不太一样,为什么呢?因为这个数学模型是具有物理意义的:种群初始数一般是大于0的,并且最终会趋近于最大值。因此只需要了t(自变量)大于0的函数图像。
现在来看一下sigmoid 函数:
表达式:
函数图像:
对比一下这两个函数的区别在哪?
1 看初始值: (1) logistic equation |(t = 0)value = P0
(2) sigmoid function | (t = 0) value = 0.5
2 看最大值: (1) logistic equation |(t = + infinity)value = K
(2) sigmoid function | (t = + infinity) value = 1
共同点在哪?
都是以
的表达形式。无非Logistic equation的分子上多了系数,指数项也有系数。并且logistic equation只看具有物理意义的部分。
了解完他们的前生。现在来看一下现今的应用。
由于logistic equation衍生出了这个sigmoid 函数,并且还能用于回归分析,因此把sigmoid函数实现分类预测的功能叫做:“逻辑回归”
在了解逻辑回归时,一定要区分清楚三个概念:
假设函数
决策边界
决策函数
这里放一个链接:https://zhuanlan.zhihu.com/p/28408516
这里简要概括一下,这三个概念的作用。
假设函数:是为了确定一组输入中每一个输入所对应的一个输出值,这两个之间存在一个可以量化的关系式。在这里显然,是把这个sigmoid函数和决策边界共同组成了一个假设函数。
决策边界:也称为决策面,是用于在N维空间,将不同类别样本分开的平面或曲面。决策边界是假设函数的属性之一,假设函数中是包含了决策边界的。决策边界是利用这一组输入建立的方程来求解对应的决策边界的参数的。
(以下部分是自己理解的,不对请纠正):决策边界的方程形式,取决你想使用一个线性决策边界还是非线性决策边界来实现不同类别数据的划分。线性决策边界的表达形式非常简单,非线性决策边界表达形式多种多样。像Python scikit learn 包里面整合的logistic regression函数包中,对应的决策边界求解就直接default成线性决策边界了。如果你在直接画你的数据在三维或者二维坐标轴时发现用线性决策边界不能很好划分每个类别的数据,那就是该用非线性决策边界了。
每一个输入代入到决策边界的表达式当中会得到一个值,这个值再代入sigmoid函数之后会得到一个输出,这个输出就和这个输入建立了联系。
决策函数:决策函数才是真正实现决策功能。他的作用就是通过各种条件判断,来确定由假设函数计算得到的输出,属于哪一个类别,在数学里就是属于哪一个数字。
这个了解完了,就要搞清楚逻辑回归到底能干嘛?对于新手入门,一个很重要的应用就是:分类预测。就是当有一个新数据输入,可以预测这个数据属于哪一个类别。这就是分类预测。
了解完逻辑回归到底是干嘛的,可以总结一下这个逻辑回归应用的思路了。
面对逻辑回归分析,你已经知道的是:
(1)你的任务是什么(是不是需要做分类预测)
(1)假设函数的形式。(sigmoid function)
(2)决策边界的类型。(线性决策边界)
(3)一组数据输入和每一个输入对应的标签。(决策边界中的输入已知,样本量已知)
你还不知道的是:
(1)决策边界的参数(也就是coef._ 和 intercept)
(2)决策函数的设定 (到底以什么值为临界点实现分类)
上述不知道的,交给python + 你已有的数据集就可以帮你求解。
举一个简单的demo(代码实现)Python 3.0支持
1 ##导入基本使用库
import numpy as np
from sklearn.linear_model import LogisticRegression
2 ##导入数据集(目前这里是创造了一个并手动录入,后面都是用pandas直接录入的)
x_features = np.array([[-1, -2], [-2, -1], [-3, -2], [1, 3], [2, 1], [3, 2]]);
y_label = np.array([0, 0, 0, 1, 1, 1]);
###调用LogisticsRegression
lr_clf = LogisticRegression();
###计算决策边界
lr_clf = LogisticRegression.fit(x_features, y_label);
###输出决策边界的结果
print(lr_clf.coef_);(你看这个输入数据是二维的,并且这里默认决策边界是线性的,因此这个参数肯定就只有两个,和数据维数相等)
print(lr_clf.intercept_);
3 ##进行新样本数据的分类预测(你已经根据之前的训练数据获得了决策边界,这时候你只能用这个决策边界去做分类预测)
###录入新样本
x_features_new1 = np.array([[0, -1]]);
x_features_new2 = np.array([[1, 2]]);
###调用LogisticRegression中的predict功能
y_label_new1_predict = lr_clf.predict(x_features_new1);
y_label_new2_predict = lr_clf.predict(x_features_new2);
###输出分类结果
print(y_label_new1_predict);
print(y_label_new2_predict);
###查看把输入代入到假设函数中计算出来的值。
y_label_new1_predict_proba = lr_clf.predict_proba(x_features_new1);
y_label_new2_predict_proba = lr_clf.predict_proba(x_features_new2);
小结
了解LogisticRegression的基本数学背景及原理,在Python上练习了基于LogisticRegression的二分类预测。实际上可以用于多分类预测,例如鸢尾花训练集。有三种鸢尾花,分别是A,B,C类型。代用LogisticRegression后可以获得决策边界,从而完善了假设函数。接下来就是做分类预测,结果只会告诉你,它是属于A,或者不属于A(这属于二分类);它是属于B,或者不属于B(这属于二分类);它是属于C,或者不属于C(这属于二分类)。说白了还是实现类似于二分类的分类功能。实现方式下回讲解。