在本文中,我们将分析变换的理论计算 线性回归函数 в 逆 Logit 变换函数(也称为逻辑响应函数)。 然后,使用武器库 最大似然法,根据逻辑回归模型,我们推导出损失函数 物流损失,或者换句话说,我们将定义一个函数,用它在逻辑回归模型中选择权重向量的参数 .
文章大纲:
- 让我们重复一下两个变量之间的线性关系
- 让我们确定转型的必要性 线性回归函数 в 逻辑响应函数
- 让我们进行转换和输出 逻辑响应函数
- 让我们尝试理解为什么最小二乘法在选择参数时效果不好 功能 物流损失
- 我们用 最大似然法 用于确定 参数选择功能 :
5.1. 案例一:函数 物流损失 对于具有类别名称的对象 0 и 1:
5.2. 案例一:函数 物流损失 对于具有类别名称的对象 -1 и +1:
本文充满了简单的示例,其中所有计算都很容易通过口头或纸质进行;在某些情况下,可能需要计算器。 所以准备好吧:)
本文主要面向具有机器学习基础知识的数据科学家。
本文还将提供用于绘制图表和计算的代码。 所有代码都是用该语言编写的 python 2.7。 让我提前解释一下所使用版本的“新颖性” - 这是参加著名课程的条件之一 Yandex的 在同样知名的在线教育平台上 Coursera,并且,正如人们可能假设的那样,该材料是根据本课程准备的。
01.直线依赖
问这个问题是很合理的——线性相关性和逻辑回归与它有什么关系?
这很简单! 逻辑回归是属于线性分类器的模型之一。 简单来说,线性分类器的任务是预测目标值 来自变量(回归量) 。 据认为,特征之间存在依赖性 和目标值 线性。 因此分类器的名称是线性的。 非常粗略地说,逻辑回归模型是基于特征之间存在线性关系的假设 和目标值 。 这就是连接。
工作室里有第一个例子,正确的是,它是关于所研究的数量的线性依赖性的。 在准备这篇文章的过程中,我遇到了一个已经让很多人感到紧张的例子——电流对电压的依赖性 (“应用回归分析”,N. Draper、G. Smith)。 我们也会在这里看看。
依据 欧姆定律:
哪里 - 当前强度, - 电压, - 反抗。
如果我们不知道 欧姆定律,那么我们可以通过改变来凭经验找到依赖性 和测量 ,同时支持 固定的。 然后我们会看到依赖图 从 给出一条或多或少穿过原点的直线。 我们说“或多或少”是因为,虽然这种关系实际上是准确的,但我们的测量可能会包含一些小误差,因此图表上的点可能不会完全落在这条线上,而是会随机散布在这条线上。
图1“依赖性” 从 »
图表绘制代码
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
import random
R = 13.75
x_line = np.arange(0,220,1)
y_line = []
for i in x_line:
y_line.append(i/R)
y_dot = []
for i in y_line:
y_dot.append(i+random.uniform(-0.9,0.9))
fig, axes = plt.subplots(figsize = (14,6), dpi = 80)
plt.plot(x_line,y_line,color = 'purple',lw = 3, label = 'I = U/R')
plt.scatter(x_line,y_dot,color = 'red', label = 'Actual results')
plt.xlabel('I', size = 16)
plt.ylabel('U', size = 16)
plt.legend(prop = {'size': 14})
plt.show()
02.线性回归方程需要变换
让我们看另一个例子。 假设我们在一家银行工作,我们的任务是根据某些因素确定借款人偿还贷款的可能性。 为了简化任务,我们只考虑两个因素:借款人的月工资和每月贷款还款额。
该任务是有条件的,但是通过这个例子我们可以理解为什么它还不够使用 线性回归函数,并找出该函数需要进行哪些转换。
让我们回到这个例子。 据了解,工资越高,借款人每月能够拨出的资金来偿还贷款的金额就越多。 同时,对于一定的薪资范围,这种关系将是相当线性的。 例如,假设工资范围为 60.000 RUR 到 200.000 RUR,并假设在指定的工资范围内,每月付款大小与工资大小之间的依赖关系是线性的。 假设对于指定的工资范围,工资与付款比率不能低于 3,并且借款人仍必须有 5.000 RUR 的储备金。 只有在这种情况下,我们才会假设借款人将向银行偿还贷款。 那么,线性回归方程将采用以下形式:
哪里 , , , - 薪水 第-个借款人, - 贷款支付 -th 借款人。
将固定参数的工资和贷款支付代入方程 您可以决定是否发放或拒绝贷款。
展望未来,我们注意到,使用给定的参数 线性回归函数,用于 后勤响应功能 将产生较大的值,从而使确定贷款偿还概率的计算变得复杂。 因此,建议将我们的系数减少 25.000 倍。 系数的这种转换不会改变发放贷款的决定。 让我们记住这一点以供将来使用,但是现在,为了使我们所讨论的内容更加清楚,让我们考虑三个潜在借款人的情况。
表 1 “潜在借款人”
生成表的代码
import pandas as pd
r = 25000.0
w_0 = -5000.0/r
w_1 = 1.0/r
w_2 = -3.0/r
data = {'The borrower':np.array(['Vasya', 'Fedya', 'Lesha']),
'Salary':np.array([120000,180000,210000]),
'Payment':np.array([3000,50000,70000])}
df = pd.DataFrame(data)
df['f(w,x)'] = w_0 + df['Salary']*w_1 + df['Payment']*w_2
decision = []
for i in df['f(w,x)']:
if i > 0:
dec = 'Approved'
decision.append(dec)
else:
dec = 'Refusal'
decision.append(dec)
df['Decision'] = decision
df[['The borrower', 'Salary', 'Payment', 'f(w,x)', 'Decision']]
根据表中的数据,Vasya 的工资为 120.000 卢布,希望获得一笔贷款,以便他每月可以偿还 3.000 卢布。 我们确定,要批准贷款,Vasya 的工资必须超过付款金额的三倍,并且还必须剩余 5.000 RUR。 Vasya 满足这个要求: 。 甚至还有 106.000 RUR。 尽管在计算时 我们降低了可能性 25.000次,结果都是一样——贷款可以批准。 费迪亚(Fedya)也将获得一笔贷款,但莱莎(Lesha)尽管收到的贷款最多,但仍必须抑制自己的胃口。
让我们为这个案例画一个图表。
图2“借款人分类”
绘制图表的代码
salary = np.arange(60000,240000,20000)
payment = (-w_0-w_1*salary)/w_2
fig, axes = plt.subplots(figsize = (14,6), dpi = 80)
plt.plot(salary, payment, color = 'grey', lw = 2, label = '$f(w,x_i)=w_0 + w_1x_{i1} + w_2x_{i2}$')
plt.plot(df[df['Decision'] == 'Approved']['Salary'], df[df['Decision'] == 'Approved']['Payment'],
'o', color ='green', markersize = 12, label = 'Decision - Loan approved')
plt.plot(df[df['Decision'] == 'Refusal']['Salary'], df[df['Decision'] == 'Refusal']['Payment'],
's', color = 'red', markersize = 12, label = 'Decision - Loan refusal')
plt.xlabel('Salary', size = 16)
plt.ylabel('Payment', size = 16)
plt.legend(prop = {'size': 14})
plt.show()
所以,我们的直线,根据函数构造 ,将“坏”借款人与“好”借款人区分开来。 那些愿望与其能力不相符的借款人位于线上方(Lesha),而根据我们模型的参数,能够偿还贷款的借款人则位于线下方(Vasya 和 Fedya)。 换句话说,我们可以这样说:我们的直线将借款人分为两类。 让我们将它们表示如下: 到类 我们将最有可能偿还贷款的借款人分类为 или 我们将包括那些最有可能无法偿还贷款的借款人。
让我们总结一下这个简单例子的结论。 我们先说一个观点 将点的坐标代入直线对应的方程 ,考虑三个选项:
- 如果该点在线下并且我们将其分配给类 ,那么函数的值 将会是积极的 对 。 这意味着我们可以假设偿还贷款的概率在 。 函数值越大,概率越高。
- 如果一个点位于一条线上方,我们将其分配给该类 или ,那么函数的值将为负 对 。 那么我们假设债务偿还的概率在 并且,函数的绝对值越大,我们的置信度就越高。
- 该点位于一条直线上,位于两个类之间的边界上。 在这种情况下,函数的值 将是平等的 偿还贷款的概率等于 .
现在,让我们想象一下,我们的借款人不是两个,而是数十个,也不是三个,而是数千个。 然后我们将得到的不是直线 m维 平面和系数 我们不会凭空得出,而是根据所有规则,并根据已偿还或尚未偿还贷款的借款人的累积数据得出。 事实上,请注意,我们现在正在使用已知的系数来选择借款人 。 事实上,逻辑回归模型的任务正是确定参数 ,此时损失函数的值 物流损失 会趋向于最小值。 但关于向量是如何计算的 ,我们将在文章的第五部分了解更多内容。 与此同时,我们回到了应许之地——我们的银行家和他的三个客户。
感谢功能 我们知道谁可以获得贷款,谁需要被拒绝。 但你不能带着这些信息去找主管,因为他们想从我们这里得到每个借款人偿还贷款的概率。 该怎么办? 答案很简单——我们需要以某种方式转换函数 ,其值在范围内 其值将位于范围内的函数 。 并且存在这样一个函数,它被称为 逻辑响应函数或逆逻辑变换。 见面:
让我们一步步看看它是如何工作的 逻辑响应函数。 请注意,我们将朝相反的方向行走,即我们假设我们知道概率值,其范围为 对 然后我们将这个值“展开”到整个数字范围 对 .
03.我们推导逻辑响应函数
步骤1.将概率值转换为范围
函数变换过程中 в 逻辑响应函数 我们将不再打扰我们的信用分析师,而去参观一下博彩公司。 不,当然,我们不会下注,我们感兴趣的是表达式的含义,例如,机会是 4 比 1。所有投注者都熟悉的赔率是“成功”与“成功”的比率。失败”。 用概率术语来说,赔率是事件发生的概率除以事件不发生的概率。 让我们写下事件发生概率的公式 :
哪里 - 事件发生的概率, — 事件不发生的概率
例如,如果一匹绰号为“Veterok”的年轻、强壮、顽皮的马在比赛中击败一位名叫“Matilda”的老而松弛的老妇人的概率等于 ,那么“Veterok”成功的机会将是 к 反之亦然,知道了赔率,我们计算概率就不难了 :
因此,我们学会了将概率“转化”为机会,机会的值来自 对 。 让我们再迈出一步,学习将概率“翻译”到整个数轴: 对 .
步骤2.将概率值转换为范围
这一步非常简单——让我们以欧拉数为底的赔率取对数 我们得到:
现在我们知道如果 ,然后计算值 会非常简单,而且应该是积极的: 。 这是真实的。
出于好奇,让我们检查一下如果 ,那么我们期望看到负值 。 我们检查: 。 这是正确的。
现在我们知道如何将概率值转换为 对 沿着整个数轴从 对 。 在下一步中,我们将做相反的事情。
现在,我们注意到,根据对数规则,知道函数的值 ,您可以计算赔率:
这种确定赔率的方法将对我们下一步有用。
步骤 3. 让我们推导出一个公式来确定
所以我们学习了,知道了 ,求函数值 。 然而,事实上,我们需要的恰恰相反——知道价值 找到 。 为此,让我们转向逆赔率函数这样的概念,根据该概念:
在本文中,我们不会推导上述公式,但我们将使用上面示例中的数字来检查它。 我们知道赔率是 4 比 1 (),事件发生的概率为 0.8()。 我们来进行替换: 。 这与我们之前进行的计算相吻合。 让我们继续。
在最后一步中我们推断出 ,这意味着您可以在逆赔率函数中进行替换。 我们得到:
将分子和分母同时除以 , 然后:
为了以防万一,为了确保我们没有在任何地方犯错误,我们将再做一次小检查。 在第2步中,我们为 确定 。 然后,将值代入 代入逻辑响应函数,我们期望得到 。 我们代入并得到:
恭喜,亲爱的读者,我们刚刚导出并测试了逻辑响应函数。 让我们看一下该函数的图形。
图3“Logistic响应函数”
绘制图表的代码
import math
def logit (f):
return 1/(1+math.exp(-f))
f = np.arange(-7,7,0.05)
p = []
for i in f:
p.append(logit(i))
fig, axes = plt.subplots(figsize = (14,6), dpi = 80)
plt.plot(f, p, color = 'grey', label = '$ 1 / (1+e^{-w^Tx_i})$')
plt.xlabel('$f(w,x_i) = w^Tx_i$', size = 16)
plt.ylabel('$p_{i+}$', size = 16)
plt.legend(prop = {'size': 14})
plt.show()
在文献中,您还可以找到该函数的名称: 乙状结肠函数。 该图清楚地表明,对象属于某个类的概率的主要变化发生在相对较小的范围内 ,从某个地方 对 .
我建议回到我们的信用分析师那里,帮助他计算贷款偿还的概率,否则他可能会面临没有奖金的风险:)
表 2 “潜在借款人”
生成表的代码
proba = []
for i in df['f(w,x)']:
proba.append(round(logit(i),2))
df['Probability'] = proba
df[['The borrower', 'Salary', 'Payment', 'f(w,x)', 'Decision', 'Probability']]
因此,我们确定了贷款偿还的概率。 总的来说,这似乎是正确的。
事实上,工资为 120.000 卢布的 Vasya 每月向银行提供 3.000 卢布的概率接近 100%。 顺便说一句,我们必须明白,如果银行的政策规定,例如,贷款给客户的贷款偿还概率大于0.3,那么银行就可以向Lesha发放贷款。 只是在这种情况下,银行会为可能的损失建立更大的准备金。
还应该指出的是,工资与付款比率至少为 3,且余量为 5.000 RUR,取自上限。 因此,我们不能使用原始形式的权重向量 。 我们需要大幅降低系数,此时我们将每个系数除以25.000,即本质上是对结果进行了调整。 但这是专门为了简化初始阶段对材料的理解而这样做的。 在生活中,我们不需要发明和调整系数,而是找到它们。 在本文的下一部分中,我们将推导出用于选择参数的方程 .
04.确定权重向量的最小二乘法 在逻辑响应函数中
我们已经知道这种选择权重向量的方法 如 最小二乘法(LSM) 事实上,我们为什么不在二元分类问题中使用它呢? 事实上,没有什么可以阻止您使用 跨国公司,只有这种方法在分类问题中给出的结果不如 物流损失。 这是有理论依据的。 我们首先看一个简单的例子。
假设我们的模型(使用 MSE и 物流损失)已经开始选择权重向量 我们在某个步骤停止了计算。 无论是在中间、结尾还是开头都没关系,最主要的是我们已经有了权重向量的一些值,我们假设在这一步中,权重向量 两种型号没有差异。 然后将得到的权重代入 逻辑响应函数 () 对于属于该类的某个对象 。 我们检查两种情况,根据所选的权重向量,我们的模型非常错误,反之亦然 - 模型非常有信心该对象属于该类 。 我们来看看使用时会被罚款什么 跨国公司 и 物流损失.
根据使用的损失函数计算惩罚的代码
# класс объекта
y = 1
# вероятность отнесения объекта к классу в соответствии с параметрами w
proba_1 = 0.01
MSE_1 = (y - proba_1)**2
print 'Штраф MSE при грубой ошибке =', MSE_1
# напишем функцию для вычисления f(w,x) при известной вероятности отнесения объекта к классу +1 (f(w,x)=ln(odds+))
def f_w_x(proba):
return math.log(proba/(1-proba))
LogLoss_1 = math.log(1+math.exp(-y*f_w_x(proba_1)))
print 'Штраф Log Loss при грубой ошибке =', LogLoss_1
proba_2 = 0.99
MSE_2 = (y - proba_2)**2
LogLoss_2 = math.log(1+math.exp(-y*f_w_x(proba_2)))
print '**************************************************************'
print 'Штраф MSE при сильной уверенности =', MSE_2
print 'Штраф Log Loss при сильной уверенности =', LogLoss_2
一个失误的案例 — 模型将一个对象分配给一个类 概率为 0,01
使用处罚 跨国公司 将会:
使用处罚 物流损失 将会:
坚定信心的案例 — 模型将一个对象分配给一个类 概率为 0,99
使用处罚 跨国公司 将会:
使用处罚 物流损失 将会:
这个例子很好地说明了,如果出现严重错误,损失函数 日志损失 对模型的惩罚显着超过 MSE。 现在让我们了解使用损失函数的理论背景是什么 日志损失 在分类问题中。
05.最大似然法和逻辑回归
正如一开始所承诺的,本文充满了简单的示例。 工作室里还有另一个例子,也是老客人——银行借款人:Vasya、Fedya 和 Lesha。
为了以防万一,在开发示例之前,让我提醒您,在生活中我们正在处理具有数十或数百个特征的数千或数百万个对象的训练样本。 然而,这里的数字是为了让它们能够轻松地融入新手数据科学家的头脑中。
让我们回到这个例子。 让我们想象一下,银行董事决定向每个有需要的人发放贷款,尽管算法告诉他不要向 Lesha 发放贷款。 现在已经过去了足够的时间,我们知道三位英雄中哪些人偿还了贷款,哪些人没有偿还贷款。 意料之中的是:瓦夏和费迪亚偿还了贷款,但莱莎没有偿还。 现在让我们想象一下,这个结果对于我们来说将是一个新的训练样本,同时,就好像所有影响偿还贷款可能性的因素(借款人的工资、每月还款额)的数据都消失了。 然后,直观地,我们可以假设有三分之一的借款人不向银行偿还贷款,或者换句话说,下一个借款人偿还贷款的概率 。 这个直观的假设得到了理论上的证实,并且基于 最大似然法,在文献中通常被称为 最大似然原理.
首先,让我们熟悉一下概念装置。
抽样可能性 是准确获得这样的样本、准确地获得这样的观察结果/结果的概率,即获得每个样本结果的概率的乘积(例如,Vasya、Fedya和Lesha的贷款是否同时偿还或不同时偿还)。
似然函数 将样本的可能性与分布参数的值联系起来。
在我们的例子中,训练样本是广义伯努利方案,其中随机变量仅采用两个值: или 。 因此,样本似然可以写成参数的似然函数 如下所示:
上述条目可以解释如下。 Vasya 和 Fedya 偿还贷款的联合概率等于 ,Lesha 不偿还贷款的概率等于 (因为这不是发生的贷款偿还),因此所有三个事件的联合概率是相等的 .
最大似然法 是一种通过最大化估计未知参数的方法 似然函数。 在我们的例子中,我们需要找到这样一个值 在哪 达到最大值。
实际的想法从何而来——寻找似然函数达到最大值的未知参数的值? 这个想法的起源源于这样一种想法:样本是我们可以获得的有关总体的知识的唯一来源。 我们所知道的关于总体的一切都在样本中得到了体现。 因此,我们只能说样本是我们可用的总体的最准确反映。 因此,我们需要找到一个参数,使可用样本变得最有可能。
显然,我们正在处理一个优化问题,需要找到函数的极值点。 为了找到极值点,需要考虑一阶条件,即使函数的导数为零,并针对所需参数求解方程。 然而,寻找大量因子的乘积的导数可能是一项漫长的任务;为了避免这种情况,有一种特殊的技术 - 切换到对数 似然函数。 为什么这样的转变是可能的? 让我们注意一下,我们并不是在寻找函数本身的极值,以及极值点,即未知参数的值 在哪 达到最大值。 当转向对数时,极值点不会改变(尽管极值本身会有所不同),因为对数是单调函数。
让我们根据上述内容,继续使用 Vasya、Fedya 和 Lesha 的贷款来开发我们的示例。 首先让我们继续 似然函数的对数:
现在我们可以很容易地区分表达式 :
最后,考虑一阶条件 - 我们将函数的导数等于零:
因此,我们对贷款偿还概率的直观估计 理论上是合理的。
很好,但是我们现在应该如何处理这些信息呢? 如果我们假设三分之一的借款人不将钱归还给银行,那么后者将不可避免地破产。 是的,但仅当评估贷款偿还概率等于 我们没有考虑影响贷款偿还的因素:借款人的工资和每月还款额。 让我们记住,我们之前计算了每个客户偿还贷款的概率,并考虑了这些相同的因素。 我们获得的概率不同于常数等于,这是合乎逻辑的 .
让我们定义样本的可能性:
计算样本似然的代码
from functools import reduce
def likelihood(y,p):
line_true_proba = []
for i in range(len(y)):
ltp_i = p[i]**y[i]*(1-p[i])**(1-y[i])
line_true_proba.append(ltp_i)
likelihood = []
return reduce(lambda a, b: a*b, line_true_proba)
y = [1.0,1.0,0.0]
p_log_response = df['Probability']
const = 2.0/3.0
p_const = [const, const, const]
print 'Правдоподобие выборки при константном значении p=2/3:', round(likelihood(y,p_const),3)
print '****************************************************************************************************'
print 'Правдоподобие выборки при расчетном значении p:', round(likelihood(y,p_log_response),3)
恒定值的样本似然率 :
考虑因素计算贷款偿还概率时的样本可能性 :
事实证明,具有根据因素计算的概率的样本的似然性高于具有恒定概率值的似然性。 这是什么意思? 这表明,了解这些因素可以更准确地选择每个客户的贷款偿还概率。 因此,在发放下一笔贷款时,使用本文第3节末尾提出的模型来评估债务偿还概率会更为正确。
但是,如果我们想最大化 样本似然函数,那么为什么不使用某种算法来产生 Vasya、Fedya 和 Lesha 的概率,例如分别等于 0.99、0.99 和 0.01。 也许这样的算法在训练样本上表现良好,因为它会使样本似然值更接近 ,但是,首先,这样的算法很可能在泛化能力上存在困难,其次,这个算法肯定不是线性的。 如果本文的计划显然不包括对抗过度训练(同样弱的泛化能力)的方法,那么让我们更详细地讨论第二点。 为此,只需回答一个简单的问题。 考虑到我们已知的因素,Vasya 和 Fedya 偿还贷款的概率是否相同? 从合理的逻辑来看,当然不是,也不可能。 因此,Vasya 每月将支付工资的 2.5% 来偿还贷款,而 Fedya 则几乎为 27,8%。 同样在图 2“客户分类”中,我们看到 Vasya 比 Fedya 距离类别分隔线更远。 最后,我们知道该函数 Vasya 和 Fedya 采用不同的值:Vasya 为 4.24,Fedya 为 1.0。 现在,例如,如果 Fedya 的收入增加了一个数量级或要求的贷款较少,那么 Vasya 和 Fedya 偿还贷款的概率将相似。 换句话说,线性相关性无法被愚弄。 如果我们真的计算了几率 ,并且并不是凭空而来,我们可以有把握地说,我们的价值观 最好让我们估计每个借款人偿还贷款的概率,但由于我们同意假设系数的确定 是根据所有规则进行的,那么我们将假设如此 - 我们的系数使我们能够更好地估计概率:)
然而,我们离题了。 在本节中,我们需要了解权重向量是如何确定的 ,这对于评估每个借款人偿还贷款的概率是必要的。
让我们简要总结一下我们寻找赔率的武器库 :
1.我们假设目标变量(预测值)与影响结果的因素之间是线性关系。 由于这个原因,它被使用 线性回归函数 种类 ,该行将对象(客户端)划分为类 и или (有能力偿还贷款的客户和没有能力偿还贷款的客户)。 在我们的例子中,方程的形式为 .
2.我们使用 逆逻辑函数 种类 确定对象属于某个类的概率 .
3.我们将我们的训练集视为广义的实现 伯努利方案,即对于每个对象生成一个随机变量,其概率为 (每个对象都有自己的值)取值为 1 并且有概率 - 0。
4.我们知道我们需要最大化什么 样本似然函数 考虑到可接受的因素,使可用样本变得最合理。 换句话说,我们需要选择样本最可信的参数。 在我们的例子中,选择的参数是贷款偿还的概率 ,这又取决于未知系数 。 所以我们需要找到这样一个权重向量 ,此时样本的可能性最大。
5.我们知道要最大化什么 样本似然函数 可以使用 最大似然法。 我们知道使用这种方法的所有技巧。
这就是为什么它是一个多步骤的移动:)
现在请记住,在文章的一开始我们想要导出两种类型的损失函数 物流损失 取决于对象类别的指定方式。 碰巧,在具有两个类别的分类问题中,这些类别被表示为 и или 。 根据符号的不同,输出将具有相应的损失函数。
案例 1. 将对象分类为 и
此前,在确定样本的可能性时,根据因素和给定的系数计算借款人偿还债务的概率 ,我们应用了公式:
其实 是的意思 后勤响应功能 对于给定的权重向量
那么没有什么可以阻止我们将样本似然函数编写如下:
碰巧的是,有时一些新手分析师很难立即理解这个功能是如何工作的。 让我们看 4 个简短的例子,一切都会一目了然:
1. 如果 (即根据训练样本,该对象属于+1类),而我们的算法 确定将对象分类为类别的概率 等于0.9,则该样本的似然度计算如下:
2. 如果 和 ,那么计算将是这样的:
3. 如果 和 ,那么计算将是这样的:
4. 如果 和 ,那么计算将是这样的:
很明显,在情况 1 和 3 或一般情况下,似然函数将最大化 - 正确猜测将对象分配给类的概率值 .
由于以下事实:在确定将对象分配给某个类的概率时 我们只是不知道系数 ,然后我们会寻找他们。 如上所述,这是一个优化问题,首先我们需要找到似然函数相对于权重向量的导数 。 然而,首先我们自己简化任务是有意义的:我们将寻找对数的导数 似然函数.
为什么对数后,在 逻辑误差函数,我们将符号从 上 。 一切都很简单,因为在评估模型质量的问题中,通常会最小化函数的值,我们将表达式的右侧乘以 因此,现在我们不是最大化函数,而是最小化函数。
事实上,现在,就在你眼前,损失函数已经被煞费苦心地推导出来了—— 物流损失 对于包含两个类别的训练集: и .
现在,要找到系数,我们只需要找到导数 逻辑误差函数 然后,使用数值优化方法,例如梯度下降或随机梯度下降,选择最优系数 。 不过,考虑到文章篇幅较大,建议大家自己进行微分,或者可能这将是下一篇文章的主题,有大量的算术,没有如此详细的例子。
案例 2. 将对象分类为 и
这里的方法与类相同 и ,而是损失函数输出的路径本身 物流损失,会更加华丽。 让我们开始吧。 对于似然函数,我们将使用运算符 “如果……那么……”... 也就是说,如果 第一个对象属于该类 ,然后为了计算样本的可能性,我们使用概率 ,如果该对象属于该类 ,然后我们代入可能性 。 似然函数如下所示:
让我们用手指来描述它是如何工作的。 让我们考虑 4 种情况:
1. 如果 и ,那么采样可能性就会“消失”
2. 如果 и ,那么采样可能性就会“消失”
3. 如果 и ,那么采样可能性就会“消失”
4. 如果 и ,那么采样可能性就会“消失”
很明显,在情况 1 和 3 中,当算法正确确定概率时, 似然函数 会最大化,也就是说,这正是我们想要得到的。 然而,这种方法相当麻烦,接下来我们将考虑更紧凑的表示法。 但首先,让我们对改变符号的似然函数进行对数,因为现在我们将最小化它。
我们来代替 表达 :
让我们使用简单的算术技术简化对数下的正确项并得到:
现在是摆脱操作员的时候了 “如果……那么……”。 请注意,当一个对象 属于班级 ,那么在对数下的表达式中,在分母中, 上升到权力 ,如果该对象属于该类 ,然后将 $e$ 求幂 。 因此,可以通过将两种情况合二为一来简化度的表示法: 。 然后 逻辑误差函数 将采用以下形式:
根据对数规则,我们将分数翻转并输出符号““(减)对于对数,我们得到:
这是损失函数 物流损失,用于将对象分配给类的训练集中: и .
好了,到此我告辞了,我们就结束这篇文章了。
辅助材料
1。 文学作品
1) 应用回归分析 / N. Draper、G. Smith - 第二版。 – M.:金融与统计,2(英文翻译)
2) 概率论与数理统计/V.E. 格穆尔曼 - 第 9 版。 - 硕士:高中,2003
3) 概率论/N.I. Chernova - 新西伯利亚:新西伯利亚国立大学,2007
4) 商业分析:从数据到知识 / Paklin N. B., Oreshkov V. I. - 第二版。 — 圣彼得堡:彼得,2 年
5) 数据科学 从头开始的数据科学 / Joel Gras - 圣彼得堡:BHV Petersburg,2017
6) 数据科学专家实用统计 / P. Bruce、E. Bruce - 圣彼得堡:BHV Petersburg,2018
2. 讲座、课程(视频)
4)
3. 互联网资源
1)
2)
3)
4)
5)
6)
7)
8)