分类算法 之 逻辑回归--理论+案例+代码

分类算法 之 逻辑回归–理论+案例+代码

标签(空格分隔): SPARK机器学习


1. 逻辑回归概述

1.1 概述

逻辑回归与线性回归类似,但它不属于回归分析家族(主要为二分类),而属于分类家族,差异主要在于变量不同,因此其解法与生成曲线也不尽相同。

逻辑回归是无监督学习的一个重要算法,对某些数据与事物的归属(分到哪个类别)及可能性(分到某一类别的概率)进行评估。

1.2 使用

在医学界,广泛应用于流行病学中,比如探索某个疾病的危险因素,根据危险因素预测疾病是否发生,与发生的概率。
比如探讨胃癌,可以选择两组人群,一组是胃癌患者,一组是非胃癌患者。因变量是“是否胃癌”,这里“是”与“否”就是要研究的两个分类类别。自变量是两组人群的年龄,性别,饮食习惯,等等许多(可以根据经验假设),自变量可以是连续的,也可以是分类的。

在金融界,较为常见的是使用逻辑回归去预测贷款是否会违约,或放贷之前去估计贷款者未来是否会违约或违约的概率。

在消费行业中,也可以被用于预测某个消费者是否会购买某个商品,是否会购买会员卡,从而针对性得对购买概率大的用户发放广告,或代金券等等,进行精准营销。

2. 逻辑分布(Logistic distribution)

设X是连续随机变量,X服从逻辑分布式指X具有下列分布函数和密度函数:

2.1 分布函数

QQ截图20160130063505.png-12.8kB

上述公式中,QQ截图20160130063924.png-2.6kB是一个标准化的过程,μ是均值(位置参数,决定分布的位置),QQ截图20160130064041.png-0.6kB是标准差(形状参数,标准差越大则分布曲线越扁平,分布越不集中)

QQ截图20160130064234.png-9.3kB

上图为逻辑分布函数的图形,是一条S型曲线(sigmoid curve)。该曲线以点(μ,1/2)为中心对称。曲线在中心附近增长速度较快,在两端增长速度较慢,形状参数的值越小,曲线在中心附近增长得就越快。

2.2 密度函数

密度函数是分布函数的一阶求导,公式与图形如下:

QQ截图20160130064800.png-15.6kB

QQ截图20160130064848.png-11.5kB

3. 二项逻辑回归模型(binomial logistic regression model)

二项逻辑回归模型是一种分类模型,有条件概率分布P(Y/X)表示,X为取数为实数,Y取值为0或1。研究已知X,求Y为1或0的概率。

3.1 二项逻辑回归模型

模型:

QQ截图20160130065802.png-30.1kB

上述公式中,分别表示Y=1和Y=0的概率,Y是输出。
其中,x为输入变量,在机器学习中我们一般称之为feature,特征;w和b为参数,是我们接下来要去估计的,w为权值向量,b为偏置向量,w*x为w与x的内积。
根据以上公式,估计出参数后,输入已知的x值,便可以求出Y为1或0的概率了。两个概率相加为1.
逻辑回归会比较两个概率值的大小,然后将实例X分到概率较大的类别中。

简化模型:
有时,为了方便,我们将权值向量与输入向量将以扩充,即
w=(w0,w2,w3,…,wn,b)^T;
x=(x1,x2,x3,…,xn,1)^T.
^T表示矩阵的转置,那么上述模型可以简写为:

QQ截图20160130070855.png-27.6kB

通常情况下,为了更简单只管,我们用z=w*x,那么模型

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
梯度上升算法是一种常用的优化算法,可以用来求解逻辑回归模型的参数。以下是一个逻辑回归算法案例的实现过程: 假设我们有一个数据集,其中包含两个特征 x1 和 x2,以及一个二元分类标签 y。我们的目标是通过这个数据集来训练一个逻辑回归模型,预测新的数据点的分类标签。 首先,我们需要定义逻辑回归模型的假设函数: h(x) = 1 / (1 + exp(-z)) 其中,z 是一个线性组合,可以表示为: z = w0 + w1 * x1 + w2 * x2 w0,w1,w2 是我们需要学习的模型参数。 我们使用最大似然估计来确定模型参数。对于给定的训练集,似然函数可以表示为: L = ∏[h(xi)]^yi * [1 - h(xi)]^(1-yi) 对数似然函数可以表示为: l(w) = log(L) = ∑[yi * log(h(xi)) + (1-yi) * log(1-h(xi))] 我们的目标是最大化对数似然函数,即最小化负对数似然函数: J(w) = -l(w) = -∑[yi * log(h(xi)) + (1-yi) * log(1-h(xi))] 使用梯度上升算法来最小化 J(w)。对于每个参数 wj,我们可以使用以下更新规则: wj := wj + α * ∂J(w) / ∂wj 其中,α 是学习率。对于逻辑回归模型,∂J(w) / ∂wj 可以表示为: ∂J(w) / ∂w0 = ∑[h(xi) - yi] ∂J(w) / ∂w1 = ∑[(h(xi) - yi) * x1i] ∂J(w) / ∂w2 = ∑[(h(xi) - yi) * x2i] 下面是一个 Python 实现,使用梯度上升算法来训练逻辑回归模型: ```python import numpy as np def sigmoid(z): return 1 / (1 + np.exp(-z)) def gradient_ascent(X, y, alpha=0.01, num_iters=1000): m, n = X.shape weights = np.zeros(n) for i in range(num_iters): h = sigmoid(np.dot(X, weights)) error = h - y grad = np.dot(X.T, error) weights -= alpha * grad return weights # 生成数据集 X = np.array([[1, 2], [2, 3], [3, 4], [4, 5], [5, 6]]) y = np.array([0, 0, 1, 1, 1]) # 添加偏置项 X = np.column_stack((np.ones(len(X)), X)) # 训练模型 weights = gradient_ascent(X, y) # 预测新的数据点 x_new = np.array([1, 6, 7]) x_new = np.insert(x_new, 0, 1) pred = sigmoid(np.dot(x_new, weights)) print(pred) # 输出为 0.993 ``` 以上代码实现了一个简单的逻辑回归模型,使用梯度上升算法来训练模型参数,并使用训练好的模型来预测新的数据点的分类标签。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值