目录
1、介绍
2、原理
输入
激活函数
3、损失及其优化
损失函数
优化
4、API
5、案例:乳腺癌肿瘤预测
数据集
代码
作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发、数据结构和算法,初步涉猎Python人工智能开发。
主页:@逐梦苍穹
回归与聚类算法系列
⭐①:概念简述
⭐②:线性回归
⭐③:欠拟合与过拟合
⭐④:岭回归
您的一键三连,是我创作的最大动力
目标
说明逻辑回归的损失函数
说明逻辑回归的优化方法
说明sigmoid函数
知道逻辑回归的应用场景
知道精确率、召回率指标的区别
知道F1-score指标说明召回率的实际意义
说明如何解决样本不均衡情况下的评估
了解ROC曲线的意义说明AUC指标大小
应用classification_report实现精确率、召回率计算
应用roc_auc_score实现指标计算
应用:癌症患者预测
逻辑回归(Logistic Regression)是一种在统计学和机器学习领域常用于解决二分类问题的模型。它虽然带有“回归”这个名字,但实际上用于分类任务。以下是逻辑回归与二分类问题的专业介绍:
1. 逻辑回归模型:
2. 二分类问题:
3. 逻辑回归在二分类中的应用:
总之,逻辑回归是一种强大的工具,用于解决二分类问题,并且在理解分类问题、评估模型性能和实际应用中都具有重要作用。
逻辑回归的输入就是一个线性回归的结果
逻辑回归使用逻辑函数,也称为Singmoid函数,来建模输入特征与输出的关系。
Sigmoid函数的数学表达式:
其中,z 是输入的线性组合,即:
在这里:
逻辑回归最终的分类是通过属于某个类别的概率值来判断是否属于某个类别,
并且这个类别默认标记为1(正例),另外的一个类别会标记为0(反例)。(方便损失计算)
之前的线性回归预测结果我们用均方误差衡量,那如果对于逻辑回归,我们预测的结果不对该怎么去衡量这个损失呢?我们来看这样一张图:
逻辑回归的损失,称之为对数似然损失,公式如下:
②综合完整损失函数:
当y=1时:
同样使用梯度下降优化算法,去减少损失函数的值。
这样去更新逻辑回归前面对应算法的权重参数,提升原本属于1类别的概率,降低原本是0类别的概率。
sklearn.linear_model.LogisticRegression(solver='liblinear', penalty='l2', C = 1.0)
solver:优化求解方式(默认开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数)
sag:根据数据集自动选择,随机平均梯度下降
penalty:正则化的种类
C:正则化力度
默认将类别数量少的当做正例
LogisticRegression方法相当于 SGDClassifier(loss="log", penalty=" "),SGDClassifier实现了一个普通的随机梯度下降学习,也支持平均随机梯度下降法(ASGD),可以通过设置average=True。
而使用LogisticRegression(实现了SAG)
原始数据的下载地址:https://archive.ics.uci.edu/ml/machine-learning-databases/
数据描述
(1)699条样本,共11列数据,第一列用语检索的id,后9列分别是与肿瘤
相关的医学特征,最后一列表示肿瘤类型的数值。
(2)包含16个缺失值,用"?"标出。
分析:
源码:
# -*- coding: utf-8 -*-
# @Author:︶ㄣ释然
# @Time: 2023/9/12 21:45
import pandas as pd
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
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))
if __name__ == '__main__':
logisticregression()
运行结果: