机器学习 - 逻辑回归
在本页面中,W3schools.com 与 NYC Data Science Academy 合作,为我们的学生提供数字培训内容。
逻辑回归
逻辑回归旨在解决分类问题。它通过预测分类结果来实现这一点,这与预测连续结果的线性回归不同。
在最简单的情况下,有两种结果,称为二项式,例如预测肿瘤是恶性还是良性。其他情况有超过两种结果要分类,在这种情况下称为多项式。多项式逻辑回归的常见示例是预测鸢尾花在 3 种不同物种中的类别。
在这里,我们将使用基本逻辑回归来预测二项式变量。这意味着它只有两种可能的结果。
它是如何工作的?
在 Python 中,我们有可以为我们完成工作的模块。从导入 NumPy 模块开始。
import numpy
将自变量存储在 X 中。
将因变量存储在 y 中。
下面是一个示例数据集
# X 表示肿瘤的大小(以厘米为单位)。
X = numpy.array([3.78, 2.44, 2.09, 0.14, 1.72, 1.65, 4.92, 4.37, 4.96, 4.52, 3.69, 5.88]).reshape(-1,1)
# 注意:X 必须从行重塑为列,才能使 LogisticRegression() 函数正常工作。
# y 表示肿瘤是否为癌性(0 表示“否”,1 表示“是”)。
y = numpy.array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1])
我们将使用 sklearn 模块中的一个方法,因此我们也需要导入该模块
from sklearn import linear_model
从 sklearn 模块中,我们将使用 LogisticRegression() 方法创建一个逻辑回归对象。
此对象有一个名为 fit()
的方法,它接受自变量和因变量作为参数,并用描述关系的数据填充回归对象
logr = linear_model.LogisticRegression()
logr.fit(X,y)
现在我们拥有了一个逻辑回归模型,它可以根据肿瘤大小判断肿瘤是否为癌性。
#预测肿瘤大小为3.46mm时是否为癌性
predicted = logr.predict(numpy.array([3.46]).reshape(-1,1))
示例
查看完整示例
import numpy
from sklearn import linear_model
#为逻辑函数重塑形状。
X = numpy.array([3.78, 2.44, 2.09, 0.14, 1.72, 1.65, 4.92, 4.37, 4.96, 4.52, 3.69, 5.88]).reshape(-1,1)
y = numpy.array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1])
logr = linear_model.LogisticRegression()
logr.fit(X,y)
#预测肿瘤大小为3.46mm时是否为癌性
predicted = logr.predict(numpy.array([3.46]).reshape(-1,1))
print(predicted)
结果
[0]
我们预测大小为3.46mm的肿瘤不会是癌性。
广告
系数
在逻辑回归中,系数是指 X 每变化一个单位,结果发生的概率的对数变化。
这可能不是最直观的理解,所以让我们用它来创建更有意义的东西,即概率。
示例
查看完整示例
import numpy
from sklearn import linear_model
#为逻辑函数重塑形状。
X = numpy.array([3.78, 2.44, 2.09, 0.14, 1.72, 1.65, 4.92, 4.37, 4.96, 4.52, 3.69, 5.88]).reshape(-1,1)
y = numpy.array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1])
logr = linear_model.LogisticRegression()
logr.fit(X,y)
log_odds = logr.coef_
odds = numpy.exp(log_odds)
print(odds)
结果
[4.03541657]
这告诉我们,随着肿瘤大小每增加 1mm,它成为癌性肿瘤的概率增加 4 倍。
概率
系数和截距值可以用来找到每个肿瘤是癌性的概率。
创建一个函数,使用模型的系数和截距值来返回一个新值。这个新值代表给定观测值是肿瘤的概率
def logit2prob(logr,x)
log_odds = logr.coef_ * x + logr.intercept_
odds = numpy.exp(log_odds)
probability = odds / (1 + odds)
return(probability)
函数解释
要找到每个观测值的概率对数,我们首先必须创建一个与线性回归公式类似的公式,提取系数和截距。
log_odds = logr.coef_ * x + logr.intercept_
然后,为了将概率对数转换为概率,我们必须对概率对数进行指数运算。
odds = numpy.exp(log_odds)
现在我们有了概率,可以通过将其除以 1 加上概率来将其转换为概率。
probability = odds / (1 + odds)
现在让我们用我们学到的知识来使用这个函数,找出每个肿瘤是癌性的概率。
示例
查看完整示例
import numpy
from sklearn import linear_model
X = numpy.array([3.78, 2.44, 2.09, 0.14, 1.72, 1.65, 4.92, 4.37, 4.96, 4.52, 3.69, 5.88]).reshape(-1,1)
y = numpy.array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1])
logr = linear_model.LogisticRegression()
logr.fit(X,y)
def logit2prob(logr, X)
log_odds = logr.coef_ * X + logr.intercept_
odds = numpy.exp(log_odds)
probability = odds / (1 + odds)
return(probability)
print(logit2prob(logr, X))
结果
[[0.60749955] [0.19268876] [0.12775886] [0.00955221] [0.08038616] [0.07345637] [0.88362743] [0.77901378] [0.88924409] [0.81293497] [0.57719129] [0.96664243]]
结果解释
3.78 0.61 大小为 3.78cm 的肿瘤是癌性的概率为 61%。
2.44 0.19 大小为 2.44cm 的肿瘤是癌性的概率为 19%。
2.09 0.13 大小为 2.09cm 的肿瘤是癌性的概率为 13%。