一、Logistics回归原理
Logistic回归的原理是基于Logistic函数,该函数能够将连续的值转换成0或1的概率。回归模型使用自变量的线性组合来预测因变量的对数几率。
逻辑斯蒂函数表达式:
二、Logistics回归的优化方法
梯度下降法:
逻辑斯蒂回归的优化通常使用梯度下降法。梯度下降法是一种常用的迭代优化算法,用于最小化目标函数,通过沿着目标函数下降最快的方向来更新模型参数。在逻辑斯蒂回归中,我们的目标是最小化损失函数,通常使用交叉熵损失函数。
梯度下降法的基本思想是不断迭代更新模型参数,使目标函数值减小。在逻辑斯蒂回归中,我们通过计算损失函数对模型参数的偏导数(即梯度),然后沿着梯度的反方向更新模型参数,以期望找到最优的参数值。
可以使用以下的迭代公式: θ := θ - α * ∇J(θ) 其中,θ 是模型参数(如回归系数),α 是学习率,∇J(θ) 是损失函数 J 对参数θ 的梯度。
三、sigmoid函数
sigmoid函数具体定义如下:
转化为逻辑斯蒂回归函数后可变为:
w是模型的参数权重,x是输入的特征向量
描述Sigmoid函数的图像如下
使用Sigmoid函数的优势:
1.Sigmoid函数将模型的线性输出转换为0到1之间的概率值,这符合逻辑回归模型最初的设计目的。通过这种转换,我们能够直观地理解模型对于不同样本的分类概率。
2.直观地解释为属于某一类别的概率,这对于解释模型预测结果非常有帮助。
3.特别适用于二分类问题,模型能够输出每个样本属于某个类别的概率。
四、逻辑斯蒂回归实现分类问题
以下是实现逻辑斯蒂回归分类问题的示例代码:
import numpy as np
import matplotlib.pyplot as plt
# 生成示例数据
np.random.seed(0)
mean1 = np.array([1, 2])
mean2 = np.array([4, 5])
cov = np.array([[1, 0.5], [0.5, 1.2]])
X1 = np.random.multivariate_normal(mean1, cov, 100)
X2 = np.random.multivariate_normal(mean2, cov, 100)
X = np.vstack((X1, X2))
y = np.hstack((np.zeros(100), np.ones(100)))
# 绘制原始数据散点图
plt.figure(figsize=(8, 6))
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Paired, edgecolors='k')
# 定义逻辑斯蒂回归模型
class LogisticRegression:
def __init__(self, learning_rate=0.01, num_iterations=1000):
self.learning_rate = learning_rate
self.num_iterations = num_iterations
def sigmoid(self, z):
return 1 / (1 + np.exp(-z))
def fit(self, X, y):
self.theta = np.zeros(X.shape[1] + 1) # 增加一维给偏置项
m = X.shape[0]
X = np.c_[np.ones(X.shape[0]), X] # 增加一列偏置项
for _ in range(self.num_iterations):
z = np.dot(X, self.theta)
h = self.sigmoid(z)
gradient = np.dot(X.T, (h - y)) / m
self.theta -= self.learning_rate * gradient
def predict(self, X):
X = np.c_[np.ones(X.shape[0]), X] # 增加一列偏置项
z = np.dot(X, self.theta)
return self.sigmoid(z)
# 训练逻辑斯蒂回归模型
model = LogisticRegression()
model.fit(X, y)
# 绘制分类线
x_vals = np.array([np.min(X[:, 0]), np.max(X[:, 0])])
y_vals = -(model.theta[0] + model.theta[1] * x_vals) / model.theta[2]
plt.plot(x_vals, y_vals, '-r', label='Decision Boundary')
plt.xlabel('X1')
plt.ylabel('X2')
plt.title('Logistic Regression Classifier')
plt.legend()
plt.show()
运行结果
可以看出,分类线将两种类别大致地分开了
五、总结
Logistic回归是一种简单而高效的分类算法,实现起来相对容易,并且在处理大规模数据集时也具有很好的性能。而且能够输出样本属于某个类别的概率,这使得模型的预测结果具有很好的解释性,可以用作风险评估或决策支持。