目录

一、逻辑回归介绍

1.1算法概述

1.2算法原理

1.3算法优缺点

      1.3.1优点

      1.3.2缺点

1.4实现流程

二、逻辑回归算法实践

1.加载数据集

2.sigmoid函数及损失函数

3.梯度下降法

4.训练

5.绘制边界

三、总结

一、逻辑回归介绍

1.1算法概述

       逻辑回归(Logistic Regression)是一种广义的线性回归分析模型,主要用于处理因变量为分类变量(如二分类问题)的情况。它通过计算给定输入特征下样本属于某一类别的概率来进行分类预测。

1.2算法原理

       逻辑回归的基本原理是基于线性回归模型,通过引入Sigmoid函数将线性模型的输出转化为概率值。具体而言,逻辑回归模型首先对输入特征进行线性组合,得到一个线性预测值;然后,将线性预测值输入到Sigmoid函数中,得到一个0到1之间的概率值;最后,根据概率值的大小判断样本所属的类别。

       线性函数通常表示为:

      其中,( w0 ) 是截距(或称为偏置项),(w1, w2, ... , wn ) 是回归系数,( x1, x2, ... , xn ) 是特征(或称为自变量)。这个线性函数 ( z ) 计算了给定输入 ( x ) 时的一个线性组合。

       Sigmoid函数的表达式为:

     其中,(z)为线性预测值,即输入特征加权求和的结果。

1.3算法优缺点

      1.3.1优点

          1.实现简单:逻辑回归模型的原理简单,容易理解和实现。

          2.计算效率高:逻辑回归模型的计算复杂度较低,适用于大规模数据集。

          3.易于解释:逻辑回归模型可以给出样本属于某一类别的概率值,便于解释和理解。

      1.3.2缺点

          1.对特征工程依赖较强:逻辑回归对输入特征的质量要求较高,需要进行特征选择和预处理。

          2.只适用于线性可分问题:逻辑回归是一种线性分类模型,对于非线性可分问题的分类效果有限。

          3.对异常值敏感:逻辑回归对异常值较为敏感,需要进行适当的处理。

1.4实现流程

      1.收集数据:采用任意方法收集数据。

      2.准备数据:由于需要进行距离计算,因此要求数据类型为数值型。另外,结构化数据 格式则最佳。

      3.分析数据:采用任意方法对数据进行分析。

      4.训练算法:大部分时间将用于训练,训练的目的是为了找到最佳的分类回归系数。

      5.测试算法:一旦训练步骤完成,分类将会很快。

      6.使用算法:首先,我们需要输入一些数据,并将其转换成对应的结构化数值;接着,基于训练好的回归系数就可以对这些数值进行简单的回归计算,判定它们属于哪个类别;在这之后,我们就可以在输出的类别上做一些其他分析工作。

二、逻辑回归算法实践

1.加载数据集

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

df = {

'颜色深度':[14.23,13.2,13.16,14.37,13.24,12.07,12.43,11.79,12.37,12.04,10.65,13.42,11.2,14.33,13.2,12.8,11.6,12.43,12.55,13.2,12.85],

'酒精浓度':[5.64,4.38,5.68,4.80,4.32,2.76,3.94,3.0,2.12,2.6,3.22,5.0,4,4,5.7,3.8,4.2,4.6,3.1,3.4,4.3],

'品种':[0,0,0,0,0,1,1,1,1,1,1,0,1,0,0,0,1,0,1,1,0]}

wine_data = pd.DataFrame(df)

X = np.array(wine_data.iloc[:,:2]) #特征(颜色深度/酒精浓度)

y = np.array(wine_data.iloc[:,-1]) #标签 (品种:0黑皮诺,1赤霞珠)

#用Matplotlib创建散点图

plt.rcParams['font.sans-serif'] = 'SimHei' #设置中文显示,mac系统

plt.rcParams['axes.unicode_minus'] = False

plt.style.use('ggplot')

plt.figure(figsize = (9,6),dpi=200)

plt.scatter(X[y==0,1],X[y==0,0],color = 'purple',label = '黑皮诺')

plt.scatter(X[y==1,1],X[y==1,0],color = 'red',label = '赤霞珠')

plt.xlabel('酒精浓度')

plt.ylabel('颜色深度')

plt.legend(loc='lower right')

plt.show()

注意:这里只是为了先展示一下原始数据集,x,y的设置在后面会改。

输出:

2.sigmoid函数及损失函数

# 定义Sigmoid函数

def sigmoid(z):

return 1 / (1 + np.exp(-z))

# 定义损失函数(逻辑回归使用交叉熵损失)

def compute_cost(h, y):

m = len(y)

cost = -1/m * np.sum(y * np.log(h) + (1-y) * np.log(1-h))

return cost

  注意:  

    1. 损失函数中的 m 是样本数量,用于计算平均损失。       2. 在计算 log(h) 和 log(1-h) 时,需要确保 h 的值在 (0, 1) 范围内。

3.梯度下降法

# 定义梯度下降法中的梯度计算

def compute_gradient(X, y, theta):

m = len(y)

h = sigmoid(np.dot(X, theta))

gradient = 1/m * np.dot(X.T, (h - y))

return gradient

# 添加偏置项(通常为1)

X_b = np.hstack((np.ones((X.shape[0], 1)), X))

# 初始化权重(包括偏置项)

theta = np.zeros(X_b.shape[1])

用梯度下降法要注意公式的符号。

4.训练

# 设置学习率和迭代次数

learning_rate = 0.01

iterations = 1000

# 梯度下降法训练模型

for i in range(iterations):

gradient = compute_gradient(X_b, y, theta)

theta = theta - learning_rate * gradient

5.绘制边界

# 绘制数据点

plt.scatter(X[:, 0], X[:, 1], c=y, cmap='viridis', edgecolor='black')

# 绘制决策边界线

# 使用训练得到的theta参数

x1_values = np.array(np.arange(X[:, 0].min() - 1, X[:, 0].max() + 1, 0.1))

x2_values = -(theta[0] + theta[1] * x1_values) / theta[2]

plt.plot(x1_values, x2_values, color='red')

#用Matplotlib创建散点图

plt.rcParams['font.sans-serif'] = 'SimHei' #设置中文显示

plt.rcParams['axes.unicode_minus'] = False

# 设置轴标签和标题

plt.xlabel('颜色深度')

plt.ylabel('酒精浓度')

plt.title('逻辑回归分类决策边界')

# 显示图表

plt.show()

输出:

       从输出图来看,数据点在这条直线两侧分布得相对均匀,没有大量的点被错误地分类到直线的另一侧,所以偏差应该不算高。

三、总结

       本次实验深入学习了逻辑回归的原理与应用。逻辑回归作为一种强大的分类算法,通过线性模型与Sigmoid函数的结合,有效预测了样本属于某一类别的概率。实验过程中,我们掌握了逻辑回归的基本概念和数学原理,并通过实际数据集进行了模型训练。实验结果表明,逻辑回归在处理二分类问题时表现出色,能够准确捕捉数据中的分类信息。通过本次实验,我们加深了对逻辑回归的理解,并掌握了其在实际问题中的应用方法。

推荐链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: