机器学习中的决策树算法——从理论到实践完整指南
决策树在机器学习中的应用与原理
- 1. 介绍
- 1.1 定义和基本概念
- 1.2 决策树在机器学习中的角色和重要性
- 2. 决策树的结构
- 2.1 节点、分支、叶子节点的定义和功能
- 2.1.1 节点
- 2.1.2 分支
- 2.1.3 叶子节点
- 2.2 树的深度和宽度的影响
- 2.2.1 树的深度
- 2.2.2 树的宽度
- 3. 决策树的构建方法
- 3.1 基于信息增益的决策树
- 3.1.1 熵与信息增益的概念
- 3.1.2 ID3算法详解
- 3.2 基于基尼系数的决策树
- 3.2.1 基尼不纯度的概念
- 3.2.2 CART算法详解
- 4. 决策树的应用和实际案例
- 4.1 分类问题中的应用案例
- 4.1.1 医疗诊断
- 4.1.2 金融风险评估
- 4.1.3 市场营销定位
- 4.2 回归问题中的应用案例
- 4.2.1 房价预测
- 4.2.2 股票价格趋势分析
- 4.2.3 气候变化分析
- 5. 决策树与其他机器学习算法的比较
- 5.1 决策树与支持向量机(SVM)的对比
- 5.2 决策树与神经网络的对比
- 5.3 何时选择决策树作为优选算法的场景分析
1. 介绍
当谈到机器学习中的决策树时,我们首先需要理解它的定义、基本概念以及它在机器学习领域中的角色和重要性。决策树是一种经典且强大的预测建模技术,其简单直观的结构使其在数据分析和预测建模中得到广泛应用。本文将详细探讨决策树的核心概念、工作原理及其在实际应用中的优缺点。

1.1 定义和基本概念
决策树是一种基于树结构的预测模型,用于将数据集中的实例划分到叶子节点,每个叶子节点代表一个类别标签或一个连续值。其核心思想是通过一系列的分裂节点和决策来完成对实例的分类或预测。在决策树中,每个内部节点表示一个属性测试,每条边代表一个测试结果,而每个叶子节点存放一个类别标签或者预测值。决策树的构建过程是一个递归地选择最佳属性进行分裂的过程,直到满足某个停止条件为止。
决策树的基本概念包括:
- 根节点:整棵树的起始节点,包含数据集中所有样本。
- 内部节点:代表一个属性上的测试。
- 叶子节点:代表一个类别标签或者最终的预测值。
- 分裂:决策树构建过程中,根据属性的取值将数据集划分成更小的子集。
- 决策规则:由根节点到叶子节点的路径构成了对实例分类的决策规则。
决策树的建立基于“分而治之”的思想,通过选择最能区分不同类别的属性进行节点分裂,从而实现对数据集的分类或回归预测。
1.2 决策树在机器学习中的角色和重要性
决策树作为一种机器学习算法,在实际应用中具有重要的角色和广泛的应用。其主要优点包括:
- 可解释性强:决策树模型生成的规则清晰明了,易于理解和解释,能够为决策提供直观的依据。
- 对数据的处理能力强:能够处理各种类型的数据,包括数值型和分类型数据,且不需要对数据过多的预处理。
- 能够处理多输出问题:能够自然地扩展到多输出任务,即输出变量可以是多维的。
- 计算复杂度较低:决策树的预测复杂度是一个对数函数,即 ( O(\log m) ),其中 ( m ) 是样本数目。
决策树的重要性不仅体现在其模型性能上,更体现在其在实际应用中的多样化应用场景:
- 分类问题:如信用评分、医学诊断等。
- 回归问题:如房价预测、销量预测等。
- 特征选择:通过分析决策树节点分裂的重要性,可以帮助选择最优的特征集合。
- 异常检测:通过判断实例所处的叶子节点来识别异常实例。
决策树虽然有诸多优点,但也存在一些挑战和局限性:
- 过拟合问题:容易在训练数据上表现很好,但在测试数据上泛化能力较差。
- 数据不平衡:对于类别不平衡的数据集,决策树容易偏向于占主导地位的类别。
- 连续性和平滑性:决策树偏向于生成棱角分明的决策边界,对连续性和平滑性要求高的数据可能表现不佳。
综上所述,决策树作为一种经典的机器学习算法,在理论研究和实际应用中都有着深远的影响和重要的地位。它不仅为数据分析提供了一个直观、解释性强的工具,同时也推动了机器学习领域对更复杂、更高效算法探索的进一步深入。
2. 决策树的结构
决策树是一种重要的监督学习算法,它通过树状结构对数据进行分类或回归。决策树的结构包括节点、分支和叶子节点,这些元素共同构成了决策树的完整模型。下面我们将详细探讨每个组成部分的定义、功能以及树的深度和宽度对模型性能的影响。
2.1 节点、分支、叶子节点的定义和功能
2.1.1 节点
在决策树中,节点是组成树结构的基本单元。节点主要分为两类:内部节点和叶子节点。
内部节点:
-
定义:内部节点是决策树中用于数据分裂的位置。每个内部节点都包含一个特征测试条件,这个条件用于将数据集分成两个或多个子集。
-
功能:内部节点负责决策树的决策过程。它们通过测试特征值来决定数据的分裂方向,逐步将数据集缩小到更具体的子集。例如,在一个房价预测模型中,内部节点可能会测试特征“房间数是否大于3”,并根据测试结果将数据分成两个子集:房间数大于3和房间数小于等于3。
叶子节点:
-
定义:叶子节点是决策树的终端节点,它们不再进行分裂。每个叶子节点表示决策树对输入样本的最终预测结果。
-
功能:叶子节点给出决策树在特定特征组合下的预测结果。在分类任务中,叶子节点会标记一个类别;在回归任务中,叶子节点会提供一个数值预测。例如,在一个疾病预测模型中,叶子节点可能会标记为“有病”或“无病”,而在回归任务中,叶子节点可能会预测具体的疾病风险值。
图示:
以下是一个简单的决策树示例,展示了节点和叶子节点的关系:
[特征A ≤ 5]/ \[是] [否]/ \[特征B > 3] [特征C ≤ 7]/ \ / \
[类别1] [类别2] [类别3] [类别4]
2.1.2 分支
分支是连接不同节点的线条,它们表示决策树中从一个节点到另一个节点的路径。
定义:分支代表决策树在每个内部节点处基于特征的取值所做的决策。它将数据从一个节点传递到下一个节点,决定数据如何被分配到不同的子集。
功能:
-
数据流动:分支将数据从当前节点流向下一层的节点,根据特征值的不同选择不同的路径。例如,如果某个节点测试特征“年龄是否大于30岁”,则分支可能分为“年龄 > 30岁”和“年龄 ≤ 30岁”两个方向。
-
决策分裂:每条分支对应于一个特征值的测试结果,从而实现数据集的分裂。正确的分裂可以提高模型的准确性和效率。
图示:
以下是一个包含分支的决策树示例:
[年龄 ≤ 30]/ \[≤ 30] [> 30]| |[类别A] [类别B]
2.1.3 叶子节点
叶子节点是决策树的最终节点,用于表示模型对输入样本的最终预测结果。
定义:叶子节点不再继续分裂,直接提供模型的输出结果。
功能:
-
分类任务:在分类问题中,叶子节点标记一个类别标签。例如,在一个疾病检测模型中,叶子节点可能表示“阳性”或“阴性”。
-
回归任务:在回归问题中,叶子节点给出一个具体的数值预测。例如,在房价预测中,叶子节点可能会给出一个房价的估计值。
图示:
以下是一个简单的决策树示例,展示了叶子节点的功能:
[特征X ≤ 10]/ \[≤ 10] [> 10]| |[类别1] [类别2]
2.2 树的深度和宽度的影响
决策树的深度和宽度是衡量树复杂度和影响模型性能的重要因素。
2.2.1 树的深度
定义:决策树的深度是从根节点到最深叶子节点的最长路径长度。
影响:
-
模型的复杂性:树的深度决定了模型的复杂性。较深的树可以捕获更多的特征交互和复杂关系,但也可能导致过拟合。过度深的树在训练数据上表现良好,但在测试数据上可能表现不佳,因为它们可能学习到了训练数据中的噪声。
-
计算复杂度:深度越大,构建和预测的计算复杂度也越高。每增加一层节点,模型需要处理更多的特征组合和数据分裂操作,这可能导致训练时间的显著增加。
图示:
以下是一个深度为3的决策树示例:
[特征A ≤ 5]/ \[≤ 5] [> 5]/ \
[特征B ≤ 2] [特征C ≤ 7]/ \ / \[类别1] [类别2] [类别3] [类别4]
2.2.2 树的宽度
定义:决策树的宽度是每一层节点的数量,特别是最宽层的节点数。
影响:
-
模型的灵活性:宽度决定了每层可以处理多少不同的特征值组合。较宽的树可以处理更多的数据分裂,但也可能导致更复杂的决策规则,使得模型难以解释。
-
数据分裂:树的宽度直接影响数据的分裂方式。宽度较大的树可能在每一步分裂中考虑更多的特征值,从而更精细地划分数据集,但也增加了过拟合的风险。
图示:
以下是一个宽度为3的决策树示例(注意最宽层):
[特征X ≤ 5]/ | \[≤ 5] [5-10] [> 10]/ | \[类别A] [类别B] [类别C]
3. 决策树的构建方法
3.1 基于信息增益的决策树
3.1.1 熵与信息增益的概念
在决策树的构建过程中,熵是一个关键概念,用于衡量数据集的混乱程度或不确定性。对于一个包含多个类别的数据集 ( D ),其熵 ( H(D) ) 的计算公式如下:
[ H(D) = -\sum_{i=1}^{c} p_i \log_2 p_i ]
其中,( c ) 是数据集中类别的数量,( p_i ) 是类别 ( i ) 在数据集中的比例。熵的值越高,数据集的混乱程度越大。
信息增益是指在特征 ( A ) 给定的条件下,由于获得了特征 ( A ) 的信息而使得类别 ( D ) 的不确定性减少的程度。信息增益 ( \text{Gain}(D, A) ) 的计算如下:
[ \text{Gain}(D, A) = H(D) - \sum_{v=1}^{V} \frac{|D^v|}{|D|} H(D^v) ]
其中,( V ) 是特征 ( A ) 可能的取值个数,( D^v ) 是特征 ( A ) 取值为 ( v ) 的子数据集,( |D^v| ) 是子数据集的大小,( |D| ) 是数据集 ( D ) 的总大小。
3.1.2 ID3算法详解
ID3(Iterative Dichotomiser 3)是基于信息增益的一种经典决策树算法,其步骤如下:
-
选择最佳特征:计算数据集中每个特征的信息增益,选择信息增益最大的特征作为当前节点的划分特征。
-
划分数据集:根据选择的特征将数据集划分成多个子集,每个子集对应于特征的一个取值。
-
递归构建:对每个子集递归地应用上述步骤,直到子集中的所有数据属于同一类别或者没有更多特征可用为止。
下面是一个简单的示例代码,演示了如何实现基于信息增益的决策树算法 ID3:
# 示例代码:ID3算法实现
import numpy as np
import pandas as pd
from math import log2def calculate_entropy(data):# 计算数据集的熵classes = data.iloc[:, -1].value_counts()entropy = 0for c in classes:prob = c / len(data)entropy -= prob * log2(prob)return entropydef calculate_information_gain(data, feature):# 计算给定特征的信息增益entropy_before = calculate_entropy(data)values = data[feature].unique()entropy_after = 0for value in values:subset = data[data[feature] == value]entropy_value = calculate_entropy(subset)entropy_after += (len(subset) / len(data)) * entropy_valuereturn entropy_before - entropy_afterdef ID3(data, features):# 递归构建ID3决策树if len(data.iloc[:, -1].unique()) == 1:return data.iloc[0, -1]if len(features) == 0:return data.iloc[:, -1].value_counts().idxmax()information_gains = [calculate_information_gain(data, feature) for feature in features]best_feature_index = np.argmax(information_gains)best_feature = features[best_feature_index]tree = {best_feature: {}}features = [f for f in features if f != best_feature]for value in data[best_feature].unique():subset = data[data[best_feature] == value]tree[best_feature][value] = ID3(subset, features)return tree# 示例数据集
data = pd.DataFrame({'Outlook': ['Sunny', 'Sunny', 'Overcast', 'Rainy', 'Rainy', 'Rainy', 'Overcast', 'Sunny', 'Sunny', 'Rainy'],'Temperature': ['Hot', 'Hot', 'Mild', 'Cool', 'Cool', 'Cool', 'Mild', 'Hot', 'Cool', 'Mild'],'Humidity': ['High', 'High', 'High', 'High', 'Normal', 'Normal', 'Normal', 'High', 'Normal', 'Normal'],'Windy': [False, True, False, False, False, True, True, False, False, False],'PlayTennis': ['No', 'No', 'Yes', 'Yes', 'Yes', 'No', 'Yes', 'No', 'Yes', 'Yes']
})features = ['Outlook', 'Temperature', 'Humidity', 'Windy']
tree = ID3(data, features)
print(tree)
这段代码演示了如何根据信息增益构建决策树,并使用递归方法构建树的不同分支。
3.2 基于基尼系数的决策树
3.2.1 基尼不纯度的概念
基尼不纯度是另一种常用于决策树构建的指标,用于衡量数据集中元素被错误分类的概率。对于数据集 ( D ),其基尼不纯度 ( \text{Gini}(D) ) 的计算公式如下:
[ \text{Gini}(D) = 1 - \sum_{i=1}^{c} (p_i)^2 ]
其中,( c ) 是数据集中类别的数量,( p_i ) 是数据集 ( D ) 中第 ( i ) 类别的概率。基尼不纯度越低,数据集的纯度越高。
3.2.2 CART算法详解
CART(Classification and Regression Trees)是基于基尼系数的一种经典决策树算法,其主要步骤如下:
-
选择最佳特征和切分点:计算每个特征的基尼系数,并选择使得基尼系数最小的特征和最佳切分点作为当前节点的划分依据。
-
划分数据集:根据选择的特征和切分点将数据集划分成两个子集。
-
递归构建:对每个子集递归地应用上述步骤,直到子集中的所有数据属于同一类别或者满足停止条件为止。
以下是一个简单的示例代码,演示了如何实现基于基尼系数的决策树算法 CART:
# 示例代码:CART算法实现
def calculate_gini(data):# 计算数据集的基尼系数classes = data.iloc[:, -1].value_counts()gini = 1for c in classes:prob = c / len(data)gini -= prob ** 2return ginidef calculate_gini_index(data, feature, split_value):# 计算给定特征和切分点的基尼系数subset1 = data[data[feature] <= split_value]subset2 = data[data[feature] > split_value]gini_index = (len(subset1) / len(data)) * calculate_gini(subset1) + (len(subset2) / len(data)) * calculate_gini(subset2)return gini_indexdef select_best_split(data, features):# 选择最佳特征和切分点best_feature = Nonebest_split = Nonemin_gini_index = float('inf')for feature in features:values = data[feature].unique()for split_value in values:gini_index = calculate_gini_index(data, feature, split_value)if gini_index < min_gini_index:min_gini_index = gini_indexbest_feature = featurebest_split = split_valuereturn best_feature, best_splitdef CART(data, features):# 递归构建CART决策树if len(data.iloc[:, -1].unique()) == 1:return data.iloc[0, -1]if len(features) == 0:return data.iloc[:, -1].value_counts().idxmax()best_feature, best_split = select_best_split(data, features)tree = {best_feature: {'<= ' + str(best_split): None, '> ' + str(best_split): None}}subset1 = data[data[best_feature] <= best_split]subset2 = data[data[best_feature] > best_split]features = [f for f in features if f != best_feature]if not subset1.empty:tree[best_feature]['<= ' + str(best_split)] = CART(subset1, features)if not subset2.empty:tree[best_feature]['> ' + str(best_split)] = CART(subset2, features)return tree# 示例数据集
data = pd.DataFrame({'Outlook': ['Sunny', 'Sunny', 'Overcast', 'Rainy', 'Rainy', 'Rainy', 'Overcast', 'Sunny', 'Sunny', 'Rainy'],'Temperature': ['Hot', 'Hot', 'Mild', 'Cool', 'Cool', 'Cool', 'Mild', 'Hot', 'Cool', 'Mild'],'Humidity': ['High', 'High', 'High', 'High', 'Normal', 'Normal', 'Normal', 'High', 'Normal', 'Normal'],'Windy': [False, True, False, False, False, True, True, False, False, False],'PlayTennis': ['No', 'No', 'Yes', 'Yes', 'Yes', 'No', 'Yes', 'No', 'Yes', 'Yes']
})# 转换特征数据类型为数值
data['Windy'] = data['Windy'].astype(int)
data['PlayTennis'] = data['PlayTennis'].map({'Yes': 1, 'No': 0})features = ['Outlook', 'Temperature', 'Humidity', 'Windy']
tree = CART(data, features)
print(tree)
这段代码演示了如何根据基尼系数选择最佳特征和切分点,构建决策树,并使用递归方法构建树的不同分支。注意,在实际应用中,你可能需要对数据进行更多预处理和特征工程,以提高模型的性能和准确性。
4. 决策树的应用和实际案例
4.1 分类问题中的应用案例
决策树在分类问题中的应用非常广泛,其简单直观的特点使其成为许多实际场景中的首选算法之一。以下是一些具体的应用案例:
4.1.1 医疗诊断
在医疗领域,决策树被广泛应用于疾病诊断和预测。例如,通过分析患者的症状、体征和检查结果,可以构建决策树模型来帮助医生判断患者可能患有的疾病类型。这种方法不仅可以提高诊断的准确性,还能够在医疗资源有限的情况下优化患者的治疗方案。
实际案例:
一家医院利用决策树分析患者的心脏病风险。通过收集患者的心电图数据、血压、年龄等信息,建立决策树模型来预测患者是否可能患有心脏病。这种模型能够根据不同的病情特征快速识别高风险群体,帮助医生及早采取干预措施,提升治疗效果。
4.1.2 金融风险评估
在金融领域,决策树被用于信用评分和风险评估,以帮助银行和金融机构决定是否批准贷款申请或者提供信用卡。通过分析申请者的个人信息、信用历史、收入稳定性等因素,决策树能够快速生成一个评估模型,预测申请人违约的可能性。
实际案例:
一家银行利用决策树评估个人贷款申请。基于客户的收入来源、工作稳定性和信用记录,银行可以使用决策树模型来分类申请人是否有能力按时偿还贷款。这种模型不仅提高了贷款决策的效率,还减少了银行面临的信用风险。
4.1.3 市场营销定位
在市场营销中,决策树被广泛用于客户分析和市场定位。通过分析客户的购买历史、偏好特征以及市场行为数据,企业可以利用决策树生成客户分群模型,从而精确地针对不同群体制定个性化的营销策略。
实际案例:
一家电商公司使用决策树分析消费者的购买模式。通过收集客户的浏览历史、购买记录和反馈信息,企业可以建立决策树模型,根据不同客户的行为特征和偏好进行分类。这种个性化营销策略能够有效提高销售转化率和客户满意度。
4.2 回归问题中的应用案例
除了分类问题,决策树在回归问题中同样有着广泛的应用。下面我们将探讨几个典型的回归问题应用案例:
4.2.1 房价预测
在房地产市场中,决策树可以用来预测房价。通过分析房屋的各种属性如地理位置、建筑年代、房屋面积、周围设施等因素,决策树可以建立起一个预测模型,帮助买家和卖家更准确地估计房屋的市场价值。
实际案例:
一家房地产公司利用决策树分析房屋市场趋势。通过收集房屋销售记录、地理信息和市场经济数据,公司可以建立决策树模型来预测不同地区房价的走势。这种模型能够为投资者和开发商提供决策支持,帮助他们在竞争激烈的房地产市场中获取更好的投资回报。
4.2.2 股票价格趋势分析
在金融投资领域,决策树可以用来分析股票价格的趋势。通过历史股价数据、市场指标和公司财务数据等,决策树可以识别出影响股票价格波动的关键因素,并据此预测未来股价的走势。
实际案例:
一家投资公司使用决策树预测股票市场波动。通过收集公司财务报表、行业动态和市场指标,投资者可以构建决策树模型来预测不同股票的价格变化趋势。这种模型帮助投资者制定合理的买卖策略,提高投资决策的准确性和效率。
4.2.3 气候变化分析
在环境科学领域,决策树也可以应用于气候变化分析和预测。通过收集大气温度、降水量、风速等气象数据,决策树可以建立起一个气候模型,帮助科学家和政策制定者理解气候变化的趋势和模式,为未来的气候保护和调适提供科学依据。
实际案例:
政府利用决策树分析气候变化对农业的影响。通过收集农作物生长数据、土壤质量和天气条件,政府可以建立决策树模型来预测未来几年的气候变化对农业产量的影响。这种模型有助于制定农业政策和资源分配策略,以应对气候变化带来的挑战。
5. 决策树与其他机器学习算法的比较
当与其他主流机器学习算法进行比较时,决策树展现出其独特的特点和适用场景。本节将深入探讨决策树与支持向量机(SVM)、神经网络等算法的对比,并分析何时应选择决策树作为首选算法的场景。
5.1 决策树与支持向量机(SVM)的对比
决策树和支持向量机(SVM)在机器学习领域都属于常见且强大的算法,它们在处理不同类型的问题时具有显著的优势和适应性。以下是它们在几个关键方面的对比:
| 特征 | 决策树 | 支持向量机 |
|---|---|---|
| 类型 | 非参数学习算法 | 参数学习算法 |
| 数据要求 | 不需要对数据进行归一化处理 | 对数据的归一化要求较高 |
| 处理非线性问题 | 擅长处理非线性关系 | 通过核函数处理非线性关系 |
| 解释性 | 具有很好的解释性 | 解释性较差,黑盒模型 |
| 处理大数据 | 处理大数据集效率较低 | 对大数据集的处理效率较高 |
| 鲁棒性 | 对噪声和缺失数据较为敏感 | 对噪声和缺失数据的影响较小 |
| 参数调优 | 参数少,调参相对简单 | 参数多,调参相对复杂 |
在选择算法时,如果数据较为复杂且非线性关系显著,可以优先考虑使用支持向量机。而当需要深入理解每个决策的依据和解释模型的决策过程时,则决策树可能更为适合。
5.2 决策树与神经网络的对比
神经网络作为深度学习的代表,与决策树在许多方面有着明显的差异。以下是它们的对比情况:
| 特征 | 决策树 | 神经网络 |
|---|---|---|
| 网络结构 | 非线性结构,层级分明 | 多层神经元组成的复杂网络结构 |
| 学习方式 | 自顶向下逐步学习 | 反向传播算法进行端到端的学习 |
| 处理大数据 | 效率较低,对大数据集处理较为困难 | 深度学习模型能够处理大规模数据 |
| 参数调优 | 调参相对简单 | 参数众多,调参较为复杂 |
| 解释性 | 具有很好的解释性 | 解释性较差,常被视为黑盒模型 |
| 数据要求 | 对数据的处理要求较低 | 对数据的预处理和归一化要求高 |
在选择算法时,神经网络适用于处理大规模数据集和复杂的非线性关系,但其模型复杂度和训练过程的黑盒特性使得在需要模型解释性较高时不如决策树。
5.3 何时选择决策树作为优选算法的场景分析
决策树作为一种简单而直观的学习算法,在以下场景中尤为适合:
-
解释性要求高:需要能够理解每个决策依据的应用场景,例如医疗决策或者法律领域的决策支持系统。
-
数据特征具有明显分界线:当数据特征之间存在清晰的分界线或者规则时,决策树能够直观地捕捉这些规律。
-
数据预处理较少:相比神经网络或者支持向量机,决策树对数据的预处理要求较低,能够直接处理原始数据。
-
小到中等规模数据集:在数据集规模适中的情况下,决策树能够提供良好的性能表现和较快的训练速度。
综上所述,决策树虽然在处理大规模数据和复杂问题时可能不如神经网络或者支持向量机那样高效,但其简单直观的特性和良好的解释性使得在特定的场景中成为首选算法。在实际应用中,根据具体问题的数据特征、解释性需求以及计算资源等方面的考量,选择最合适的算法能够更好地提升模型的效果和应用的可行性。
相关文章:
机器学习中的决策树算法——从理论到实践完整指南
决策树在机器学习中的应用与原理 1. 介绍1.1 定义和基本概念1.2 决策树在机器学习中的角色和重要性 2. 决策树的结构2.1 节点、分支、叶子节点的定义和功能2.1.1 节点2.1.2 分支2.1.3 叶子节点 2.2 树的深度和宽度的影响2.2.1 树的深度2.2.2 树的宽度 3. 决策树的构建方法3.1 基…...
FFplay介绍及命令使用指南
😎 作者介绍:欢迎来到我的主页👈,我是程序员行者孙,一个热爱分享技术的制能工人。计算机本硕,人工制能研究生。公众号:AI Sun(领取大厂面经等资料),欢迎加我的…...
php实现动态登录
简介: 效果:通过前端页面的注册,通过MD5将密码加密,发送到数据库,通过验证数据库的内容实现登录,以及各种保证安全的措施 实验环境:phphtmlcssmysql数据表,使用html css设计注册&a…...
Servlet2-HTTP协议、HttpServletRequest类、HttpServletResponse类
目录 HTTP协议 什么是HTTP协议 HTTP协议的特点 请求的HTTP协议格式 GET请求 POST请求 常用的请求头说明 哪些是GET请求,哪些是POST请求 响应的HTTP协议格式 常见的响应码说明 MIME类型说明 HttpServletRequest类 作用 常用方法 如何获取请求参数 po…...
探索数据的内在世界:sklearn中分层特征聚类标签的可视化技术
探索数据的内在世界:sklearn中分层特征聚类标签的可视化技术 在机器学习中,聚类是一种探索数据结构的强大工具。对于具有分层特征的数据,如文本、时间序列或分类标签,聚类结果的可视化可以提供深入的洞见。本文将详细介绍如何在s…...
airtest定位方法
airtest定位方法 最近遇到一个比较新颖的airtest方法,分享给大家。一键三连; airtest是一款用于自动化测试的Python库,被广泛应用于移动应用和游戏的测试中。在进行自动化测试时,定位元素是非常重要的一步,因为只有准…...
排列组合 n*(n-1)*(n-m+1)
n*(n-1)*(n-m1)/m! --# 组合 n*(n-1)*(n-m1)/m! local function get_combinations(n,m) c 1 c0 1 for i 1,m do c c*(n-i1) c c/i end return math.floor(c) end print(get_combinations(10,6)) 打印出来为:210...
Python面试整理-数据处理和分析
在Python中,数据处理和分析是一项非常重要的应用,得益于丰富的第三方库和工具,Python已经成为数据科学家和分析师的首选语言之一。以下是进行数据处理和分析时常用的工具和方法: 1. 数据处理 a. Pandas ● 功能: Pandas 提供了强大的 DataFrame 结构,使得数据操作和预处理…...
职业教育计算机网络综合实验实训室建设应用案例
近年来,职业教育在培养技能型人才方面发挥着越来越重要的作用。然而,传统的计算机网络技术教学模式往往重理论、轻实践,导致学生缺乏实际操作能力和职业竞争力。为了改变这一现状,唯众结合职业教育特点,提出了“教、学…...
【Docomo】5G
我们想向您介绍第五代移动通信系统“5G”。 5G 什么是5G?支持5G的技术什么是 5G SA(独立)?实现高速率、大容量的5G新频段Docomo的“瞬时5G”使用三个宽广的新频段 什么是5G? 5G(第五代移动通信系统&#x…...
Servlet详解(Servlet源码)
Servlet Servlet是运行在Web服务器或应用服务器上的小程序,它作为来自Web浏览器或其他HTTP客户端的请求和HTTP服务器上的数据库或应用程序之间的中间层。Servlet能够接收来自客户端的基于HTTP协议的请求,并且对请求进行响应。 Servlet是用来处理客户端请…...
仓颉--接收控制台输入
package projectNameimport std.console.*main() {Console.stdOut.write("请输入信息1:")var c Console.stdIn.readln() // 输入:你好,请问今天星期几?var r c.getOrThrow()Console.stdOut.writeln("输入的信息1…...
数据库设计效率提高的5大注意事项
数据库设计效率和质量的提高对项目影响深远,能够显著提升数据访问速度,确保数据一致性和完整性,减少应用开发和维护成本,同时提升系统稳定性和用户体验。如果数据库设计不佳会导致项目性能低下,数据访问缓慢࿰…...
C语言笔试题(一)
本专栏通过整理各专业方向的面试资料并咨询业界相关人士,整合不同方向的面试资料,希望能为您的面试道路点亮一盏灯! 1 简单题 C语言中的注释如何写? 答案: 单行注释使用//,多行注释使用/* ... */解析: 注释用于…...
轻松实现远程智能交互:OriginBot与钉钉和GPT4o的集成指南
说明 我之前实现了简单UI来跟OriginBot交互,可以参考这里:古月居 - ROS机器人知识分享社区 但是由于我不是专业的前端开发,写UI还是比较耗时的,所以最近想修改一下这部分。 还有一个原因是,自己开发前端,…...
Qt题目知多少-1
1.简述Qt框架的核心组成部分及其作用。 Qt框架是一个跨平台的应用程序开发框架,其核心组成部分及其作用包括: QtCore模块:这是Qt的基础模块,提供了字符串处理(QString)、容器类(QList, QMap等)、时间日期处理、文件和目录操作、国…...
nginx的反向代理和负载均衡(seventeen day)
一、nginx的反向代理 新建一台虚拟机——static-server(静态服务器/前端服务器) wget https://nginx.org/download/nginx-1.26.1.tar.gz #安装nginx包 ls 安装依赖软件 yum -y install gcc gcc-c yum -y install pcre-devel yum -y install openss…...
BES编译SDK中遇到的perl问题
0 Preface/Foreword 1 问题清单 1.1 perl\r: No such file or directory 编译完成,通过perl,将elf文件转为bin文件,出现错误。 通过查看,项目源文件中,只有一个pl文件: 查看Linux distro使用的WSL版本&am…...
【康复学习--LeetCode每日一题】3111. 覆盖所有点的最少矩形数目
题目: 给你一个二维整数数组 point ,其中 points[i] [xi, yi] 表示二维平面内的一个点。同时给你一个整数 w 。你需要用矩形 覆盖所有 点。 每个矩形的左下角在某个点 (x1, 0) 处,且右上角在某个点 (x2, y2) 处,其中 x1 < x…...
Django实战:开启数字化任务管理的新纪元
🚀 Django实战:开启数字化任务管理的新纪元 🌐 📖 引言 在数字化转型的浪潮中,任务管理的智能化成为提升组织效能的关键。今天,我将带领大家深入了解我们最新开发的OFTS系统——一款创新的组织任务管理软…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...
