机器学习-逻辑斯蒂回归

一、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回归是一种简单而高效的分类算法,实现起来相对容易,并且在处理大规模数据集时也具有很好的性能。而且能够输出样本属于某个类别的概率,这使得模型的预测结果具有很好的解释性,可以用作风险评估或决策支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值