机器学习之逻辑回归和softmax回归及代码示例

本文深入探讨了逻辑回归的原理,包括判定边界、二分类和sigmoid函数,以及损失函数的定义、极大似然估计和正则化。接着,文章介绍了如何从二分类扩展到多分类,重点讲解了softmax函数在多分类问题中的应用,并给出了tensorflow的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、逻辑回归

机器学习之线性回归 中,我们可使用梯度下降的方法得到一个映射函数 hθ(X) 来去贴近样本点,这个函数是对连续值的一个预测。

而逻辑回归是解决分类问题的一个算法,我们可以通过这个算法得到一个映射函数 fXy ,其中 X 为特征向量, X={x0,x1,x2,,xn} y 为预测的结果。在逻辑回归这里,标签 y 为一个离散值。

二、判定边界

当将训练集的样本以其各个特征为坐标轴在图中进行绘制时,通常可以找到某一个 判定边界 去将样本点进行分类。例如:

线性判定边界


这里写图片描述

非线性判定边界


这里写图片描述

在图中,样本的标记类型有两种类型,一种为正样本,另一种为负样本,样本的特征 x0 x1 为坐标轴。根据样本的特征值,可将样本绘制在图上。

在图中,可找到某个 判定边界 来对不同标签的样本进行划分。根据这个判定边界,我们可以知道哪些样本是正样本,哪些样本为负样本。

因此我们可以通过学习得到一个方程 Eθ(X)=0 来表示 判定边界,即 判定边界 为 Eθ(X)=0 的点集。(可以看作是等高超平面

Eθ(X)=XTθ

其中 θ={ θ0,θ1,θ2,...,θn} ,为保留 Eθ(X)=0 中的常数项,令特征向量 X={ 1,x1,x2,,xn}

为使得我们的边界可以非线性化,对于特征 xi 可以为特征的高次幂或相互的乘积。

对于位于判定边界上的样本,其特征向量 X 可使得 Eθ(X)=

<think>好的,我现在需要回答用户关于逻辑回归模型的机器学习代码示例的问题。首先,我需要回忆一下逻辑回归的基本概念实现步骤。根据用户提供的引用内容,逻辑回归是一种用于二分类的模型,通过sigmoid函数将线性回归的输出转换为概率值。 用户提到了引用中的信息,比如在Sklearn中使用LogisticRegression类,步骤包括导入模型、创建实例、训练预测。引用中还提到正则化的应用,比如L1或L2正则化,以及特征工程的重要性。此外,还有代码示例的结构,可能需要包括数据预处理、模型训练评估等部分。 接下来,我需要组织回答的结构。用户希望看到清晰的步骤代码示例,所以应该分步骤说明,并附上Python代码。需要确保代码正确,比如导入库、处理数据、分割数据集、训练模型、预测评估。同时,要引用用户提供的参考文献,比如引用[1]到[5]。 可能的问题点包括如何导入正确的库,数据预处理的步骤,模型参数设置如正则化项,以及评估指标的选择。需要检查每个步骤是否符合逻辑回归的标准流程,并确保代码能够运行。例如,使用sklearn的LogisticRegression时,penalty参数设置正则化类型,而C是正则化强度的倒数。 另外,用户可能需要了解如何应用正则化,所以在代码示例中可以加入一个使用L2正则化的例子,如引用[4]中的代码。同时,特征工程部分可能涉及数据标准化或特征选择,但用户的问题主要是代码示例,所以可能简要提及。 最后,生成相关问题需要考虑用户可能进一步想知道的内容,比如特征工程、多分类扩展、参数调优等,参考引用中的内容,比如正则化、多分类问题(softmax回归在引用[5]中提到),以及评估指标的选择。</think>### 机器学习逻辑回归模型代码示例 逻辑回归是一种广泛使用的二分类模型,通过线性组合特征并应用sigmoid函数输出概率值。以下是基于PythonScikit-learn库的实现步骤及代码示例: --- #### **1. 导入库与数据准备** ```python import numpy as np import pandas as pd from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.preprocessing import StandardScaler from sklearn.metrics import accuracy_score, confusion_matrix, classification_report # 示例数据(以鸢尾花数据集二分类为例) from sklearn.datasets import load_iris data = load_iris() X = data.data[data.target != 2] # 仅取前两类 y = data.target[data.target != 2] ``` --- #### **2. 数据预处理** ```python # 标准化特征(逻辑回归对特征尺度敏感) scaler = StandardScaler() X_scaled = scaler.fit_transform(X) # 划分训练集测试集 X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42) ``` --- #### **3. 模型训练** ```python # 创建逻辑回归模型(默认使用L2正则化) model = LogisticRegression(penalty='l2', C=1.0, solver='lbfgs') model.fit(X_train, y_train) ``` - `penalty`: 正则化类型(`l1`或`l2`),默认`l2`[^4]。 - `C`: 正则化强度的倒数,值越小正则化越强。 - `solver`: 优化算法,`lbfgs`适用于小数据集。 --- #### **4. 预测与评估** ```python # 预测测试集结果 y_pred = model.predict(X_test) # 计算准确率 accuracy = accuracy_score(y_test, y_pred) print(f"准确率: {accuracy:.2f}") # 输出分类报告 print(classification_report(y_test, y_pred)) ``` 输出示例: ``` 准确率: 1.00 precision recall f1-score support 0 1.00 1.00 1.00 10 1 1.00 1.00 1.00 10 accuracy 1.00 20 macro avg 1.00 1.00 1.00 20 weighted avg 1.00 1.00 1.00 20 ``` --- #### **5. 查看模型参数** ```python # 输出系数截距 print("系数:", model.coef_) print("截距:", model.intercept_) ``` --- #### **扩展:正则化逻辑回归(L1正则化)** ```python # 使用L1正则化(需指定solver='liblinear') l1_model = LogisticRegression(penalty='l1', C=0.5, solver='liblinear') l1_model.fit(X_train, y_train) ``` --- ### 关键点说明 1. **特征标准化**:逻辑回归对特征尺度敏感,标准化(如`StandardScaler`)可提升性能。 2. **正则化选择**:`L1`正则化可用于特征选择,`L2`适用于防止过拟合[^4]。 3. **多分类扩展**:通过`multi_class='multinomial'``softmax`函数可扩展至多分类(如引用[5]中的softmax回归)。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值