目录
5.2 精确率(Precision)与召回率(Recall)
1、逻辑回归的应用场景
- 广告点击率
- 是否为垃圾邮件
- 是否患病
- 金融诈骗
- 虚假账号
看到上面的例子,我们可以发现其中的特点,那就是都属于两个类别之间的判断。逻辑回归就是解决二分类问题的利器
2、 逻辑回归的原理
2.1 输入
线性回归的输出是逻辑回归的输入
2.2 激活函数
- sigmoid函数
- 线性回归的结果输入到sigmoid函数当中,得到逻辑回归的输出
- 输出结果:[0, 1]区间中的一个概率值,默认为0.5为阈值
通过设定阈值,将回归任务转化为分类问题
2.3 损失以及优化
对于线性回归模型可以采用 (预测值-真实值)^2/总数来决定。
而逻辑回归模型预测值/真实值为二分类,无法通过上述损失函数
2.3.1 损失
逻辑回归的损失,称之为 对数似然损失,公式如下:
由于将损失定义为分段函数,很难用梯度下降去优化,因此采用
2.3.2优化
使用梯度下降优化算法,去减少损失函数的值。这样去更新逻辑回归前面对应算法的权重参数, 提升原本属于1类别的概率,降低原本是0类别的概率。
3、逻辑回归API
from sklearn.linear_model import LogisticRegression
- LogisticRegression(solver=’liblinear’, penalty=’l2′, C = 1.0)
- solver:优化求解方式(默认开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数)
- SAG:根据数据集自动选择,随机平均梯度下降
- penalty:正则化的种类
- C:正则化力度
LogisticRegression方法相当于 SGDClassifier(loss=”log”, penalty=” “),SGDClassifier实现了一个普通的随机梯度下降学习,也支持平均随机梯度下降法(ASGD),可以通过设置average=True。而使用LogisticRegression(实现了SAG)
4, 案例:癌症分类预测-良/恶性乳腺癌肿瘤预测
原始数据的下载地址:https://archive.ics.uci.edu/ml/machine-learning-databases/
数据描述
(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
def logisticregression():
"""
逻辑回归进行癌症预测
:return: None
"""
# 1、读取数据,处理缺失值以及标准化
column_name = ['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=column_name)
# 删除缺失值
data = data.replace(to_replace='?', value=np.nan)
data = data.dropna()
# 取出特征值
x = data[column_name[1:10]]
y = data[column_name[10]]
# 分割数据集
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3)
# 进行标准化
std = StandardScaler()
x_train = std.fit_transform(x_train)
x_test = std.transform(x_test)
# 使用逻辑回归
lr = LogisticRegression()
lr.fit(x_train, y_train)
print("得出来的权重:", lr.coef_)
# 预测类别
print("预测的类别:", lr.predict(x_test))
# 得出准确率
print("预测的准确率:", lr.score(x_test, y_test))
return None
logisticregression()
5, 分类的评估方法
5.1 混淆矩阵
在分类任务下,预测结果(Predicted Condition)与正确标记(True Condition)之间存在四种不同的组合,构成混淆矩阵(适用于多分类)
5.2 精确率(Precision)与召回率(Recall)
- 精确率:预测结果为正例的样本中真实结果为正例的比例
- 召回率:真实结果为正例的样本中预测结果为正例的比例
5.2.3 分类评估报告API
from sklearn.metrics import classification_report
- classification_report (y_true, y_pred, labels=[], target_names=None )
- y_true:真实目标值
- y_pred:估计器预测目标值
- labels:指定类别对应的数字
- target_names:目标类别名称
- return:每个类别精确率与召回率
#预付报告
report=classification_report(y_test,y_predict,labels=[2,4],target_names=["良性","恶性"])
print(report)
5.3 ROC曲线与AUC指标
5.3.1 TPR与FPR
- TPR = TP / (TP + FN)—-召回率
- 所有真实类别为1的样本中,预测类别为1的比例
- FPR = FP / (FP + FN)
- 所有真实类别为0的样本中,预测类别为1的比例
5.3.2 ROC曲线
ROC曲线的横轴就是FPRate,纵轴就是TPRate,当二者相等时,表示的意义则是:对于不论真实类别是1还是0的样本,分类器预测为1的概率是相等的,此时AUC为0.5
5.3.3 AUC指标
ROC曲线下面区域的面积
- AUC = 1,是完美分类器,采用这个预测模型时,存在至少一个阈值能得出完美预测。但绝大多数预测的场合,不存在完美分类器。
- 0.5 < AUC < 1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。
- AUC = 0.5,跟随机猜测一样(例:丢铜板),模型没有预测价值。
- AUC < 0.5,比随机猜测还差;但只要总是反向预测而行,就优于随机猜测
5.3.4 API
from sklearn.metrics import roc_auc_score
- sklearn.metrics.roc_auc_score(y_true, y_score)
- 计算ROC曲线面积,即AUC值
- y_true:每个样本的真实类别,必须为0(反例),1(正例)
- y_score:每个样本预测的概率值
5.3.5、总结
- AUC只能用来评价二分类
- AUC非常适合评价样本不平衡中的分类器性能
Original: https://blog.csdn.net/zcolaz/article/details/123637841
Author: 荷泽泽
Title: 回归与聚类算法————分类算法-逻辑回归与二分类
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/631522/
转载文章受原作者版权保护。转载请注明原作者出处!