热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Pythonscikitlearn,二分类,逻辑回归,LogisticRegression

逻辑回归(二分类)是一种广义的线性回归(同样存在过拟合的可能),逻辑回归的目标值通过sigmoid函数转换成0-1之间的概率值,以0.5作为阈值变成二分类问题。(二分类问题的概率与

逻辑回归(二分类)是一种广义的线性回归(同样存在过拟合的可能),逻辑回归的目标值通过sigmoid函数转换成0-1之间的概率值,以0.5作为阈值变成二分类问题。 (二分类问题的概率与自变量之间的关系图形往往是一个S型曲线(sigmoid函数))

逻辑回归:线性回归的输入—sigmoid函数—0到1之间的概率值—0.5阈值—真、假(二分类)

二分类中,通常把小概率类别作为目标概率。

sigmoid函数公式: 《Python scikit-learn,二分类,逻辑回归,LogisticRegression》 ,  e是自然常数(2.71828)。图形如下:

《Python scikit-learn,二分类,逻辑回归,LogisticRegression》

逻辑回归公式:

《Python scikit-learn,二分类,逻辑回归,LogisticRegression》    《Python scikit-learn,二分类,逻辑回归,LogisticRegression》

输出结果是[0, 1]之间的概率值,默认0.5作为阈值。

 

《Python scikit-learn,二分类,逻辑回归,LogisticRegression》

线性回归(包括岭回归)使用的损失函数是均方误差,不会存在多个局部最小值的情况。
逻辑回归使用的是对数似然损失函数,可能会存在多个局部最小值的情况,在通过梯度下降求解回归系数时,可能得到不同的局部最小值(不一定是全局最小值)。

逻辑回归通过梯度下降得到损失函数局部最小值而不是全局最小值的解决办法?
1、进行多次梯度下降求解(梯度下降的初始回归系数是随机的),综合比较所有结果。
2、调整学习速率(步长)
注意:这些方法并不能绝对找到全局最小值,但是在应用中的效果还不错。

 

demo.py(二分类,逻辑回归,LogisticRegression,预测癌症):

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
from sklearn.metrics import classification_report
# 二分类,逻辑回归 癌症预测(根据细胞的属性特征)
# 构造列标签名字
column_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=column_names)
print(data)
# 缺失值进行处理 (原始数据中的?表示缺失值)
data = data.replace(to_replace='?', value=np.nan)
data = data.dropna() # 删除有缺少值的行
# 分割数据集 划分为训练集和测试集
x_train, x_test, y_train, y_test = train_test_split(data[column_names[1:10]], data[column_names[10]], test_size=0.25) # 第一列是id不需要,最后一列是目标值
# 进行标准化处理 因为目标结果经过sigmoid函数转换成了[0,1]之间的概率,所以目标值不需要进行标准化。
std = StandardScaler()
x_train = std.fit_transform(x_train)
x_test = std.transform(x_test)
# 逻辑回归预测
lg = LogisticRegression(C=1.0) # 默认使用L2正则化避免过拟合,C=1.0表示正则力度(超参数,可以调参调优)
lg.fit(x_train, y_train)
# 回归系数
print(lg.coef_) # [[1.12796779 0.28741414 0.66944043 ...]]
# 进行预测
y_predict = lg.predict(x_test)
print("准确率:", lg.score(x_test, y_test)) # 0.964912280702
print("召回率:", classification_report(y_test, y_predict, labels=[2, 4], target_names=["良性", "恶性"]))
# 原始数据中的目标值:2表示良性,4表示恶性
'''
precision recall f1-score support
良性 0.97 0.98 0.98 111
恶性 0.97 0.95 0.96 60
avg/total 0.97 0.97 0.97 171
'''

逻辑回归的主要应用:广告点击率预测、疾病预测、垃圾邮件、电商购物搭配推荐(是否会购买某个商品)
优点:适合需要得到一个分类概率的场景,简单,速度快
缺点:不好处理多分类问题

逻辑回归处理多分类问题:

逻辑回归解决办法:1V11Vall (不推荐使用逻辑回归处理多分类问题)

《Python scikit-learn,二分类,逻辑回归,LogisticRegression》 

先判断是否是三角形,再判断是否是正方形。

神经网络(图像识别)中通过softmax方法可以解决逻辑回归在多分类问题上的应用。

 

 


推荐阅读
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 本文详细介绍了MySQL表分区的创建、增加和删除方法,包括查看分区数据量和全库数据量的方法。欢迎大家阅读并给予点评。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
  • 统一知识图谱学习和建议:更好地理解用户偏好
    本文介绍了一种将知识图谱纳入推荐系统的方法,以提高推荐的准确性和可解释性。与现有方法不同的是,本方法考虑了知识图谱的不完整性,并在知识图谱中传输关系信息,以更好地理解用户的偏好。通过大量实验,验证了本方法在推荐任务和知识图谱完成任务上的优势。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 解决.net项目中未注册“microsoft.ACE.oledb.12.0”提供程序的方法
    在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报错“未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序”。本文提供了解决这个问题的方法,包括错误描述和代码示例。通过注册提供程序和修改连接字符串,可以成功读取excel文件信息。 ... [详细]
author-avatar
pigwangrq
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有