目录
初识逻辑回归
逻辑回归实操
分类评估方法
初识逻辑回归
逻辑回归(LogisticRegression)是机器学习中的一种分类模型,逻辑回归是一种分类算法,虽然名字中带有回归,但是它与回归之间有一定的联系。由于算法的简单和高效,在实际中应用非常广泛。
逻辑回归就是解决二分类问题的利器,以下是逻辑回归的应用场景:
1)广告点击率 2)是否为垃圾邮件 3)是否患病 4)金融诈骗 5 )虚假账号
逻辑回归原理:逻辑回归是一种常用于解决二分类问题的统计学习方法。它的原理基于以下几个关键概念:
假设函数:逻辑回归的输入值就是一个线性回归的结果:
Sigmoid 函数:sigmoid 函数是一种常用的激活函数,它将任意实数映射到 (0, 1) 的区间内。它的定义如下:
回归的结果输入到sigmoid函数当中,其输出结果:[0,1]区间中的一个概率值,默认为0.5为阈值
逻辑回归最终的分类是通过属于某个类别的概率值来判断是否属于某个类别,并且这个类别默认标记为1(正例),另外的一个类别会标记为0(反例)。 (方便损失计算)
输出结果解释(重要):假设有两个类别A,B,并且假设我们的概率值为属于A(1)这个类别的概率值。现在有一个样本的输入到逻辑回归输出结果0.55,那么这个概率值超过0.5,意味着我们训练或者预测的结果就是A(1)类别。那么反之,如果得出结果为0.3那么,训练或者预测结果就为B(0)类别。
关于逻辑回归的阈值是可以进行改变的,比如上面举例中,如果你把阈值设置为0.6,那么输出的结果0.55,就属于B类。
损失函数:逻辑回归使用最大似然估计来确定模型的参数。为了最大化似然函数,通常采用对数似然损失函数(log-likelihood loss),逻辑回归的损失,称之为对数似然损失,公式如下:
其中y为真实值,hθ(x)为预测值。
无论何时,我们都希望损失函数值,越小越好。分情况讨论,对应的损失函数值:
接下来我们进行举例:
接下来我们呢就带入上面那个例子来计算一遍,就能理解意义了:
逻辑回归实操
接下来通过肿瘤预测案例,学会如何使用逻辑回归对模型进行训练,原始数据的下载地址大家可以参考:网址 ,里面有众多数据集供大家训练,大家根据自身情况进行选择:
本次使用的数据集描述:
1)699条样本,共11列数据,第一列用语检索的id,后9列分别是与肿瘤相关的医学特征,最后一列表示肿瘤类型的数值。
2)包含16个缺失值,用"?"标出。
下面这段代码是一个使用逻辑回归进行二分类问题预测的示例:
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
# 获取数据
names = ['Sample code number', 'Clump Thickness', 'Uniformity of Cell Size', 'Uniformity of Cell Shape',
'Marginal Adhesion', 'Single Epithelial Cell Size', 'Bare Nuclei', 'Bland Chromatin',
'Normal Nucleoli', 'Mitoses', 'class']
data = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data", names=names)
# 基本数据处理
data = data.replace(to_replace="?", value=np.nan) # 缺失值处理
data = data.dropna()
x = data.iloc[:, 1: -1] # 确定特征值
y = data["class"] # 确定目标值
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=22) # 分割数据
# 特征工程标准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.fit_transform(x_test)
# 机器学习(逻辑回归)
estimator = LogisticRegression()
estimator.fit(x_train, y_train)
# 模型评估
ret = estimator.score(x_test, y_test) # 准确率
print("准确率为: \n", ret)
y_pre = estimator.predict(x_test) # 预测值
print("预测值为: \n", y_pre)
它主要涉及到数据获取、基本数据处理、数据集划分、特征工程标准化、机器学习(逻辑回归)和模型评估等步骤。通过这个示例,可以学习到如何使用逻辑回归模型进行二分类问题的预测。
分类评估方法
在逻辑回归中,分类评估方法是用来评估模型在分类问题中的性能和准确度的一种方法。在分类任务下,预测结果(PredictedCondition)与正确标记(TrueCondition)之间存在四种不同的组合,构成混淆矩阵(适用于多分类):
以下是一些常见的分类评估方法:
精确率:表示模型预测为正例的样本中真正为正例的比例,即在所有预测为正例的样本中,有多少是真正的正例。精确率可以用来评估模型的预测结果中的假阳性率。
召回率:表示模型成功预测为正例的样本占所有实际正例的比例,即在所有实际为正例的样本中,有多少被成功预测为正例。召回率可以用来评估模型的预测结果中的假阴性率。
接下来我们对上文的案例进行一个精确率与召回率的测试,导入如下库:
from sklearn.metrics import classification_report
然后我们测试精确率与召回率:
最终得到的结果如下:
F1 分数(F1-Score):F1 分数是精确率和召回率的调和平均值,它综合考虑了精确率和召回率的性能指标。F1 分数越高,说明模型的综合性能越好。
ROC 曲线和 AUC:ROC 曲线(Receiver Operating Characteristic Curve)是以真正例率(True Positive Rate,TPR)为纵轴,假正例率(False Positive Rate,FPR)为横轴绘制的曲线。ROC 曲线可以用来评估二分类模型在不同阈值下的性能表现。AUC(Area Under the Curve)是 ROC 曲线下的面积,用来衡量模型分类性能的一个综合指标。AUC 值越大,说明模型的分类性能越好。
ROC曲线的横轴就是FPRate,纵轴就是TPRate,当二者相等时,表示的意义则是:对于不论真实类别是1还是0的样本,分类器预测为1的概率是相等的,此时AUC为0.5
AUC指标:
1)AUC的概率意义是随机取一对正负样本,正样本得分大于负样本得分的概率
2)AUC的范围在[0,1]之间,并且越接近1越好,越接近0.5属于乱猜
3)AUC=1,完美分类器,采用这个预测模型时,不管设定什么阈值都能得出完美预测。绝大多数预测的场合,不存在完美分类器。
4)0.5<AUC<1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。
我们在上一个案例中导入如下第三方库进行auc计算:
from sklearn.metrics import roc_auc_score
最终打印的结果如下: