L3 逻辑回归模型

前言

一、我的环境

  • 电脑系统:Windows 11
  • 语言环境:Python 3.9.7
  • 编辑器:Jupyter Lab

二、 逻辑回归模型代码实现

1.数据预处理

导入库

###数据预处理
##导入库
import numpy  as np
import pandas as pd
import matplotlib.pyplot as plt

导入数据

##导入数据
dataset = pd.read_csv('F:\\博士期间\\课程学习\\机器学习\\365训练营\\data\\Social_Network_Ads.csv')
dataset

在这里插入图片描述

将数据集分成训练集和测试集

#这行代码选取了 dataset DataFrame 中的第3列和第4列
#(因为索引是从0开始的,所以索引2和3分别对应第3和第4列)
#并将这些列的数据赋值给变量 X。.values 属性将这些列转换为一个 NumPy数组
X = dataset.iloc[ : , [2,3]].values
Y = dataset.iloc[ : ,4].values
#X.shape 将给出两个维度,分别对应于样本数(行数)和特征数(列数)
#Y.shape 将给出样本数(通常是一个单一维度,表示行数)
X.shape, Y.shape

在这里插入图片描述

###将数据集分成训练集和测试集
from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, 
                                                    test_size=0.25, 
                                                    random_state=0)
X_train.shape,Y_train.shape

在这里插入图片描述

2. 逻辑回归模型

###逻辑回归模型
from sklearn.linear_model import LogisticRegression
#创建模型实例
classifier = LogisticRegression()
#训练模型  fit 方法将使用train数据来学习模型参数,并将参数保存在模型实例中
classifier.fit(X_train, Y_train)

3. 预测结果

Y_pred = classifier.predict(X_test)

4. 评估预测结果

训练集可视化

from matplotlib.colors import ListedColormap

X_set, y_set = X_train,Y_train

x = np.arange(start=X_set[:,0].min()-1, 
              stop=X_set[:, 0].max()+1, 
              step=0.01)

y = np.arange(start=X_set[:,1].min()-1, 
              stop=X_set[:,1].max()+1, 
              step=100)

x.shape, y.shape

在这里插入图片描述

#把x,y绑定为网格的形式
X1,X2 =np. meshgrid(x,y)

plt.contourf(X1, X2, 
             classifier.predict(np.array([X1.ravel(),X2.ravel()]).T).reshape(X1.shape),
             alpha = 0.75, 
             cmap = ListedColormap(('red', 'green')))

plt.xlim(X1.min(),X1.max())
plt.ylim(X2.min(),X2.max())

for i,j in enumerate(np.unique(y_set)):
    plt.scatter(X_set[y_set==j,0],
                X_set[y_set==j,1],
                c = ListedColormap(['red', 'green'])(i), 
                label=j)

plt.title('LOGISTIC(Training set)')
plt.xlabel('Age')
plt.ylabel('Estimated Salary')
plt.legend()
plt.show()

测试集可视化

X_set, y_set = X_test,Y_pred

x = np.arange(start=X_set[:,0].min()-1, stop=X_set[:, 0].max()+1, step=0.01)
y = np.arange(start=X_set[:,1].min()-1, stop=X_set[:,1].max()+1, step=100)
#把x,y绑定为网格的形式
X1,X2=np. meshgrid(x,y)

plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(),X2.ravel()]).T).reshape(X1.shape),
             alpha = 0.75, cmap = ListedColormap(('red', 'green')))
plt.xlim(X1.min(),X1.max())
plt.ylim(X2.min(),X2.max())
for i,j in enumerate(np.unique(y_set)):
    plt.scatter(X_set[y_set==j,0],
                X_set[y_set==j,1],
                c = ListedColormap(('red', 'green'))(i), 
                label=j)

plt. title('LOGISTIC(Test set)')
plt. xlabel('Age')
plt. ylabel('Estimated Salary')
plt. legend()
plt. show()
#把x,y绑定为网格的形式
#使用 np.meshgrid 创建网格
X1,X2 =np. meshgrid(x,y)
#绘制决策边界  使用 matplotlib.pyplot 的 contourf 函数绘制填充的等高线图,即决策边界图
#classifier.predict(...) 预测网格上每个点的类别
#np.array([X1.ravel(), X2.ravel()]).T 将 X1 和 X2 展平成一维数组,然后转置以匹配预测函数的输入格式
#.reshape(X1.shape) 将预测结果 Z 重塑为与 X1 和 X2 相同的形状,以便能够在网格上绘制
#alpha=0.75 设置透明度,以便在网格线下方看到填充的颜色
plt.contourf(X1, X2, 
             classifier.predict(np.array([X1.ravel(),X2.ravel()]).T).reshape(X1.shape),
             alpha = 0.75, 
             cmap = ListedColormap(('red', 'green')))
#设置x轴和y轴的显示范围,确保它们覆盖所有数据点的范围
plt.xlim(X1.min(),X1.max())
plt.ylim(X2.min(),X2.max())
#遍历 y_set 中的所有唯一类别
#np.unique(y_set) 返回 y_set 中不同类别的数组
#enumerate 同时提供了类别值和它们的索引

for i,j in enumerate(np.unique(y_set)):
    plt.scatter(X_set[y_set==j,0],#根据类别筛选数据,筛选出 X_set 中属于当前类别 j 的所有第一个特征值
                X_set[y_set==j,1],#筛选出 X_set 中属于当前类别 j 的所有第第二个特征的值
                c = ListedColormap(['red', 'green'])(i), #根据索引 i 选择颜色
                label=j)#设置图例中的标签为当前的类别值

plt.title('LOGISTIC(Training set)')
plt.xlabel('Age')
plt.ylabel('Estimated Salary')
plt.legend()
plt.show()

在这里插入图片描述

测试集可视化

##测试集可视化
X_set, y_set = X_test,Y_pred

x = np.arange(start=X_set[:,0].min()-1, stop=X_set[:, 0].max()+1, step=0.01)
y = np.arange(start=X_set[:,1].min()-1, stop=X_set[:,1].max()+1, step=100)
#把x,y绑定为网格的形式
X1,X2=np. meshgrid(x,y)

plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(),X2.ravel()]).T).reshape(X1.shape),
             alpha = 0.75, cmap = ListedColormap(('red', 'green')))
plt.xlim(X1.min(),X1.max())
plt.ylim(X2.min(),X2.max())
for i,j in enumerate(np.unique(y_set)):
    plt.scatter(X_set[y_set==j,0],
                X_set[y_set==j,1],
                c = ListedColormap(('red', 'green'))(i), 
                label=j)

plt. title('LOGISTIC(Test set)')
plt. xlabel('Age')
plt. ylabel('Estimated Salary')
plt. legend()
plt. show()

在这里插入图片描述

三、函数详解

1.LogisticRegression() 函数详解

sklearn.linear_model.LogisticRegression 是 scikit-learn 库中用于实现逻辑回归(Logistic Regression)的函数。这个函数可以处理二元分类、多分类问题,并且提供了多种选项来调整模型的行为。下面是对这个函数的详细介绍:

1.1 函数原型

LogisticRegression(
    penalty='l2',                 # 正则化类型,'l1', 'l2', 'elasticnet', 'none'
    dual=False,                   # 双对偶或原始方法
    tol=0.0001,                   # 优化过程的容差
    C=1.0,                        # 正则化强度的倒数,较小的值表示较强的正则化
    fit_intercept=True,           # 是否拟合截距项
    intercept_scaling=1,          # 拦截(截距)的缩放系数
    class_weight=None,            # 给定类别的权重,'balanced' 或 dict
    random_state=None,            # 随机数种子
    solver='lbfgs',               # 优化算法,{'newton-cg', 'lbfgs', 'liblinear', 'sag', 'saga'}
    max_iter=100,                 # 最大迭代次数
    multi_class='auto',           # 处理多类分类问题的方法,{'auto', 'ovr', 'multinomial'}
    verbose=0,                    # 是否在训练过程中输出日志信息
    warm_start=False,             # 是否使用上次调用的解作为初始解
    n_jobs=None,                  # 并行处理的作业数量
    l1_ratio=None                 # 混合正则化的弹性网络的l1比例
)

1.2 常用参数解释

● penalty:指定正则化类型。‘l2’ 为默认值,‘l1’ 适用于稀疏特征,‘elasticnet’ 是 L1 和 L2 的组合,‘none’ 不使用正则化。
● dual:对数对偶或原始方法,默认值为 False,适用于样本数量大于特征数量的情况。
● tol:停止优化的标准。
● C:正则化强度的倒数,值越小正则化越强。
● fit_intercept:是否拟合截距项。
● intercept_scaling:仅在 solver=‘liblinear’ 时使用。
● class_weight:用于处理类别不平衡问题,可以设置为 ‘balanced’ 或者自定义的权重字典。
● random_state:随机数种子,保证结果的可重复性。
● solver:选择优化算法,不同算法在不同数据集上的表现不同。
● max_iter:优化算法的最大迭代次数。
● multi_class:处理多类分类问题的方法,‘auto’ 会根据数据集自动选择。
● verbose:控制训练过程中的详细输出。
● warm_start:是否使用上次调用的结果作为初始值。
● n_jobs:并行运算的作业数量,-1 表示使用所有CPU。
● l1_ratio:仅在使用 ‘elasticnet’ 正则化时使用,控制 L1 和 L2 的比例。

1.3 常用方法

● fit(X, y):训练模型。
● predict(X):使用训练好的模型进行预测。
● predict_proba(X):返回每个样本属于各个类别的概率。
● decision_function(X):返回每个样本的置信度分数。
● score(X, y):返回给定测试数据和标签的平均准确度。
● get_params():获取模型参数。
● set_params():设置模型参数。

2. plt.contourf() 函数详解

plt.contourf 是 Matplotlib 库中的一个函数,用于绘制填充等高线图(filled contour plot)。它与 plt.contour 类似,但不同之处在于,plt.contourf 会在不同等高线之间填充颜色,从而创建一个更具视觉吸引力的图形。以下是 plt.contourf 函数的详细介绍,包括其用法和参数。

2.1 函数原型

matplotlib.pyplot.contourf(X, Y, Z, levels=10, cmap=None, **kwargs)

2.2 参数详解

● X, Y: 二维数组,定义等高线图的网格点坐标。
○ X 和 Y 的形状应与 Z 相同,或是通过 numpy.meshgrid 函数生成的二维网格。
● Z: 二维数组,定义每个网格点的数值。等高线将根据这些值绘制。
● levels: 可选,定义等高线的级别数或具体级别值。
○ 如果是一个整数,表示等高线的数量,默认值为 10。
○ 如果是一个序列,表示等高线的具体值。
● cmap: 可选,指定颜色映射,用于填充等高线之间的区域。可以是 Matplotlib 中的预定义颜色映射或自定义颜色映射。
● kwargs: 其他可选参数,用于控制图形的外观,如颜色条的属性、线型、透明度等。

2.3 返回值

返回一个 QuadContourSet 对象,包含绘制的等高线信息,可以用于进一步的自定义或添加颜色条。

四、总结

  • 代码解读已在第二部分标出
  • CHATGPT、kimi利用起来
  • 函数详解
  • 10
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值