6. 逻辑回归实验分析
6.1-逻辑回归实验分析
加载sklearn内置数据集
from sklearn import datasets
iris = datasets.load_iris()
list(iris.keys())
# 运行结果:['data', 'target', 'target_names', 'DESCR', 'feature_names', 'filename']
对于传统逻辑回归,要对标签多变换,也就是属于当前类别为1,其他类别为0
# 提取数据集的特征(X)和目标(y)
# 这里选择了鸢尾花数据集中的第四个特征以及设置目标为二元分类(1或0)
# 第四个特征为花瓣宽度,y标签为是否为Virginica鸢尾花(2表示Virginica)
X = iris['data'][:, 3:] # 提取所有行的第四列特征(花瓣宽度)
y = (iris['target'] == 2).astype(np.int) # 创建目标数组,判断是否为Virginica鸢尾花,将True转化为1,False转化为0
# 这段代码的目的是将鸢尾花数据集中的第四个特征(花瓣宽度)作为特征矩阵 X,
# 并创建一个目标向量 y,其中1表示样本为Virginica鸢尾花,0表示非Virginica鸢尾花。
6.2-概率结果随特征数值的变化
这段代码使用了Scikit-Learn中的LogisticRegression模型来训练一个逻辑回归分类器,并用它对新的输入数据进行预测。具体来说,它展示了随着输入特征数值的变化,模型输出的概率值也会随之变化的原理。
以下是原理的简要概述:
- 导入LogisticRegression模型并创建一个实例log_res。
- 使用log_res.fit(X, y)对模型进行训练,其中X是训练数据的特征,y是相应的目标标签(类别)。
- 创建一个新的输入特征X_new,它是一个包含1000个数值的数组,这些数值在0到3之间均匀分布,然后将其转换为一个包含单个特征的二维数组。
- 使用log_res.predict_proba(X_new)来获取在X_new上的预测概率值。这里的predict_proba方法返回一个数组,其中包含两列,分别代表了两个可能的类别(二元分类问题)。每一行表示X_new中对应样本属于每个类别的概率。
所以,随着X_new中特征数值的变化,log_res模型会为每个特定数值计算对应的两个类别的概率值,从而显示了模型对输入特征的响应。这个原理在分类问题中非常重要,因为它可以帮助我们理解模型如何对不同的输入做出不同的分类决策或概率估计。这可以用于分析模型的行为,优化模型的性能,以及根据具体需求进行决策。
6.3-可视化展示
import matplotlib.pyplot as plt
# 创建一个图形窗口,设置图形大小为12x5英寸
plt.figure(figsize=(12, 5))
# 找到分类决策边界的位置
decision_boundary = X_new[y_proba[:, 1] >= 0.5][0]
# 在图上绘制垂直虚线,表示分类决策边界
plt.plot([decision_boundary, decision_boundary], [-1, 2], 'k:', linewidth=2)
# 在图上绘制绿色实线,表示对应于'Iris-Virginica'类别的预测概率
plt.plot(X_new, y_proba[:, 1], 'g-', label='Iris-Virginica')
# 在图上绘制蓝色虚线,表示对应于'Not Iris-Virginica'类别的预测概率
plt.plot(X_new, y_proba[:, 0], 'b--', label='Not Iris-Virginica')
# 在分类决策边界处添加箭头,表示分类决策过程
plt.arrow(decision_boundary, 0.08, -0.3, 0, head_width=0.05, head_length=0.1, fc='b', ec='b')
plt.arrow(decision_boundary, 0.92, 0.3, 0, head_width=0.05, head_length=0.1, fc='g', ec='g')
# 在图上添加文本标签,标识分类决策边界
plt.text(decision_boundary + 0.02, 0.15, 'Decision Boundary', fontsize=16, color='k', ha='center')
# 设置x轴和y轴的标签
plt.xlabel('Peta width(cm)', fontsize=16)
plt.ylabel('y_proba', fontsize=16)
# 设置坐标轴范围
plt.axis([0, 3, -0.02, 1.02])
# 添加图例并设置字体大小
plt.legend(loc='center left', fontsize=16)
# 显示图形
plt.show()
6.4-坐标棋盘制作
决策边界的绘制:
- 构建坐标数据,合理的范围当中,根据实际训练时输入数据来决定
- 整合坐标点,得到所有测试输入数据坐标点
- 预测,得到所有点的概率值
- 绘制等高线,完成决策边界
构建坐标数据:
以上代码片段的目标是训练一个逻辑回归分类器并绘制其决策边界。以下是关于"决策边界的绘制"部分的简要概括:
-
首先,从Iris数据集中选择了两个特征,这两个特征存储在X中。特别地,X包含花瓣长度(第二列特征)和花瓣宽度(第三列特征)的数据。
-
创建了目标标签y,其中通过将Iris数据集中的目标类别(是否为'Iris-Virginica')进行二元分类转化成0和1的形式。如果样本属于'Iris-Virginica'类别,则y为1,否则为0。
-
使用Scikit-Learn中的LogisticRegression模型创建了log_res实例,并设置了正则化参数C的值为10000(C表示正则化强度的倒数,较大的C值表示弱正则化)。
-
调用log_res.fit(X, y)对模型进行训练,使用X中的特征数据和y中的标签数据。
-
创建了一个网格(grid),使用np.meshgrid生成x0和x1的值,这是为了在二维特征空间中创建一组点,以便后续绘制决策边界。x0包含了1到2之间的两个值,x1包含了10到20之间的三个值,这两个特征范围被用来构建一个网格。
-
(为了绘制决策边界,创建了一个网格(grid)通过笛卡尔积的方式。具体来说,x0包含了两个值(1和2),x1包含了三个值(10、15和20)。这些值的组合通过笛卡尔积生成了一组点,用于在二维特征空间中构建一个密集的网格。)
绘制决策边界的部分在此代码片段中尚未实现,但通过创建这个网格,可以在这个网格上使用模型进行预测,从而得到分类决策边界,并将其绘制在图上,以可视化模型的性能和决策边界的位置。通常,这个网格上的点将被分为两个类别(0或1),并根据这些点的分类结果来绘制决策边界。
6.5-分类决策边界展示分析
-
创建了一个网格,通过np.meshgrid和np.linspace生成了两个特征x0和x1的值。x0的范围在2.9到7之间,包含500个均匀分布的点;x1的范围在0.8到2.7之间,包含200个均匀分布的点。这两个特征的组合通过笛卡尔积生成了一组点,并将它们存储在X_new中。
-
使用已经训练好的逻辑回归模型log_res来预测X_new中每个点的类别概率,并将结果存储在y_proba中。
-
创建一个图形窗口,设置图形大小为10x4英寸。
-
绘制散点图,将属于类别0的数据点用蓝色方块('bs')表示,将属于类别1的数据点用绿色三角形('g^')表示。这是原始数据的可视化,显示了两个不同类别的样本点。
-
从y_proba中提取出类别1的概率('Vir'),并将其形状调整为与x0相同的形状。这形成了一个二维的概率矩阵zz,其中每个点表示在特定位置的样本属于类别1的概率。
-
使用contour函数绘制等高线图,以显示决策边界。等高线的颜色根据zz中的概率值而变化,cmap=plt.cm.brg表示使用彩色映射。
-
使用plt.clabel函数在等高线上添加标签,以显示不同等高线的概率值。
-
设置坐标轴的范围为[2.9, 7, 0.8, 2.7],确保图形中显示的区域适合数据范围。
-
在图上添加文本标签,标识两个类别,'NOT Vir'表示非'Iris-Virginica'类别的区域,'Vir'表示'Iris-Virginica'类别的区域。
6.6-多分类-softmax
如何进行多类别分类呢?Softmax该登场了
以上代码演示了Softmax回归(多类别逻辑回归)在多分类问题中的用法和原理。Softmax回归用于将输入特征映射到多个类别的概率分布。以下是Softmax在多分类中的用法和原理的概括:
-
数据准备:
- 从Iris数据集中选择两个特征,花瓣长度和花瓣宽度,将它们存储在X中。
- y包含了目标标签,表示鸢尾花的不同类别(0表示'Iris-Setosa',1表示'Iris-Versicolor',2表示'Iris-Virginica')。
-
Softmax回归模型:
- 创建了一个Softmax回归模型softmax_reg,通过设置multi_class='multinomial'来指定多类别分类,solver='lbfgs'作为优化算法。
- 使用softmax_reg.fit(X, y)来训练模型,模型将学习如何将输入特征映射到多个类别的概率分布。
-
预测:
- 通过softmax_reg.predict([[5,2]])可以对新的花瓣长度和花瓣宽度进行分类预测,得到类别标签。
- 通过softmax_reg.predict_proba([[5,2]])可以获取对新样本属于每个类别的概率估计。
-
创建决策边界:
- 创建一个网格,用于在特征空间中生成一组点X_new。
- 使用softmax_reg.predict_proba(X_new)计算每个点属于各个类别的概率,并使用softmax_reg.predict(X_new)获得每个点的类别预测。
-
可视化:
- 通过散点图展示原始数据点,不同颜色表示不同的鸢尾花类别。
- 使用contourf函数绘制决策边界,填充不同类别的决策区域。
- 使用contour函数绘制等高线图,表示每个点属于各个类别的概率。
Softmax计算概率具体计算公式: 在Softmax回归中,对于每个类别k,模型计算输入x属于类别k的概率如下:
其中, 是类别数, 是与类别k相关联的权重向量。
损失函数(交叉熵)数学公式: Softmax回归使用交叉熵损失函数来衡量模型的性能。对于一个样本,损失函数如下:
其中,m是样本数量,K是类别数, 是样本i属于类别k的实际标签(0或1), 是模型预测样本i属于类别k的概率。
Softmax回归通过最小化交叉熵损失函数来优化模型参数,从而使模型能够准确地分类多个类别。