当前位置: 首页 > news >正文

线性回归和逻辑回归揭示数据的隐藏模式:理论与实践全解析

机器学习之线性回归和逻辑回归

1. 简介

1.1 机器学习概述

机器学习是人工智能的一个重要分支,旨在通过算法让计算机系统利用数据自动学习和改进。它通过从数据中学习模式和规律,使得计算机能够进行预测、分类或者决策,而无需显式地进行编程。随着数据量的急剧增加和计算能力的提升,机器学习在各个领域如图像识别、自然语言处理和推荐系统等方面展现了强大的应用潜力。
在这里插入图片描述

1.2 监督学习的定义与重要性

监督学习是机器学习的一种重要范式,其核心是从标记数据(带有输入和预期输出的数据)中学习规律,以便对新数据进行预测或分类。在监督学习中,算法通过训练集中的示例来学习输入与输出之间的映射关系,从而使得算法能够对未见过的数据进行泛化。监督学习的重要性在于它能够利用已有的数据进行模型训练,并且能够对新数据进行准确的预测或分类,这使得监督学习成为了许多实际问题解决方案的基础。

1.3 线性回归和逻辑回归在监督学习中的作用

线性回归和逻辑回归是监督学习中两个基础且广泛应用的算法。

1.3.1 线性回归

线性回归是一种用于预测数值型输出的监督学习算法。其基本思想是建立一个线性模型来描述输入变量(自变量)与连续型输出变量(因变量)之间的关系。在最简单的情况下,线性回归模型假设自变量和因变量之间存在线性关系,通过拟合数据找到最佳拟合直线(或超平面),以进行预测或分析。例如,预测房屋价格、股票走势等。

线性回归的数学表达式通常为:

[ y = w_0 + w_1x_1 + w_2x_2 + \ldots + w_nx_n ]

其中,( y ) 是预测值,( w_0, w_1, \ldots, w_n ) 是模型参数,( x_1, x_2, \ldots, x_n ) 是输入特征。

1.3.2 逻辑回归

逻辑回归是一种用于解决二分类问题的监督学习算法。尽管名为“回归”,但实际上是一种分类算法,其输出是一个介于0和1之间的概率值,表示属于某一类的可能性。逻辑回归模型通过将线性模型的输出应用到一个逻辑函数(如sigmoid函数)来实现分类。

逻辑回归的数学表达式通常为:

[ P(y=1|x) = \sigma(w_0 + w_1x_1 + w_2x_2 + \ldots + w_nx_n) ]

[ P(y=0|x) = 1 - P(y=1|x) ]

其中,( \sigma ) 是sigmoid函数,( P(y=1|x) ) 是预测为正类的概率,( P(y=0|x) ) 是预测为负类的概率。

逻辑回归广泛应用于各种领域,如医学诊断、信用评分、广告点击预测等,其简单而有效的特性使其成为许多分类问题的首选算法之一。

2. 线性回归(Linear Regression)

2.1 定义与目标

线性回归是一种用于回归分析的基本方法,其主要目标是建立一个模型来预测一个连续的目标变量。回归问题的核心在于预测一个数值型的输出(目标变量),而不是分类问题中的离散类别。线性回归假设目标变量与一个或多个自变量(特征)之间存在线性关系。具体来说,线性回归试图找到一个最佳拟合直线,使得预测值与实际观测值之间的差距最小。

2.1.1 回归问题的定义

回归问题是指在给定一个或多个自变量的情况下,预测一个连续的因变量。与分类问题不同,回归问题的目标是输出一个连续的数值,而不是一个类别标签。例如,在房价预测中,给定房子的特征(如面积、房间数量等),我们希望预测房子的实际价格。这类问题通常需要通过回归模型来建立自变量与因变量之间的关系。

2.1.2 预测连续目标变量

在回归分析中,我们关注的是如何预测一个连续的目标变量。例如,预测一个学生的考试成绩、公司未来的收入或某个产品的销售量。线性回归模型通过找到一个最佳拟合的线性关系来实现这一目标。

2.2 模型概述

线性回归模型的目标是通过线性组合来预测目标变量。其基本形式为:

[ y = \beta_0 + \beta_1 x + \epsilon ]

2.2.1 线性模型的数学形式
  • 截距(( \beta_0 )): 截距是回归线与y轴的交点,表示当自变量 ( x ) 为0时,因变量 ( y ) 的预测值。
  • 斜率(( \beta_1 )): 斜率表示自变量 ( x ) 变化一个单位时,因变量 ( y ) 的变化量。斜率的绝对值越大,说明自变量对因变量的影响越大。
  • 误差项(( \epsilon )): 误差项表示模型预测值与实际观测值之间的差距,反映了模型未能捕捉到的部分。
2.2.2 多变量线性回归

当有多个自变量时,模型的数学形式扩展为:

[ y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \cdots + \beta_p x_p + \epsilon ]

其中,( x_1, x_2, \ldots, x_p ) 是多个自变量,( \beta_1, \beta_2, \ldots, \beta_p ) 是相应的回归系数。

2.3 损失函数

损失函数用于评估模型的预测效果。在线性回归中,均方误差(MSE)是最常用的损失函数,它通过计算实际观测值与预测值之间的平均平方误差来衡量模型的性能。

2.3.1 均方误差(MSE)

均方误差的公式为:

[ \text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 ]

  • ( y_i ) 是实际的目标值
  • ( \hat{y}_i ) 是模型的预测值
  • ( n ) 是样本数量

MSE 越小,表示模型的预测效果越好。均方误差对异常值较为敏感,因此在处理数据时需要考虑其影响。

2.4 模型训练

模型训练的目的是找到使损失函数最小化的参数。常用的方法包括最小二乘法和梯度下降算法。

2.4.1 最小二乘法(OLS)

最小二乘法(Ordinary Least Squares, OLS)是线性回归中最常用的参数估计方法。其基本思想是通过最小化观测值与预测值之间的均方误差来估计回归参数。

数学推导:

通过最小化下述目标函数来求解参数 ( \beta ):

[ \text{Objective Function} = \sum_{i=1}^{n} (y_i - (\beta_0 + \beta_1 x_i))^2 ]

代码示例:

import numpy as np
from sklearn.linear_model import LinearRegression# 创建示例数据
X = np.array([[1], [2], [3]])
y = np.array([1, 2, 3])# 实例化模型
model = LinearRegression()# 拟合模型
model.fit(X, y)# 打印参数
print(f"截距: {model.intercept_}, 斜率: {model.coef_}")
2.4.2 梯度下降算法(Gradient Descent)

梯度下降是一种迭代优化方法,通过不断更新模型参数来最小化损失函数。梯度下降算法适用于大规模数据集和复杂模型。

算法步骤:

  1. 初始化参数
  2. 计算损失函数的梯度
  3. 根据梯度更新参数
  4. 重复步骤2和3,直到收敛

代码示例:

def gradient_descent(X, y, learning_rate=0.01, epochs=1000):m, n = X.shapetheta = np.zeros(n)  # 初始化参数for _ in range(epochs):predictions = X @ thetaerrors = predictions - ygradients = (1 / m) * (X.T @ errors)theta -= learning_rate * gradientsreturn theta# 示例数据
X = np.array([[1], [2], [3]])
y = np.array([1, 2, 3])# 执行梯度下降
theta = gradient_descent(X, y)
print(f"估计的参数: {theta}")

2.5 评估指标

评估指标用于衡量回归模型的性能和预测效果。

2.5.1 决定系数(( R^2 ))

决定系数 ( R^2 ) 表示模型解释的方差比例。其计算公式为:

[ R^2 = 1 - \frac{\sum_{i=1}^{n} (y_i - \hat{y}_i)2}{\sum_{i=1}{n} (y_i - \bar{y})^2} ]

  • ( y_i ) 是实际的目标值
  • ( \hat{y}_i ) 是模型的预测值
  • ( \bar{y} ) 是目标值的均值

( R^2 ) 的值范围从0到1,值越接近1表示模型的解释能力越强。

2.5.2 调整决定系数(Adjusted ( R^2 ))

调整决定系数用于调整 ( R^2 ) 对自变量数量的敏感性。其计算公式为:

[ \text{Adjusted } R^2 = 1 - \left( \frac{1 - R^2}{n - p - 1} \right) \times (n - 1) ]

  • ( n ) 是样本数量
  • ( p ) 是自变量的数量

调整决定系数可以有效评估模型在多个自变量情况下的拟合效果。

2.6 假设检验

假设检验用于确定模型参数的显著性以及整体模型的有效性。

2.6.1 t检验

t检验用于检验单个回归系数是否显著不为零。t值计算公式为:

[ t = \frac{\hat{\beta}_j}{\text{SE}(\hat{\beta}_j)} ]

  • ( \hat{\beta}_j ) 是回归系数的估计值
  • ( \text{SE}(\hat{\beta}_j) ) 是回归系数的标准误差
2.6.2 F检验

F检验用于检验整体回归模型的显著性。其计算公式为:

[ F = \frac{\text{MSR}}{\text{MSE}} ]

  • MSR 是回归平方和的均值
  • MSE 是残差平方和的均值

F检验可以帮助我们判断自变量是否对因变量有整体的影响。

2.7 扩展与变体

在实际应用中,线性回归模型可能会遇到一些问题,如多重共线性或特征选择。为了解决这些问题,出现了多种线性回归的变体,如岭回归和拉索回归。

2.7.1 岭回归(Ridge Regression)

岭回

归通过在损失函数中添加L2正则化项来解决多重共线性问题。其目标函数为:

[ \text{Objective Function} = \sum_{i=1}^{n} (y_i - \hat{y}i)^2 + \lambda \sum{j=1}^{p} \beta_j^2 ]

其中,( \lambda ) 是正则化参数,用于控制正则化的强度。

代码示例:

from sklearn.linear_model import Ridge# 创建岭回归模型
ridge_model = Ridge(alpha=1.0)# 拟合模型
ridge_model.fit(X, y)# 打印参数
print(f"截距: {ridge_model.intercept_}, 斜率: {ridge_model.coef_}")
2.7.2 拉索回归(Lasso Regression)

拉索回归通过在损失函数中添加L1正则化项来实现特征选择。其目标函数为:

[ \text{Objective Function} = \sum_{i=1}^{n} (y_i - \hat{y}i)^2 + \lambda \sum{j=1}^{p} |\beta_j| ]

L1正则化可以将部分回归系数缩小到零,从而实现特征选择。

代码示例:

from sklearn.linear_model import Lasso# 创建拉索回归模型
lasso_model = Lasso(alpha=0.1)# 拟合模型
lasso_model.fit(X, y)# 打印参数
print(f"截距: {lasso_model.intercept_}, 斜率: {lasso_model.coef_}")

3. 逻辑回归(Logistic Regression)

逻辑回归是一种广泛用于分类任务的统计模型,尽管名字中有“回归”,但它实际应用于分类问题,尤其是二分类问题。以下是对逻辑回归的详细讲解,包括其定义、模型概述、损失函数、模型训练、评估指标、假设检验及其扩展和变体。

3.1 定义与目标

逻辑回归主要用于处理分类问题,即预测一个离散的类别标签。其核心目标是估计输入特征对应的分类概率。

3.1.1 分类问题的定义

在分类问题中,我们试图将样本分到预定义的类别中。这与回归任务(例如预测房价或温度)不同,因为回归任务的目标是预测一个连续的数值。分类任务通常涉及以下几个方面:

  • 目标变量(标签):离散的类别标签,例如“癌症”与“非癌症”。
  • 特征(输入变量):用于预测标签的连续或离散变量,例如患者的年龄、性别、医学测试结果等。

分类问题的目标是通过输入特征 ( X ) 预测目标变量 ( Y ) 的类别。对于二分类问题,目标是预测 ( Y ) 是1(正类)还是0(负类)。在逻辑回归中,我们使用概率模型来预测 ( P(Y=1|X) ) 的概率,并根据这个概率做出分类决策。

3.1.2 预测离散目标变量(分类标签)

逻辑回归的预测过程如下:

  1. 计算线性组合:模型首先计算特征的线性组合,即 ( z = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \cdots + \beta_n x_n ),其中 ( \beta_i ) 是模型的参数,( x_i ) 是输入特征。

  2. 应用Sigmoid函数:将线性组合 ( z ) 通过Sigmoid函数转换为概率值 ( P(Y=1|X) ):

    [
    P(Y=1|X) = \frac{1}{1 + e^{-z}}
    ]

    这个概率值表示样本属于正类的可能性。

  3. 分类决策:根据设定的阈值(通常为0.5),将概率值转化为类别标签。如果 ( P(Y=1|X) \geq 0.5 ),则预测类别为1;否则,预测类别为0。

3.2 模型概述

逻辑回归模型通过Sigmoid函数将线性模型的输出映射到(0, 1)区间,从而进行概率预测。以下是逻辑回归模型的详细数学形式和解释。

3.2.1 逻辑回归模型的数学形式

逻辑回归模型的核心公式是:

[
P(Y=1|X) = \frac{1}{1 + e^{-(\beta_0 + \beta_1 x_1 + \beta_2 x_2 + \cdots + \beta_n x_n)}}
]

其中:

  • ( \beta_0 ) 是偏置项。
  • ( \beta_1, \beta_2, \ldots, \beta_n ) 是特征的权重。
  • ( x_1, x_2, \ldots, x_n ) 是输入特征。

Sigmoid函数定义为:

[
\sigma(z) = \frac{1}{1 + e^{-z}}
]

它将任何实数 ( z ) 转换为介于0和1之间的值,因此可以用作概率值。这个函数的特点是:

  • 当 ( z ) 很大(即 ( z \to +\infty ))时,( \sigma(z) ) 接近1。
  • 当 ( z ) 很小(即 ( z \to -\infty ))时,( \sigma(z) ) 接近0。
  • 当 ( z = 0 ) 时,( \sigma(z) = 0.5 )。
3.2.2 Sigmoid函数与概率预测

Sigmoid函数的输出是一个概率值,表示样本属于正类的概率。具体应用中,Sigmoid函数将线性回归模型的输出转换为0到1之间的概率,从而将模型的预测结果解释为分类概率。这使得逻辑回归不仅可以进行分类,还可以给出分类的置信度。

3.3 损失函数

损失函数用于评估模型的预测效果并指导模型的训练。逻辑回归主要使用对数损失函数和交叉熵损失函数来衡量模型的性能。

3.3.1 对数损失函数(Log Loss)

对数损失函数度量预测概率与实际标签之间的差异,其公式为:

[
\text{Log Loss} = - \frac{1}{N} \sum_{i=1}^{N} \left[ y_i \log(p_i) + (1 - y_i) \log(1 - p_i) \right]
]

其中:

  • ( N ) 是样本总数。
  • ( y_i ) 是样本 ( i ) 的真实标签(0或1)。
  • ( p_i ) 是样本 ( i ) 的预测概率 ( P(Y=1|X) )。

对数损失函数具有以下特点:

  • 如果真实标签是1但预测概率接近0,则损失很大。
  • 如果真实标签是0但预测概率接近1,则损失也很大。
  • 损失函数值越小,模型的预测效果越好。
3.3.2 交叉熵损失(Cross-Entropy Loss)

交叉熵损失是对数损失的一种推广,适用于多分类问题。对于二分类问题,交叉熵损失与对数损失等价。其公式为:

[
\text{Cross-Entropy Loss} = - \sum_{i=1}^{C} y_i \log(p_i)
]

其中:

  • ( C ) 是类别数。
  • ( y_i ) 是样本在第 ( i ) 类上的真实标签(通常是独热编码形式)。
  • ( p_i ) 是样本在第 ( i ) 类上的预测概率。

交叉熵损失函数用于度量模型输出的概率分布与实际标签分布之间的差异。其值越小,表示模型的预测概率分布越接近真实标签分布。

3.4 模型训练

逻辑回归的训练过程包括确定模型的最优参数,以最小化损失函数。常用的方法有最大似然估计和梯度上升算法。

3.4.1 最大似然估计(Maximum Likelihood Estimation, MLE)

最大似然估计的目标是找到一组参数,使得在这些参数下观察到的数据的概率最大。在逻辑回归中,我们通过最大化对数似然函数来估计模型参数。对数似然函数定义为:

[
\text{Log-Likelihood} = \sum_{i=1}^{N} \left[ y_i \log(p_i) + (1 - y_i) \log(1 - p_i) \right]
]

其中 ( p_i ) 是样本 ( i ) 的预测概率。通过最大化对数似然函数,我们可以获得最优的模型参数 ( \beta )。

3.4.2 梯度上升算法(Gradient Ascent)

梯度上升算法是一种优化算法,用于最大化对数似然函数。该算法通过迭代更新参数来寻找最优解。更新公式为:

[
\beta := \beta + \alpha \nabla_{\beta} \text{Log-Likelihood}
]

其中:

  • ( \alpha ) 是学习率,控制参数更新的步长。
  • ( \nabla_{\beta} \text{Log-Likelihood} ) 是对数似然函数关于参数 ( \beta ) 的梯度。

梯度上升算法的步骤包括:

  1. 初始化参数:通常将参数初始化为零或小的随机值。
  2. 计算预测概率:通过当前参数计算预测概率。
  3. 计算梯度:计算对数似然函数的梯度。
  4. 更新参数:根据梯度和学习率更新参数。
  5. 迭代优化:重复上述步骤,直到损失函数收敛或达到最大迭代次数。
import numpy as np
from scipy.special import expitdef sigmoid(z):return expit(z)def compute_cost(y, p):return -np.mean(y * np.log(p) + (1 - y) * np.log(1 - p))def gradient_ascent(X, y, learning_rate, num_iterations):m, n = X.shapebeta = np.zeros(n)for _ in range(num_iterations):predictions= sigmoid(np.dot(X, beta))error = y - predictionsgradient = np.dot(X.T, error) / mbeta += learning_rate * gradientreturn beta

3.5 评估指标

为了评估逻辑回归模型的性能,我们使用一系列指标来衡量模型的分类效果。常用的评估指标包括准确率、精确率与召回率、F1分数、ROC曲线及AUC值。

3.5.1 准确率(Accuracy)

准确率是最基本的评估指标,表示模型正确分类的样本占总样本的比例。其公式为:

[
\text{Accuracy} = \frac{\text{Number of Correct Predictions}}{\text{Total Number of Predictions}}
]

准确率适用于类别平衡的情况,但在类别不平衡的情况下,可能不能很好地反映模型的性能。

3.5.2 精确率(Precision)与召回率(Recall)
  • 精确率(Precision):表示被模型预测为正类的样本中,真正正类的比例。公式为:

    [
    \text{Precision} = \frac{\text{True Positives}}{\text{True Positives} + \text{False Positives}}
    ]

    精确率高意味着模型对正类样本的预测较为准确,假阳性率较低。

  • 召回率(Recall):表示所有实际正类样本中,被模型正确预测为正类的比例。公式为:

    [
    \text{Recall} = \frac{\text{True Positives}}{\text{True Positives} + \text{False Negatives}}
    ]

    召回率高意味着模型能正确识别更多的正类样本,假阴性率较低。

3.5.3 F1分数

F1分数是精确率和召回率的调和平均值,用于综合考虑模型的精确性和全面性。公式为:

[
\text{F1 Score} = 2 \times \frac{\text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}}
]

F1分数在类别不平衡的情况下特别有用,因为它考虑了假阳性和假阴性的影响。

3.5.4 ROC曲线与AUC值
  • ROC曲线(Receiver Operating Characteristic Curve):绘制真正率(True Positive Rate)与假正率(False Positive Rate)之间的关系。真正率计算公式为:

    [
    \text{True Positive Rate} = \frac{\text{True Positives}}{\text{True Positives} + \text{False Negatives}}
    ]

    假正率计算公式为:

    [
    \text{False Positive Rate} = \frac{\text{False Positives}}{\text{False Positives} + \text{True Negatives}}
    ]

    ROC曲线展示了模型在不同阈值下的性能。

  • AUC值(Area Under Curve):ROC曲线下的面积,表示模型区分正负样本的能力。AUC值越接近1,模型的性能越好。

import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve, aucdef plot_roc_curve(y_true, y_scores):fpr, tpr, _ = roc_curve(y_true, y_scores)roc_auc = auc(fpr, tpr)plt.figure()plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc)plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')plt.xlim([0.0, 1.0])plt.ylim([0.0, 1.05])plt.xlabel('False Positive Rate')plt.ylabel('True Positive Rate')plt.title('Receiver Operating Characteristic')plt.legend(loc="lower right")plt.show()

3.6 假设检验

假设检验用于评估模型参数的显著性,以确保特征对模型的影响是显著的。常用的检验方法包括Wald检验和尤尔检验。

3.6.1 Wald检验

Wald检验用于检验回归系数是否显著。其原理是计算每个回归系数的标准误差,并将系数与其标准误差的比值用于检验。Wald统计量的计算公式为:

[
W = \frac{\hat{\beta}_j}{\text{SE}(\hat{\beta}_j)} \sim \text{Normal}(0, 1)
]

其中,( \hat{\beta}_j ) 是第 ( j ) 个回归系数的估计值,( \text{SE}(\hat{\beta}_j) ) 是其标准误差。如果Wald统计量显著偏离零,则说明回归系数显著不为零,特征对目标变量有显著影响。

3.6.2 尤尔检验(Likelihood Ratio Test)

尤尔检验用于比较嵌套模型的拟合优度。其原理是比较全模型(包含所有特征)和简化模型(不包含某些特征)的对数似然值。尤尔检验的统计量计算公式为:

[
G^2 = -2 \left[ \text{Log-Likelihood}(\text{Simplified Model}) - \text{Log-Likelihood}(\text{Full Model}) \right]
]

该统计量服从卡方分布(Chi-Square Distribution)。如果尤尔统计量显著高于阈值,则说明简化模型的拟合效果显著差于全模型,即被省略的特征对模型有显著影响。

3.7 扩展与变体

逻辑回归有多种扩展和变体,可以处理更复杂的分类任务。

3.7.1 多项逻辑回归(Multinomial Logistic Regression)

多项逻辑回归用于处理多分类问题,即目标变量有多个类别。与二分类逻辑回归不同,多项逻辑回归预测每个类别的概率,并使用Softmax函数将线性组合映射到多个类别的概率分布。Softmax函数定义为:

[
P(Y=k|X) = \frac{e{\beta_kT X}}{\sum_{j=1}^{K} e{\beta_jT X}}
]

其中,( K ) 是类别总数,( \beta_k ) 是第 ( k ) 类的回归系数。

3.7.2 逐步回归(Stepwise Regression)

逐步回归是一种特征选择技术,通过逐步添加或删除特征来构建最优模型。它包括前向选择(从空模型开始,逐步添加特征)和后向淘汰(从全模型开始,逐步删除特征)。逐步回归可以帮助选择对模型预测最有用的特征,并提高模型的解释性和泛化能力。

from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegressiondef stepwise_selection(X, y):model = LogisticRegression()rfe = RFE(model, n_features_to_select=5)  # 选择5个特征fit = rfe.fit(X, y)return fit.support_# 示例用法
# selected_features = stepwise_selection(X, y)
# print("Selected features:", selected_features)

4. 线性回归与逻辑回归的比较

在机器学习领域,线性回归和逻辑回归是两种非常基础但极其重要的回归模型。尽管它们有着相似的名字,但在实际应用和理论基础上却存在着显著的差异。在本部分,我们将详细比较线性回归和逻辑回归,探讨它们在目标变量类型、模型假设、损失函数和应用场景等方面的异同,以帮助读者更好地理解这两种回归方法的特点和适用范围。

4.1 目标变量类型

线性回归

线性回归模型主要用于处理连续目标变量。在这种模型中,预测的目标变量(也称为因变量或响应变量)是一个连续的数值。例如,我们可以使用线性回归预测房价、气温或销售额等连续值。这种模型的主要目标是拟合一条最佳的直线,以最小化预测值与实际值之间的差距。

逻辑回归

与线性回归不同,逻辑回归模型用于处理离散目标变量,特别是二分类问题。离散目标变量通常是有限个类别中的一个。例如,我们可以使用逻辑回归来预测一个客户是否会购买某个产品(购买与否),或者某个邮件是否是垃圾邮件。逻辑回归通过计算样本属于某个类别的概率,并使用阈值将概率转换为类别标签。

回归类型目标变量类型
线性回归连续变量
逻辑回归离散变量(通常是二分类)

4.2 模型假设

线性回归模型假设

线性回归模型的核心假设是线性关系。这意味着预测变量(自变量)与目标变量之间的关系是线性的。线性回归模型试图通过一个线性方程来表示这种关系:

[ y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \cdots + \beta_n x_n + \epsilon ]

其中,( y ) 是目标变量,( x_1, x_2, \ldots, x_n ) 是自变量,( \beta_0, \beta_1, \beta_2, \ldots, \beta_n ) 是回归系数,( \epsilon ) 是误差项。线性回归假设预测值与实际值之间的差异(即残差)是均值为零、方差为常数的正态分布。

逻辑回归模型假设

逻辑回归模型假设非线性关系。具体来说,逻辑回归使用Sigmoid函数(又称为逻辑函数)将线性组合的预测结果映射到0到1的概率范围内。Sigmoid函数的形式为:

[ \sigma(z) = \frac{1}{1 + e^{-z}} ]

其中,( z ) 是线性组合的结果(即 ( \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \cdots + \beta_n x_n ))。逻辑回归模型的目标是最大化似然函数,从而找到最佳的回归系数,使得预测的类别概率与实际类别的匹配程度最佳。

回归类型模型假设
线性回归线性关系
逻辑回归Sigmoid函数映射到概率空间

4.3 损失函数的不同

线性回归的损失函数

线性回归模型的损失函数通常是均方误差(Mean Squared Error, MSE),它测量了预测值与实际值之间的平方差的平均值。均方误差的公式为:

[ \text{MSE} = \frac{1}{n} \sum_{i=1}^n (y_i - \hat{y}_i)^2 ]

其中,( y_i ) 是实际值,( \hat{y}_i ) 是预测值,( n ) 是样本数量。均方误差的目标是最小化这种平方差,使得模型对数据的拟合度最大化。

逻辑回归的损失函数

逻辑回归模型使用对数损失(Log Loss,也称为交叉熵损失)来衡量模型的性能。对数损失的公式为:

[ \text{Log Loss} = -\frac{1}{n} \sum_{i=1}^n [y_i \log(\hat{p}_i) + (1 - y_i) \log(1 - \hat{p}_i)] ]

其中,( y_i ) 是实际类别标签(0或1),( \hat{p}_i ) 是样本 ( i ) 属于类别1的预测概率。对数损失度量了模型预测的概率分布与实际类别分布之间的差异,目标是最小化这个损失函数,从而提高模型的分类性能。

回归类型损失函数
线性回归均方误差 (MSE)
逻辑回归对数损失 (Log Loss)

4.4 应用场景

线性回归的应用场景

线性回归在许多实际应用中表现出色,尤其是在预测连续变量时。常见的应用场景包括:

  • 房价预测:利用房屋的各种特征(如面积、房间数量、位置等)来预测房价。
  • 销售预测:根据历史销售数据和市场趋势来预测未来的销售额。
  • 气候预测:根据历史气候数据预测未来的气温、降水量等。

然而,线性回归也有一定的限制。例如,它无法有效处理非线性关系,且对异常值非常敏感。

逻辑回归的应用场景

逻辑回归主要用于分类任务,特别是在需要概率预测的情况下。常见的应用场景包括:

  • 疾病预测:根据患者的症状和体检数据预测某种疾病的发生概率。
  • 信用评分:根据客户的信用历史和财务状况预测其违约的概率。
  • 市场营销:根据客户的行为和特征预测他们是否会响应某个营销活动。

逻辑回归模型适合处理线性可分的分类问题,但在面对复杂的非线性分类任务时可能表现不佳。

应用场景线性回归逻辑回归
房价预测适合不适合
销售预测适合不适合
疾病预测不适合适合
信用评分不适合适合
市场营销不适合适合

4.5 结论

线性回归和逻辑回归是两种基本但功能强大的回归模型,它们在目标变量类型、模型假设、损失函数和应用场景等方面具有明显的不同。线性回归适用于连续目标变量的预测,并且其假设和损失函数简单明了。而逻辑回归则适用于分类问题,能够处理离散的目标变量,并通过对数损失函数来优化模型。了解这两种回归模型的特点和适用场景,可以帮助我们在实际应用中选择最合适的模型来解决具体问题。

5. 实践中的应用与案例分析

5.1 数据预处理

数据预处理是确保机器学习模型表现优异的基础。处理不当的特征可能导致模型性能不佳,因此了解和掌握数据预处理的技术至关重要。

5.1.1 特征标准化(Feature Scaling)

特征标准化的目的是将不同特征的数值范围转化为相同的标准,以提高模型的训练效率和性能。标准化方法主要包括Z-score标准化和Min-Max标准化。

Z-score标准化
Z-score标准化将特征的均值调整为0,方差调整为1,使得特征具有标准正态分布。公式如下:

[ z = \frac{x - \mu}{\sigma} ]

其中,(x) 是原始特征值,(\mu) 是特征的均值,(\sigma) 是特征的标准差。

Min-Max标准化
Min-Max标准化将特征的值缩放到[0, 1]区间。公式如下:

[ x’ = \frac{x - \min(x)}{\max(x) - \min(x)} ]

这种方法在数据分布非常不均衡时较为有效。

示例代码:

from sklearn.preprocessing import StandardScaler, MinMaxScaler
import pandas as pd# 创建示例数据
data = pd.DataFrame({'面积': [1500, 2500, 3500, 4500],'房间数量': [3, 4, 5, 6]
})# Z-score标准化
scaler = StandardScaler()
data_scaled_z = scaler.fit_transform(data)
data_scaled_z = pd.DataFrame(data_scaled_z, columns=data.columns)# Min-Max标准化
scaler = MinMaxScaler()
data_scaled_mm = scaler.fit_transform(data)
data_scaled_mm = pd.DataFrame(data_scaled_mm, columns=data.columns)print("Z-score标准化结果:\n", data_scaled_z)
print("Min-Max标准化结果:\n", data_scaled_mm)

选择标准化方法的注意事项

  • Z-score标准化适用于特征数据呈正态分布的情况。
  • Min-Max标准化适用于特征范围已知且数据分布范围限制在特定区间的情况。
5.1.2 特征选择与工程(Feature Engineering)

特征选择与工程的目标是从原始数据中提取或选择出对模型预测有帮助的特征。特征工程可以显著提高模型的性能。

特征选择
特征选择旨在减少模型的复杂度和过拟合风险。常用方法包括:

  • 过滤法(Filter Methods):通过统计指标如方差、相关系数等选择特征。
  • 包裹法(Wrapper Methods):通过训练和评估模型来选择特征,例如递归特征消除(RFE)。
  • 嵌入法(Embedded Methods):在模型训练过程中进行特征选择,如基于L1正则化的特征选择(Lasso回归)。

特征工程
特征工程包括创建新的特征,或者将现有特征转化为对模型更有用的形式。例如,在房价预测中,可以创建一个“房龄”特征,表示房屋建造的时间,从而可能揭示与房价的关系。

示例代码:

from sklearn.feature_selection import RFE
from sklearn.linear_model import LinearRegression# 创建示例数据
X = pd.DataFrame({'面积': [1500, 2500, 3500, 4500],'房间数量': [3, 4, 5, 6],'房龄': [10, 5, 20, 15]
})
y = pd.Series([300000, 450000, 600000, 750000])# 特征选择:递归特征消除
model = LinearRegression()
selector = RFE(model, n_features_to_select=2)
selector = selector.fit(X, y)print("选择的特征:", X.columns[selector.support_])

特征选择的注意事项

  • 特征选择可以帮助减少数据维度,降低模型复杂性。
  • 特征工程能通过创造性地转换特征来显著提升模型性能。

5.2 模型评估与调优

在构建模型后,对其进行评估和调优是确保其性能和泛化能力的关键步骤。评估方法包括交叉验证,调优方法包括超参数调整。

5.2.1 交叉验证(Cross-Validation)

交叉验证是一种模型验证方法,通过将数据集分成多个子集(折),轮流使用每个子集作为验证集,其余作为训练集。这种方法能够有效地评估模型的泛化能力。

常见的交叉验证方法

  • k折交叉验证:将数据集分成k个子集,依次用每个子集作为验证集,其余k-1个子集作为训练集。
  • 留一交叉验证(Leave-One-Out, LOOCV):每次只留一个样本作为验证集,其余作为训练集,适用于数据量较小的情况。

示例代码:

from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LinearRegression# 创建示例数据
X = pd.DataFrame({'面积': [1500, 2500, 3500, 4500],'房间数量': [3, 4, 5, 6],'房龄': [10, 5, 20, 15]
})
y = pd.Series([300000, 450000, 600000, 750000])# 线性回归模型
model = LinearRegression()# 进行k折交叉验证
scores = cross_val_score(model, X, y, cv=3)
print("交叉验证的平均分数:", scores.mean())

交叉验证的注意事项

  • k折交叉验证能有效减少模型的过拟合现象。
  • LOOCV适用于样本较少的情况,但计算开销较大。
5.2.2 超参数调整

超参数调整是优化模型性能的另一关键步骤。超参数是模型训练前需要设定的参数,例如线性回归中的正则化参数,逻辑回归中的C参数。

网格搜索(Grid Search)
网格搜索通过穷举所有可能的超参数组合,找出最佳的参数组合。可以使用交叉验证来评估每组参数的性能。

随机搜索(Random Search)
随机搜索通过随机选择超参数组合进行测试,通常比网格搜索更高效,特别是当超参数空间非常大时。

示例代码:

from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import LogisticRegression# 创建示例数据
X = pd.DataFrame({'访问频率': [10, 20, 30, 40],'服务投诉次数': [1, 2, 3, 4]
})
y = pd.Series([0, 1, 1, 0])# 逻辑回归模型
model = LogisticRegression()# 超参数网格
param_grid = {'C': [0.1, 1, 10],'penalty': ['l1', 'l2']
}# 网格搜索
grid_search = GridSearchCV(model, param_grid, cv=3)
grid_search.fit(X, y)print("最佳超参数组合:", grid_search.best_params_)

超参数调整的注意事项

  • 网格搜索适用于超参数空间较小的情况,计算开销较大。
  • 随机搜索适用于超参数空间较大或计算资源有限的情况。

5.3 实际案例

5.3.1 线性回归案例:房价预测

房价预测是线性回归的经典应用场景。通过分析房屋特征数据(如面积、房间数量、房龄等),我们可以建立一个线性回归模型来预测房价。

数据准备
收集房屋的特征数据和对应的房价,并进行数据预处理和特征选择。

模型训练
使用线性回归模型进行训练,评估模型的性能,使用交叉验证来避免过拟合。

示例代码:

from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split# 创建示例数据
X = pd.DataFrame({'面积': [1500, 2500, 3500, 4500],'房间数量': [3, 4, 5, 6],'房龄': [10, 5, 20, 15]
})
y = pd.Series([300000, 450000, 600000, 750000])# 数据分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 模型训练
model = LinearRegression()
model.fit(X_train, y_train)# 模型预测
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)print("均方误差:", mse)

分析

  • 房价预测模型能够帮助房地产公司根据房屋特征预测价格,为买卖双方提供参考。
  • 特征重要性分析能够揭示哪些特征对房价的影响最大。
5.3.2 逻辑回归案例:客户流失预测

客户流失预测是逻辑回归的常见应用场景。通过分析客户的行为数据(如访问频率、服务投诉次数等),可以建立逻辑回归模型来预测客户是否会流失。

数据准备
收集客户行为数据和流失标签,进行数据清洗和特征工程。

模型训练
使用逻辑回归模型进行训练,评估模型性能,利用交叉验证和超参数调优来提高模型的准确性。

示例代码:

from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report
from sklearn.model_selection import train_test_split# 创建示例数据
X = pd.DataFrame({'访问频率': [10, 20, 30, 40],'服务投诉次数': [1, 2, 3, 4]
})
y = pd.Series([0, 1, 1, 0])# 数据分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 模型训练
model = LogisticRegression()
model.fit(X_train, y_train)# 模型预测
y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred))

分析

  • 客户流失预测模型能够帮助企业识别潜在流失客户,制定挽留策略。
  • 模型的预测结果可以用于制定有针对性的营销和客户服务计划。

结论

在实际应用中,线性回归和逻辑回归模型的有效性不仅取决于算法本身,还依赖于数据预处理、模型评估与调优等多个环节。通过合理的数据预处理、准确的特征选择和工程、有效的模型评估与调优,可以显著提升模型的性能和可靠性。实际案例中的分析展示了如何将理论应用于实践,解决现实世界中的复杂问题。

相关文章:

线性回归和逻辑回归揭示数据的隐藏模式:理论与实践全解析

机器学习之线性回归和逻辑回归 1. 简介1.1 机器学习概述1.2 监督学习的定义与重要性1.3 线性回归和逻辑回归在监督学习中的作用1.3.1 线性回归1.3.2 逻辑回归 2. 线性回归(Linear Regression)2.1 定义与目标2.1.1 回归问题的定义2.1.2 预测连续目标变量 …...

掌握采购询价软件:高效比较供应商报价的技巧

在企业运营中,获取所需的产品往往是一项复杂且耗时的任务,这涉及多个环节和流程。然而,借助电子采购询价(RFQ)系统,许多原本需要采购员手动完成的任务可以自动化运行,从而提高了效率。 那么问题…...

AMQP-核心概念-终章

本文参考以下链接摘录翻译: https://www.rabbitmq.com/tutorials/amqp-concepts 连接(Connections) AMQP 0-9-1连接通常是长期保持的。AMQP 0-9-1是一个应用级别的协议,它使用TCP来实现可靠传输。连接使用认证且可以使用TLS保护…...

在WPF中使用WebView2详解

Microsoft Edge WebView2 Microsoft Edge WebView2 控件允许在本机应用中嵌入 web 技术(HTML、CSS 以及 JavaScript)。 WebView2 控件使用 Microsoft Edge 作为绘制引擎,以在本机应用中显示 web 内容。 使用 WebView2 可以在本机应用的不同部分嵌入 Web 代码&…...

僵尸进程的例子

以下是一个简单的C语言程序示例&#xff0c;该程序将创建一个子进程&#xff0c;然后子进程退出&#xff0c;但是父进程不会调用wait()或waitpid()来回收子进程的状态&#xff0c;从而使得子进程成为僵尸进程。 #include <stdio.h> #include <stdlib.h> #include …...

消息中间件分享

消息中间件分享 1 为什么使用消息队列2 消息队列有什么缺点3 如何保证消息队列的高可用4 如何处理消息丢失的问题?5 如何保证消息的顺序性1 为什么使用消息队列 解耦、异步、削峰 解耦 不使用中间件的场景 使用中间件的场景 异步 不使用中间件 使用中间件 削峰 不使…...

12. kubernetes调度——污点Taint和容忍Toleration

kubernetes调度——污点Taint和容忍Toleration 一、通过节点属性调度1、节点名称2、节点标签2.1 查看节点标签2.2 添加标签2.3 修改标签2.4 删除标签2.5 通过节点标签进行调度 二、污点Taint和容忍Toleration1、污点Taint1.1 查看Master节点的污点1.2 添加污点1.3 删除污点 2、…...

第100+18步 ChatGPT学习:R实现SVM分类

基于R 4.2.2版本演示 一、写在前面 有不少大佬问做机器学习分类能不能用R语言&#xff0c;不想学Python咯。 答曰&#xff1a;可&#xff01;用GPT或者Kimi转一下就得了呗。 加上最近也没啥内容写了&#xff0c;就帮各位搬运一下吧。 二、R代码实现SVM分类 &#xff08;1&a…...

react函数学习——useState函数

在 React 中&#xff0c;useState 是一个钩子&#xff08;hook&#xff09;&#xff0c;用于在函数组件中添加状态管理功能。它返回一个数组&#xff0c;包含两个元素&#xff1a; 当前状态值&#xff08;selectedValue&#xff09;&#xff1a;这是状态的当前值。更新状态的函…...

方天云智慧平台系统 GetCompanyItem SQL注入漏洞复现

0x01 产品简介 方天云智慧平台系统,作为方天科技公司的重要产品,是一款面向企业全流程的业务管理功能平台,集成了ERP(企业资源规划)、MES(车间执行系统)、APS(先进规划与排程)、PLM(产品生命周期)、CRM(客户关系管理)等多种功能模块,旨在通过云端服务为企业提供…...

C语言同时在一行声明指针和整型变量

如果这么写&#xff0c; int *f, g; 并没有声明2个指针&#xff0c;编译器自己会识别&#xff0c;f是一个指针&#xff0c;g是一个整型变量&#xff1b; void CTszbView::OnDraw(CDC* pDC) {CTszbDoc* pDoc GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for nat…...

thinkphp框架远程代码执行

一、环境 vulfocus网上自行下载 启动命令&#xff1a; docker run -d --privileged -p 8081:80 -v /var/run/docker.sock:/var/run/docker.sock -e VUL_IP192.168.131.144 8e55f85571c8 一定添加--privileged不然只能拉取环境首页不显示 二、thinkphp远程代码执行 首页&a…...

【公式】博弈论中的核心算法:纳什均衡公式解析

博弈论中的核心算法:纳什均衡公式解析 纳什均衡的基本概念 纳什均衡是博弈论中的一个核心概念,它描述了一个博弈中所有参与者都无法通过单方面改变自己的策略来增加收益的状态。在纳什均衡状态下,每个参与者的策略都是对其他参与者策略的最优反应。纳什均衡的公式可以表示…...

计算机网络面试题2

WebSocket相关知识 什么是WebSocket? WebSocket是一种基于TCP连接的全双工通信协议&#xff0c;即客户端和服务器可以同时发送和接收数据 WebSocket和HTTP有什么区别&#xff1f; 1.WebSocket是双向通信协议&#xff0c;HTTP是单向通信协议 2.WebSocket使用ws://或者wss:/…...

Linux网络——深入理解传入层协议TCP

目录 一、前导知识 1.1 TCP协议段格式 1.2 TCP全双工本质 二、三次握手 2.1 标记位 2.2 三次握手 2.3 捎带应答 2.4 标记位 RST 三、四次挥手 3.1 标记位 FIN 四、确认应答(ACK)机制 五、超时重传机制 六 TCP 流量控制 6.1 16位窗口大小 6.2 标记位 PSH 6.3 标记…...

快速搞定分布式RabbitMQ---RabbitMQ进阶与实战

本篇内容是本人精心整理&#xff1b;主要讲述RabbitMQ的核心特性&#xff1b;RabbitMQ的环境搭建与控制台的详解&#xff1b;RabbitMQ的核心API&#xff1b;RabbitMQ的高级特性;RabbitMQ集群的搭建&#xff1b;还会做RabbitMQ和Springboot的整合&#xff1b;内容会比较多&#…...

5万字长文吃透快手大数据面试题及参考答案(持续更新)

目录 Flink为什么用aggregate()不用process() 为什么使用aggregate() 为什么不用process() 自定义UDF, UDTF实现步骤,有哪些方法?UDTF中的ObjectInspector了解吗? 自定义UDF实现步骤 自定义UDTF实现步骤 UDTF中的ObjectInspector Spark Streaming和Flink的区别 Flu…...

WordPress原创插件:启用关闭经典编辑器和小工具

WordPress原创插件&#xff1a;启用关闭经典编辑器和小工具 主要功能 如图所示&#xff0c;用于启用或禁用经典编辑器和经典小工具&#xff0c;以替代Gutenberg编辑器。 插件下载 https://download.csdn.net/download/huayula/89592822...

萝卜快跑:自动驾驶的先锋与挑战

萝卜快跑&#xff1a;自动驾驶的先锋与挑战 萝卜快跑作为自动驾驶领域的重要参与者&#xff0c;被视为自动驾驶的先锋。它代表了自动驾驶技术在实际应用中的重要突破&#xff0c;为人们的出行方式带来了革新。萝卜快跑的发展展示了自动驾驶技术的巨大潜力&#xff0c;如提高交通…...

得到xml所有label 名字和数量 get_xml_lab.py,get_json_lab.py

import os import xml.etree.ElementTree as ETrootdir2 r"F:\images3\xmls" file_list os.listdir(rootdir2) # 列出文件夹下所有的目录与文件# 初始化字典 classes_dict {}for file_name in file_list:path os.path.join(rootdir2, file_name)if os.path.isfi…...

数据结构算法-排序(二)

插入排序 插入排序核心 假设数组中的一部数据已经排好序&#xff0c;要插入的数据和这些数据进行比较&#xff0c;直到找到合适的位置插入新数据。 插入排序步骤 插入排序主要有以下步骤构成&#xff1a; 假设有序&#xff0c;我们假设**a[0]**已经排好序待插入的数据为a[j]…...

Linux安装与配置

下载VMware 首先我们需要下载一个叫VMware的软件&#xff1a; 进入官方下载&#xff0c;地址&#xff1a;https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evaluation.html选择与自己电脑版本适配的VMware版本【 输入许可证密钥 MC60H-DWHD5-H80U9-6V85…...

AI赋能交通治理:非机动车监测识别技术在城市街道安全管理中的应用

引言 城市交通的顺畅与安全是城市管理的重要组成部分。非机动车如自行车、电动车、摩托车等在城市交通中扮演着重要角色&#xff0c;但同时也带来了管理上的挑战。尤其是在机动车道上误入非机动车的现象&#xff0c;不仅影响交通秩序&#xff0c;还可能引发交通事故。思通数科…...

水电站泄洪放水预警广播系统解决方案

一、背景 在现代水利工程管理中&#xff0c;水电站泄洪放水预警广播系统扮演着至关重要的角色。这一系统不仅关系到水电站的安全运行&#xff0c;也直接关系到下游地区人民群众的生命财产安全。因此&#xff0c;设计一套完善、高效、可靠的泄洪放水预警广播系统显得尤为必要。…...

【Django】ajax和django接口交互(获取新密码)

文章目录 一、需求1. 效果图 二、实验1. 写get接口后端2. 写html后端3. 写前端4. 测试 一、需求 1. 效果图 二、实验 1. 写get接口后端 写views import string import random def getnewpwd(request):words list(string.ascii_lowercasestring.ascii_uppercasestring.digi…...

Logback 日志打印导致程序崩溃的实战分析

在软件开发和运维中&#xff0c;日志记录是必不可少的一环&#xff0c;帮我们追踪程序的行为&#xff0c;定位问题所在。然而&#xff0c;有时日志本身却可能成为问题的根源。本文将通过一个真实的案例来探讨 Logback 日志系统中的一个常见问题&#xff0c;当并发量大&#xff…...

新加坡 Numen Cyber 与香港光环云数据有限公司达成战略合作

新加坡本土网络安全公司 Numen Cyber 宣布与香港光环云数据有限公司&#xff08;简称“光环云香港”&#xff09;建立战略合作伙伴关系。此次合作将重点放在云服务器和云服务业务场景的安全领域。 Numen Cyber&#xff0c;作为一家致力于为客户提供专业网络安全服务和一体化安…...

Laravel魔术方法:框架的隐秘力量

Laravel魔术方法&#xff1a;框架的隐秘力量 引言 Laravel是一个充满魔力的PHP框架&#xff0c;它通过许多巧妙的设计让Web开发变得简洁而优雅。在Laravel中&#xff0c;魔术方法&#xff08;Magic Methods&#xff09;是这些魔力的体现之一。魔术方法是PHP预定义的、可以在类…...

系统复习Java日志体系

一&#xff0c;我们采用硬编码体验一下几个使用比较多的日志 分别导入几种日志的 jar 包 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSch…...

网络管理linux命令

在Linux系统中&#xff0c;有许多常用的网络命令用于检查网络配置、诊断网络问题以及管理网络连接。以下是一些常用的网络命令及其简要说明&#xff1a; ifconfig 显示或配置网络接口。 ifconfigip 用于显示和操作路由、设备、策略路由和隧道。 ip addr show ip link show ip …...

PowerDNS架构解析与安装部署指南

1、背景介绍 目前公司使用PowerDNS进行DNS管理&#xff0c;但由于采用的是单节点架构&#xff0c;存在不可用的风险。为提升系统的稳定性和可靠性&#xff0c;我们计划对现有架构进行重构。通过引入高可用性设计&#xff0c;我们将优化系统架构&#xff0c;使其能够在故障情况…...

Ubuntu 20.04.6 安装 Elasticsearch

1.准备 -- 系统更新 sudo apt update sudo apt upgrade -- 安装vim 文本编辑器 sudo apt install vim-- jdk 版本确认 java -versionjdk 安装可以参照&#xff1a;https://blog.csdn.net/CsethCRM/article/details/140768670 2.官方下载Elasticsearch 官方地址&#xff1a;h…...

Python for循环迭代原理(迭代器 Iterator)

在使用Python时&#xff0c;我们经常会使用for循环来访问容器对象&#xff08;列表、字符、字典等&#xff09;中的元素。其幕后实际是通过迭代协议来完成的&#xff0c;迭代是一种依次访问对象中元素的方式&#xff0c;for循环在对象上调用iter()函数生成一个迭代器&#xff0…...

通信原理-思科实验四:静态路由项配置实验

实验四 静态路由项配置实验 一&#xff1a;实验内容 二&#xff1a;实验目的 三、实验原理 四、实验步骤 选择三个2811型号的路由器 R1、R2、R3 路由器默认只有两个快速以太网接口&#xff0c;为路由器R1和R3增加快速以太网接口模块NM-1FE-TX&#xff0c;安装后检查路由器的接…...

ngzero使用外部的svg图标

1.将图标svg下下来&#xff0c;放到项目中&#xff0c;路径如下所示 之后 <span nz-icon [nzIconfont]“‘icon-zhibiao’”>使用 2.直接使用阿里的图标 先将你要用的图标放入购物车&#xff0c;再将购物车的图标添加到你主页的我的项目中 之后代码中在startupService…...

逆矩阵、秩

在数学的广阔天地中&#xff0c;线性代数扮演着至关重要的角色。它不仅是现代科学和工程学的基石&#xff0c;也是理解复杂数据结构的关键。本文将深入探讨线性代数中的几个核心概念&#xff1a;逆矩阵、秩、列空间和零空间&#xff0c;通过详细的解释和丰富的实例&#xff0c;…...

pc端小程序抓包修改数据相关记录

看了很多关于小程序抓包的 废话不多说直接演示 一、小程序抓包 1.所需要的工具 官网下载即可&#xff1a; https://www.charlesproxy.com/latest-release/download.do 我这里用的 Charles-proxy-4.6.6-win64 需要中文破解参考 https://www.jianshu.com/p/4d67dbbf2f6a 2、破…...

用Python打造精彩动画与视频.2.1 Python基础语法概述

2.1 Python基础语法概述 Python作为一门功能强大且易于学习的编程语言&#xff0c;其基础语法简单直观&#xff0c;非常适合初学者入门。这一节将带你了解Python的基本语法规则&#xff0c;为后续制作动画和视频打下坚实的基础。 1. 变量与数据类型 Python的变量不需要提前声…...

Golang高效合并(拼接)多个gzip压缩文件

有时我们可能会遇到需要把多个 gzip 文件合并成单个 gzip 文件的场景&#xff0c;最简单最容易的方式是把每个gzip文件都先解压&#xff0c;然后合并成一个文件后再次进行压缩&#xff0c;最终得到我们想要的结果&#xff0c;但这种先解压后压缩的方式显然效率不高&#xff0c;…...

MySQL数据库-基本概念

数据 描述事物的符号记录包括属组、文字、图形、图像、声音、档案记录等以“记录”形式按统一的格式进行存储 表 将不同的记录组织在一起用来存储具体数据 数据库 表的集合&#xff0c;是以一定的组织方式存储的相互有关的数据集合 数据库管理系统&#xff08;DBMS&#…...

【无标题】web+http协议+nginx搭建+nginx反向代理(环境准备)

一&#xff0e;Web 为用户提供互联网上浏览信息的服务&#xff0c;web服务是动态的&#xff0c;可交互的。 1.安装httpd yum -y install httpd 2.启动 systemctl start httpd 3.关闭防火墙 systemctl stop firewalld [rootrs html]# echo "我手机号是" > …...

c-periphery RS485串口库文档serial.md(serial.h)(非阻塞读)(VMIN、VTIME)

c-peripheryhttps://github.com/vsergeev/c-periphery 文章目录 NAMESYNOPSISENUMERATIONS关于奇偶校验枚举类型 DESCRIPTIONserial_new()serial_open()关于流控制软件流控制&#xff08;XON/XOFF&#xff09;硬件流控制&#xff08;RTS/CTS&#xff09;选择流控制方法 serial_…...

Matlab arrayfun 与 bsxfun——提高编程效率的利器!

许多人知道 MATLAB 向量化编程&#xff0c;少用 for 循环 可以提高代码运行效率&#xff0c;但关于代码紧凑化编程&#xff0c; arrayfun 与 bsxfun 两个重要函数却鲜有人能够用好&#xff0c;今天针对这两个函数举例说明其威力。 Matlab arrayfun 概述 arrayfun 是 Matlab …...

【Unity编辑器拓展】GraphView自定义可视化节点

1、创建节点区域脚本 其中的new class UxmlFactory&#xff0c;可以让该元素显示在UI Builder中&#xff0c;我们就可以在Library-Project中看到我们新建的这两个UI元素&#xff0c;就可以拖入我们的UI窗口编辑了 public class NodeTreeViewer : GraphView {public new class…...

教程系列4 | 趋动云『社区项目』极速体验 LivePortrait 人脸表情“移花接木”大法

LivePortrait LivePortrait 由快手可灵大模型团队开源&#xff0c;只需 1 张原图就能生成动态视频。 LivePortrait 的核心优势在于其卓越的表情"迁移"技术&#xff0c;能够令静态图像中的人物瞬间焕发活力&#xff0c;无论是眨眼、微笑还是转头&#xff0c;皆栩栩如…...

WGS84、GCJ-02、BD09三大坐标系详解

文章目录 前言WGS84坐标系定义应用WGS84 Web 墨卡托投影 GCJ-02坐标系&#xff08;火星坐标系&#xff09;定义应用GCJ-02经纬度投影与Web墨卡托投影 BD09坐标系&#xff08;百度坐标系&#xff09;定义应用BD09经纬度投影与Web墨卡托投影 坐标系之间的区别与注意事项总结 前言…...

css上下动画 和淡化

.popup_hidden_bg { transition: opacity .5s ease-out; opacity: 0; pointer-events: none; /* 防止在隐藏时仍然能点击 */ } keyframes popupShop { from { transform: translateY(100%); opacity: 0; } to {transform: translateY(0);opacity: 1; }} keyframes popupHidd…...

深入解析C#中的URI和URL编码:理解EscapeDataString、EscapeUriString和UrlEncode的区别及字符编码错误处理

在C#中&#xff0c;处理URI&#xff08;统一资源标识符&#xff09;和URL&#xff08;统一资源定位符&#xff09;时&#xff0c;可以使用Uri.EscapeDataString、Uri.EscapeUriString和HttpUtility.UrlEncode&#xff08;或WebUtility.UrlEncode&#xff09;方法来编码字符串。…...

【CSS】给图片设置 max-width

.logo img{width:100%; /* 缩成父盒子的100% */max-width:100%; /* (谁小用谁的百分之百) *//* max-width:100%;【1】图片比盒子大&#xff0c;缩成父盒子的100%【2】图片比盒子小&#xff0c;图片自身的100%*/ }示例 设置样式 .el-image {width: 100%;max-width: 100%;max-…...

区块链——代码格式检查(prettier、solhint)

一、引入依赖 // 导入prettier prettier-plugin-solidity yarn add --dev prettier prettier-plugin-solidity yarn add --dev solhint二、创建.prettierrc文件 {"tabWidth": 2,"semi": false,"useTabs": false,"singleQuote": fals…...