首页 > 编程语言 >【人工智能-初级】第4章 用Python实现逻辑回归:从数据到模型

【人工智能-初级】第4章 用Python实现逻辑回归:从数据到模型

时间:2024-10-18 12:19:55浏览次数:8  
标签:逻辑 log Python 回归 人工智能 初级 train test 模型

文章目录

一、逻辑回归简介

逻辑回归(Logistic Regression)是机器学习中的一种常用的分类算法,主要用于解决二分类和多分类问题。尽管名字里有“回归”,逻辑回归实际上是一种分类算法,而不是回归算法。

逻辑回归的基本思想是通过线性模型来计算概率,并使用这个概率来进行分类。它特别适用于那些目标变量是离散值(例如0或1,代表不同类别)的任务。在医疗诊断、信用风险评估和广告点击预测等领域,逻辑回归都得到了广泛应用。

二、逻辑回归的数学原理

逻辑回归使用的数学模型类似于线性回归,只是为了能够将输出值限制在0到1之间,我们需要对线性回归的输出做一些处理。具体地说,逻辑回归通过 sigmoid 函数 将线性回归的输出映射到0到1的范围,从而可以解释为属于某一类别的概率。

2.1 线性模型

首先,我们从一个简单的线性模型开始:

z = w 1 x 1 + w 2 x 2 + . . . + w n x n + b z = w_1 x_1 + w_2 x_2 + ... + w_n x_n + b z=w1​x1​+w2​x2​+...+wn​xn​+b

其中,w 是特征的权重,b 是偏置项,x 是输入特征。这个公式和线性回归的公式类似。

2.2 Sigmoid函数

为了将线性模型的输出映射到0到1之间,逻辑回归使用了 sigmoid 函数,公式为:

σ ( z ) = 1 1 + e − z \sigma(z) = \frac{1}{1 + e^{-z}} σ(z)=1+e−z1​

其中,e 是自然对数的底数,约等于2.718。sigmoid 函数的作用是将输入值(可能是任何实数)压缩到0和1之间,输出的值可以看作是某个事件发生的概率。

2.3 预测与决策边界

逻辑回归的预测结果是一个概率值,通常使用一个阈值(例如0.5)来将样本分类为正类或负类。如果概率大于等于0.5,就将样本归为正类(例如1),否则归为负类(例如0)。

三、逻辑回归的损失函数

逻辑回归使用 交叉熵损失函数(Cross-Entropy Loss)来衡量模型的预测值与真实值之间的差距。交叉熵损失函数的定义如下:

L ( y , y ^ ) = − [ y ⋅ log ⁡ ( y ^ ) + ( 1 − y ) ⋅ log ⁡ ( 1 − y ^ ) ] L(y, \hat{y}) = - [y \cdot \log(\hat{y}) + (1 - y) \cdot \log(1 - \hat{y})] L(y,y^​)=−[y⋅log(y^​)+(1−y)⋅log(1−y^​)]

其中:

  • y:真实标签(0或1)。
  • \hat{y}:预测的概率值(0到1之间)。

通过最小化交叉熵损失,逻辑回归可以找到最优的参数 wb,使得模型的预测尽可能准确。

四、Python实现逻辑回归

下面我们通过Python实现一个逻辑回归模型,并使用 scikit-learn 库来帮助我们完成这一任务。

4.1 导入必要的库

首先,我们需要导入一些必要的库:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
  • numpy:用于数值计算。
  • matplotlib:用于数据可视化。
  • sklearn.datasets:用于加载 Breast Cancer 数据集,这是一个二分类数据集。
  • train_test_split:用于将数据集拆分为训练集和测试集。
  • StandardScaler:用于数据标准化。
  • LogisticRegression:逻辑回归分类器。
  • accuracy_score, confusion_matrix, classification_report:用于评估模型的性能。

4.2 加载数据集并进行预处理

我们使用 Breast Cancer 数据集,这是一个常用的二分类数据集,用于预测乳腺癌的良性或恶性。

# 加载Breast Cancer数据集
data = load_breast_cancer()
X = data.data
y = data.target

# 将数据集拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 对特征进行标准化处理
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
  • load_breast_cancer():加载Breast Cancer数据集,X 是特征矩阵,y 是标签。
  • train_test_split:将数据集拆分为训练集和测试集,20%的数据用于测试。
  • StandardScaler:对数据进行标准化,使每个特征具有零均值和单位方差,减少特征间的尺度差异。

4.3 创建逻辑回归模型并进行训练

我们创建一个逻辑回归分类器,并用训练集进行模型训练。

# 创建逻辑回归分类器
log_reg = LogisticRegression(random_state=42)

# 训练模型
log_reg.fit(X_train, y_train)
  • LogisticRegression(random_state=42):创建逻辑回归分类器。
  • log_reg.fit(X_train, y_train):用训练数据拟合逻辑回归模型。

4.4 模型预测与评估

使用测试集对模型进行预测,并评估其性能。

# 对测试集进行预测
y_pred = log_reg.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"模型的准确率: {accuracy * 100:.2f}%")

# 混淆矩阵
conf_matrix = confusion_matrix(y_test, y_pred)
print("混淆矩阵:\n", conf_matrix)

# 分类报告
class_report = classification_report(y_test, y_pred)
print("分类报告:\n", class_report)
  • log_reg.predict(X_test):对测试集进行预测。
  • accuracy_score:计算预测的准确率。
  • confusion_matrix:计算混淆矩阵,用于评估分类器在每个类别上的表现。
  • classification_report:输出包括精确率、召回率和F1分数的详细报告。

4.5 可视化决策边界(针对二维数据)

为了更直观地理解逻辑回归的工作原理,我们可以使用二维数据集绘制决策边界。

from sklearn.datasets import make_classification

# 创建一个二维数据集
X, y = make_classification(n_features=2, n_redundant=0, n_informative=2, n_clusters_per_class=1, random_state=42)

# 拆分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 训练逻辑回归模型
log_reg = LogisticRegression()
log_reg.fit(X_train, y_train)

# 绘制决策边界
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.1), np.arange(y_min, y_max, 0.1))

Z = log_reg.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

plt.contourf(xx, yy, Z, alpha=0.8)
plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', marker='o')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('Logistic Regression Decision Boundary')
plt.show()

通过上述代码,我们可以看到逻辑回归在二维平面上划分的决策边界,以及数据点的分布情况。蓝色和橙色区域分别代表模型分类为类别0和类别1的区域。

五、总结

逻辑回归是一种非常实用的分类算法,特别适用于二分类问题。它通过使用 sigmoid 函数将线性模型的输出转换为0到1之间的概率值,从而可以根据概率来分类。逻辑回归的损失函数是 交叉熵损失,它通过最小化损失来找到最优的模型参数。

5.1 学习要点

  1. 逻辑回归原理:逻辑回归使用 sigmoid 函数将线性模型的输出映射到0到1之间,用于计算分类概率。
  2. 交叉熵损失函数:逻辑回归通过最小化交叉熵损失来优化模型。
  3. Python实现:可以使用 scikit-learn 库中的 LogisticRegression 轻松实现逻辑回归分类。

5.2 练习题

  1. 使用逻辑回归对 Iris 数据集进行多分类,观察模型的表现。
  2. 使用 sklearn.datasets 模块中的 load_wine 数据集,构建一个逻辑回归模型,预测葡萄酒的类别。
  3. 尝试调整逻辑回归的正则化参数 C,观察模型的性能变化。

希望本文能帮助您更好地理解逻辑回归的基本概念和实现方法。下一篇文章将为您介绍决策树分类及其Python实现。如果有任何问题,欢迎在评论中讨论!

标签:逻辑,log,Python,回归,人工智能,初级,train,test,模型
From: https://blog.csdn.net/PoGeN1/article/details/143021909

相关文章

  • Python一些常见的技巧及语句!!
    题记:关于遇到的一些python代码或者不清楚用法的函数、类别等我会在这里记录下来,方便日后学习和交流。之后研究生三年我会持续更新学习,可能得记录几千个吧。1.copy.copy()和copy.deepcopy()深拷贝和浅拷贝的关系确实好用importcopya=[1,2,3]b=[4,5,6]c=copy.copy(a)......
  • ShowMeAI-人工智能工具笔记-九-
    ShowMeAI人工智能工具笔记(九)T81-558|深度神经网络应用-全案例实操系列(2021最新·完整版)-P15:L2.4-在Pandas中为Keras使用Apply和Map-ShowMeAI-BV15f4y1w7b8嗨,我是Jeffine,欢迎来到华盛顿大学的深度神经网络应用课程。在这段视频中,我们将看看如何结合使用apply和......
  • python+selenium+pycharm自动化环境搭建
    一、python环境搭建:工具及驱动:通过百度网盘分享的文件:自动化学习链接:https://pan.baidu.com/s/1_-KX_s1WeLBa7UV3y0H3zQ提取码:m8nx1.python下载地址:官网下载地址:https://www.python.org/572.根据自己的电脑环境下载安装即可;3.环境变量配置:将D:\python和D:\python\Script......
  • 基于 Python + Vue3!一个轻量级的域名和 SSL 证书监测平台!
    大家好,我是Java陈序员。在企业开发中,由于业务众多,涉及到很多业务域名证书,证书过期由于遗忘常常未能及时续期,导致线上访问异常,给企业带来损失!今天,给大家介绍一个轻量级的域名和SSL证书监测平台,用来解决证书管理困难的问题!关注微信公众号:【Java陈序员】,获取开源项目分享、AI......
  • python文件操作
    1.文件的编码思考:计算机只能识别:0和1,那么我们丰富的文本文件是如何被计算机识别,并存储在硬盘中呢?答案:使用编码技术(密码本)将内容翻译成0和1存入。计算机只认识0和1,所以需要将内容翻译成0和1才能保存在计算机中,同时也需要编码,将计算机保存的0和1,反向翻译回可以识别的内容不......
  • Python 常用模块(五):datetime模块
    目录一、常见时间名词二、datetime模块介绍三、datetime模块中的常量以及几个常用类3.1datetime模块中的常量3.2datetime模块中的几个常用类3.2.1date类3.2.2time类3.2.3datetime类3.2.4timedelta类3.2.5timezone类四、常用方法介绍4.1datetime对象常用方法4.1......
  • JavaScript初级课程 variables
    下载node。1.申明变量variables.jsletmessage="Hello!";message="World";console.log(message);nodevariables.js2.申明不会变的变量constCOLOR_GREEN="green";console.log(COLOR_GREEN)3.数据类型DataTypes=[number,BigInt,string......
  • Python基础知识总结
    变量#变量定义name="name"age=18height=1.75#多个变量赋值a=b=c=1print(a,b,c)字符串#字符串定义及输出str1="hello"str2='world'print(str1,str2)#字符串格式化输出print("name:%s,age:%d,height:%.2f"%(name,age,height))#字符串拼接str3=str1+str2pri......
  • AIGC:开启人工智能内容创作的新纪元
    在这个数据驱动的时代,人工智能(AI)正以前所未有的速度渗透到我们生活的方方面面。今天,我想和大家聊聊一个令人兴奋的话题——AIGC(人工智能生成内容),这是一种能够根据给定的指令或提示自动生成各种类型内容的技术。从文本到图像,从视频到音乐,AIGC的应用范围之广,令人叹为观止。接下......
  • 物理 + 人工智能 = 2024年诺贝尔物理学奖
          ......