逻辑回归 Logistic Regression
前言
逻辑回归是机器学习中有监督学习的解决分类任务的一种算法。
什么是逻辑回归
分类任务的目标是引入一个函数,将观测值映射到与之相关联的类或标签。逻辑回归主要解决二分类问题,通常称为正向类和负向类。被解释变量描述了结果是正向情况的概率,如果该概率等于或大于一个用来区分的阈值(通常是0.5),则被预测为正向类,否则被预测为负向类。
在逻辑回归建模中,被解释变量使用逻辑函数(又被称为Sigmoid函数)建模,形成一个特征变量的线性组合函数。逻辑函数总是返回一个0~1之间的值。
逻辑回归的优点和缺点
- 优点:
- 简单易懂:逻辑回归模型简单,易于理解和实现。
- 计算速度快:逻辑回归模型的计算速度较快,适用于大规模数据集。
- 可解释性强:逻辑回归模型的系数具有明确的物理或经济意义,可以解释自变量对分类结果的影响。
- 可以处理非线性关系:逻辑回归模型可以使用多项式、交互项等方法处理自变量和因变量之间的非线性关系。
- 概率输出:逻辑回归模型可以输出分类结果的概率,可以用于评估分类结果的置信度。
- 二元分类和多元分类:逻辑回归模型可以用于二元分类和多元分类问题,可以通过softmax函数实现多元分类。
- 可以进行特征选择:逻辑回归模型可以使用L1正则化方法进行特征选择,提高模型的泛化能力和解释性。
- 可以处理缺失值:逻辑回归模型可以处理缺失值,可以使用插值、删除等方法进行缺失值处理
- 缺点:
- 对异常值敏感:逻辑回归模型对异常值敏感,可能会导致模型的不稳定性和预测结果的不准确性。
- 假设限制:逻辑回归模型假设自变量和因变量之间存在线性关系,且误差项服从二项分布,这些假设可能在实际问题中不成立。
- 容易发生过拟合:当自变量过多或存在多重共线性问题时,逻辑回归模型容易发生过拟合,导致模型的泛化能力下降。
- 难以处理不平衡数据:当分类结果不平衡时,逻辑回归模型可能会出现预测偏差,需要使用类别平衡技术进行优化。
需要注意的是,在实际应用中,逻辑回归模型通常会和其他模型结合使用,以提高预测准确率。同时,为了解决模型假设限制和异常值等问题,可以使用正则化方法和异常值检测方法等技术进行优化。
逻辑回归的应用场景
逻辑回归模型主要用于解决二分类问题,即将样本分为两个类别,因此适合于以下应用场景:
- 医学领域:例如预测患者是否患有某种疾病、预测药物是否有效等。
- 金融领域:例如预测客户是否会违约、预测信用卡交易是否为欺诈等。
- 市场营销:例如预测客户是否会购买某种产品、预测客户的忠诚度等。
- 安全领域:例如预测网络攻击是否发生、预测入侵检测结果等。
- 社会科学:例如预测人口普查数据中某个人是否有高等教育、是否有工作等。
- 教育研究:例如预测学生是否能够通过考试、是否会选择某个专业等。
- 自然语言处理:例如预测文本中的情感极性、文本是否属于某个类别等。
- 生物医学:例如预测细胞是否为恶性细胞、预测药物对细胞的影响等。
- 环境科学:例如预测某种污染物是否超标、是否会对环境造成危害等。
- 工业制造:例如预测产品的合格率、是否需要进行维修等。
- 交通运输:例如预测交通事故是否会发生、预测交通拥堵情况等
除了二分类问题,逻辑回归模型还可以扩展到多分类问题,即将样本分为多个类别。例如在图像识别中,可以使用逻辑回归模型将图像分为多个类别,如动物、交通工具等。
构建逻辑回归模型的注意事项
-
解释变量可以是连续的数值变量,或分类变量,但被解释变量是二分类的离散变量
-
样本数据不均衡问题的解决方案
-
调整分类阈值,使得更倾向于样本少的类别
-
选择合适的评估标准,比如ROC或者F1-score,而不是准确度accuracy
-
目标变量样本不均衡时的采样方法,有欠采样undersampling和过采样oversampling两种
- 过采样:重复正样本数据,会放大正比例噪声对模型的影响; SMOTE/Borderline-SMOTE/ADASYN
- 欠采样:丢弃大量数据,会存在过拟合的问题; EasyEnsemble/BalanceCascade
数据合成:SMOTE(Synthetic Minority Oversampling Technique),是对少数样本进行分析并根据少数样本人工合成新样本添加到数据中。
逻辑回归模型的评价指标
分类模型(不限于逻辑回归)的常用评价指标如下:
- 准确率(Accuracy)是指分类正确的样本数占总样本数的比例,用来衡量模型的分类准确度。
- 精确率(Precision)是指分类为正类的样本中,实际为正类的样本数占分类为正类的样本数的比例,用来衡量模型对正类的分类准确度。
- 召回率(Recall)是指实际为正类的样本中,被分类为正类的样本数占实际为正类的样本数的比例,用来衡量模型对正类的识别能力。
- F1 分数(F1-score)是精确率和召回率的调和平均数,用来综合衡量模型的分类准确度和识别能力。
- ROC 曲线和 AUC 值是用来评估二元分类器性能的常用指标。ROC 曲线是以假正率(False Positive Rate,FPR)为横轴,真正率(True Positive Rate,TPR)为纵轴,绘制出来的曲线。AUC 值是 ROC 曲线下面积的大小,取值范围为 0~1,AUC 值越大,说明分类器的性能越好。
需要注意的是,精确率和召回率是有一定关系的,一般来说,当精确率高时,召回率可能会偏低,当召回率高时,精确率可能会偏低。因此,在实际应用中需要根据具体情况选择合适的指标。
python实现逻辑回归建模的方法
Python中有多个库可以实现逻辑回归,以下是其中比较常用的几个库:
- scikit-learn:scikit-learn是Python中常用的机器学习库,其中包含了多个分类模型,包括逻辑回归、决策树、随机森林等。
- statsmodels:statsmodels是Python中的统计分析库,其中包含了多个分类模型,包括逻辑回归、Probit回归等。
- TensorFlow:TensorFlow是Google开发的深度学习框架,其中也包含了逻辑回归模型。
- PyTorch:PyTorch是另一个常用的深度学习框架,其中也包含了逻辑回归模型。
- Keras:Keras是一个高级神经网络API,可以在多个深度学习框架上运行,其中也包含了逻辑回归模型。
- Theano:Theano是另一个深度学习框架,其中也包含了逻辑回归模型。
- pandas:pandas是Python中常用的数据处理库,其中也包含了逻辑回归模型。
以上这些库都提供了丰富的接口和功能,可以满足不同场景下的需求。需要注意的是,在使用这些库时,需要根据具体情况选择合适的模型、参数和评估指标,以获得更好的预测效果。
python实现逻辑回归建模的示例
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
# 准备数据集
X = data[['age', 'gender', 'income', 'purchase_history']]
y = data['purchase']
# 特征工程
# 对性别进行数值化处理
X['gender'] = X['gender'].map({'male': 0, 'female': 1})
# 拆分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 训练模型
model = LogisticRegression()
model.fit(X_train, y_train)
# 模型评价:使用测试集对模型进行评价,常见的评价指标包括准确率、精确率、召回率、F1值等。
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
# 预测测试集
y_pred = model.predict(X_test)
# 计算评价指标
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)
f1 = f1_score(y_test, y_pred)
print("准确率:", accuracy)
print("精确率:", precision)
print("召回率:", recall)
print("F1值:", f1)
逻辑回归模型的参数
LogisticRegression()的常见模型参数:
-
penalty(正则化项):用于控制模型的复杂度,并防止过拟合。可以取值为"l1"、“l2”、“elasticnet"和"none”。默认值为"l2"。其中,"l1"表示L1正则化,"l2"表示L2正则化,"elasticnet"表示弹性网络正则化,"none"表示没有正则化。
-
C(正则化强度的倒数):C越小,正则化强度越大,模型越趋向于简单;C越大,正则化强度越小,模型越趋向于复杂。默认值为1.0。
-
fit_intercept(是否拟合截距):如果为True,模型会拟合截距;如果为False,模型不会拟合截距。默认值为True。
-
class_weight(类别权重):用于处理不平衡数据集的权重设置。可以指定不同类别的权重,以调整模型对不同类别的关注程度。默认值为None,即所有类别的权重相等。
-
solver(优化算法):用于求解模型参数的优化算法。可以取值为"newton-cg"、“lbfgs”、“liblinear”、“sag"和"saga”。默认值为"lbfgs"。不同的优化算法适用于不同规模的数据集和问题。
-
max_iter(最大迭代次数):模型的最大迭代次数。默认值为100。
-
multi_class(多类别处理方式):用于指定多类别问题的处理方式。可以取值为"auto"、“ovr"和"multinomial”。默认值为"auto"。"auto"会根据数据自动选择处理方式,"ovr"表示使用一对多策略,"multinomial"表示使用多项逻辑回归策略。
总结
本文主要介绍了逻辑回归的基本概念,优缺点,应用场景,python实现建模的方法,建模的示例,模型参数等