逻辑回归logistic

逻辑回归(Logistic Regression)是一种用于解决二分类(0/1)问题的统计学习方法。虽然它名为“回归”,但实际上它是一种分类方法,因为它预测的是样本属于某个类别的概率。逻辑回归通过引入逻辑函数(Sigmoid函数)来将线性回归的输出映射到[0, 1]区间,从而得到属于某个类别的概率。

一、逻辑回归的基本步骤

1.构建模型
逻辑回归模型假设输入变量与输出变量之间存在线性关系,即y = w_{0} + w_{1}*x_{1} + w_{2}*x_{2} + ...+ w_{n}*x_{n}。但这个线性关系需要通过逻辑函数(Sigmoid函数)进行转换,以得到属于某个类别的概率。

Sigmoid函数的形式为:sigmoid(z) = 1/(1 + exp(-z)),其中 z 是线性回归的输出。

2.训练模型
使用训练数据来估计模型参数(权重 w和截距 w0)。这通常通过最小化损失函数(如交叉熵损失函数)来完成,该损失函数衡量了模型预测与真实标签之间的差异。

损失函数的形式为:L(w) = - ∑ [y_i * log(p_i) + (1 - y_i) * log(1 - p_i)],其中 y_i 是真实标签,p_i 是模型预测的属于正类的概率。

最小化损失函数通常使用梯度下降或其变种(如随机梯度下降、批量梯度下降、Adam等)来进行。

3.评估模型
使用测试数据来评估模型的性能。常见的评估指标包括准确率、精确率、召回率、F1分数和AUC-ROC等。

4.预测
使用训练好的模型对新的、未见过的数据进行预测。

二、Sigmoid函数

sigmoid函数公式:    g(z)=\frac{1}{1+e^{-z}}

其函数曲线如下:


y=g(w^{T}x+b)    代入  g(z)=\frac{1}{1+e^{-z}} 

得   y=\frac{1}{1+e^{-(w^{T}x+b)}}    其中x是我们的输入,w和b为我们要求取的参数

# sigmoid函数
def sigmoid(inX):
    return 1.0 / (1 + exp(-inX))

梯度上升算法:

# 梯度上升算法
def gradAscent(dataMat, classLabels):                            # dataMat数据集、classLabels数据标签
    dataMatrix = mat(dataMat)                                    # 转换为NumPy矩阵
    labelMat = mat(classLabels).transpose()                        # 转换为NumPy矩阵,并且矩阵转置
    m, n = shape(dataMatrix)                                       # 获取数据集矩阵的大小,m为行数,n为列数
    alpha = 0.001                                                  # 目标移动的步长
    maxCycles = 500                                                # 迭代次数
    weights = ones((n, 1))                                         # 权重初始化为1
    for k in range(maxCycles):                                     # 重复矩阵运算
        h = sigmoid(dataMatrix * weights)                          # 矩阵相乘,计算sigmoid函数
        error = (labelMat - h)                                     # 计算误差
        weights = weights + alpha * dataMatrix.transpose() * error # 矩阵相乘,更新权重
    return weights

三、逻辑回归例子(简单)

1.导入库:这里我们导入了train_test_split用于分割数据集,LogisticRegression用于创建逻辑回归模型,accuracy_score用于评估模型准确度,以及pandas用于数据加载和处理。

from sklearn.model_selection import train_test_split  
from sklearn.linear_model import LogisticRegression  
from sklearn.metrics import accuracy_score  
import pandas as pd

2.加载数据集:我们使用pandas的read_csv函数加载CSV文件,并设最后一列是标签。
数据集分割:我们将数据集分割为训练集和测试集。训练集用于训练模型,测试集用于评估模型性能。

age(年龄)、sex(性别,女生0,男生1)、income(收入,高收入3,中等收入2,低收入1)和一个目标变量purchased(是否购买,目标变量是一个二元分类变量,取值为yes或no)

data = pd.read_csv('D:\zy\机器学习\dataset.csv')  
  
# 最后一列是目标变量,其余列是特征  
X = data.iloc[:, :-1]  # 除了最后一列的所有列(特征)  
y = data.iloc[:, -1]   # 最后一列(标签)

3.创建逻辑回归模型:我们使用LogisticRegression类初始化一个逻辑回归模型。

训练模型:我们使用训练数据(X_trainy_train)拟合模型。

# 初始化逻辑回归模型  
model = LogisticRegression()  
# 使用训练数据拟合模型  
model.fit(X_train, y_train)

5.预测:我们使用训练好的模型对测试集进行预测。评估模型:我们使用accuracy_score函数计算模型的准确度,并将结果打印出来。

# 对测试集进行预测并使用准确度评估模型性能
y_pred = model.predict(X_test)  
accuracy = accuracy_score(y_test, y_pred)  
print(f'Accuracy: {accuracy}')  

7.进一步分析:你可以根据需要对模型进行进一步的分析,例如查看系数和截距,计算混淆矩阵,绘制ROC曲线等。

print('Coefficients:', model.coef_)  #系数
print('Intercept:', model.intercept_)  #截距

四、逻辑回归的优缺点

  • 优点
    • 实现简单,计算效率高。
    • 可以给出分类的概率预测,而不仅仅是类别标签。
    • 对线性关系敏感,能够很好地处理线性可分问题。
    • 可解释性强,可以清晰地看到每个特征对最终预测结果的影响。
  • 缺点
    • 对非线性问题处理能力有限,需要进行特征工程或使用其他模型(如决策树、神经网络)来处理非线性关系。
    • 对特征间的相关性敏感,如果特征之间存在多重共线性,可能会影响模型的性能。
    • 对缺失值和异常值敏感,需要进行适当的数据预处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值