目录
前言
逻辑回归是一种常用的机器学习算法,用于解决分类问题。它的名字可能会让人误解,因为它实际上是一种用于分类而不是回归的算法。在我们现实生活中逻辑回归可以用于疾病预测, 信贷风险评估, 股票市场预测,用户行为分析等等
一、逻辑回归是什么?
逻辑回归是一种广义的线性模型,主要用于二分类问题的预测和分析。它通过将输入特征与一个或多个权重相乘,然后将结果传递给一个逻辑函数(如Sigmoid函数),以预测输入属于某个类别的概率。在训练过程中,逻辑回归会调整权重,使得模型能够更好地预测类别。在本文中用到的是Logistic回归与Sigmoid函数
二、Sigmoid
Sigmoid函数是一个广泛应用于数学、统计学和机器学习领域的函数,它将任意实数映射到(0,1)区间内的一个概率值。Sigmoid函数也被称为逻辑函数,因为它在逻辑回归(Logistic Regression)模型中扮演着核心角色。
公式:
在不同坐标尺度下Sigmoid的图像也不相同
如图
图1 图2 图3
-
由图我们可以看出来图1在x=0时Sigmoid像跃迁函数,图2则较为平滑,图3则为一条直线
-
所以为了实现logistic分类器,我们可以在每个特征上乘以一个回归系数,并把这个总和代入Sigmoid,可以得出一个范围在0~1之间的数值,然后根据自己的设计让 数值<0.5归为0类,大于的则为1类。
三、回归系数
由上节我们可以知道·我们需要确定一个好的回归系数让我们预测模型变得准确
我们可以先把Sigmoid的输入记为z
()
为了可以找到最佳参数本文中使用的是梯度上升算法
四、梯度上升算法
梯度上升算法(Gradient Ascent Algorithm)是一种优化算法,用于最大化一个函数的取值,通常用于求解最优化问题
把梯度记为,则
如图
梯度算法
如图梯度算法每当一个新的点就会重新计算移动方向,从p0开始,计算完该点的梯度,函数会根据这个梯度继续移动到p1,以此迭代直到满足停止条件。从图中p0到p1是函数增长最快的方向,p0 到p1移动量我们称为步长,记为 然后可以得到
五.代码实战
1.数据导入
# 生成随机数据集
np.random.seed(0)
num_samples = 100
mean_class_0 = [2, 2]
mean_class_1 = [-2, -2]
cov = [[1.5, 0.5], [0.5, 1.5]]
x_class_0 = np.random.multivariate_normal(mean_class_0, cov, num_samples)
x_class_1 = np.random.multivariate_normal(mean_class_1, cov, num_samples)
X = np.vstack((x_class_0, x_class_1))
y = np.concatenate((np.zeros(num_samples), np.ones(num_samples)))
2.主要算法
#定义sigmoid
def sigmoid(z):
z = np.clip(z, -500, 500)
return 1 / (1 + np.exp(-z))
# 定义梯度上升算法
def gradient_ascent(X, y, learning_rate, num_iterations):
num_samples, num_features = X.shape
weights = np.zeros(num_features)
for _ in range(num_iterations):
z = np.dot(X, weights)
h = sigmoid(z)
# 计算梯度
gradient = np.dot(X.T, (h - y)) / num_samples
weights += learning_rate * gradient
return weights
3.效果图
原始散点图 分类后
可能是因为使用随机数据集的关系导致分类标签较为混乱,从而导致模型预测准确率较低
总结
由于本次实验数据集是随机生成的,没有现实世界的特定背景。但通过随机生成数据,可以控制数据的属性和标签,以更好地理解模型性能和影响因素。通过本次实验学会逻辑回归,并且学会新的优化算法——梯度上升算法还有sigmoid函数,将两者结合起来实现一个简单的实验