【人工智能】利用大语言模型(LLM)实现机器学习模型选择与实验的自动化

文章目录

    • 引言
    • 环境准备
      • 数据集说明
    • 项目结构
      • 主要文件说明
    • 导入必要的软件包
      • 软件包功能简述
    • 辅助函数定义
      • 加载配置文件
      • 加载数据集
      • 预处理数据集
      • 函数功能详解
    • 集成LLM进行模型选择
      • 调用LLM的函数定义
      • 函数功能详解
    • 清理和验证LLM的输出
      • 清理超参数建议
      • 提取模型名称
      • 验证超参数
      • 修正超参数
      • 函数功能详解
    • 模型训练与评估
      • 训练与评估函数定义
      • 函数功能详解
    • 自动化流程实现
      • 自动化流程函数定义
      • 函数功能详解
    • 主函数
      • 主函数定义
      • 函数功能详解
    • 执行代码
      • 前置步骤
      • 执行命令
    • 示例输出
      • 输出解释
      • 主要优势
      • 更多文章
      • 结语

引言

在机器学习项目中,模型选择和实验设计是至关重要的步骤。传统方法依赖于开发者手动选择合适的模型并进行调优,这不仅耗时且容易出错。随着模型数量和复杂性的增加,手动优化变得愈加困难和低效。借助LLM的强大能力,我们可以自动化这些过程,简化工作流程,并确保模型性能的最优化。

本文将介绍如何使用LLM(以GPT-4为例)来自动选择最佳模型,并进行超参数调优。通过自动化流程,我们可以大幅提升实验效率,减少人为错误,并快速迭代优化模型性能。
在这里插入图片描述

环境准备

在开始之前,我们需要准备项目所需的环境和数据集。具体步骤包括:

  1. 安装必要的软件包:确保你的环境中安装了必要的Python包。
  2. 下载和预处理数据集:以Kaggle的信用卡欺诈检测数据集为例,我们需要对数据进行预处理,以便后续模型训练。大模型聚集地-ChatMoss & ChatGPT中文版

以下是预处理数据集的代码示例:

import pandas as pd

# 读取数据集
df = pd.read_csv('fraud_data.csv')

# 删除不必要的列
df = df.drop(['trans_date_trans_time', 'merchant', 'dob', 'trans_num', 'merch_lat', 'merch_long'], axis=1)

# 丢弃缺失值
df = df.dropna().reset_index(drop=True)

# 保存预处理后的数据
df.to_csv('fraud_data.csv', index=False)

数据集说明

Kaggle的信用卡欺诈检测数据集包含了大量的交易记录,每条记录包含多个特征,如交易金额、时间、商家信息等。其中,is_fraud 列是目标变量,表示该交易是否为欺诈行为。通过删除一些不必要的列和丢弃含有缺失值的记录,我们简化了数据集,使其更加适合后续的建模工作。

注意:以上预处理步骤只是一个简单的示例。在实际项目中,你可能需要进行更复杂的数据清洗和特征工程,以提升模型的性能。

项目结构

为确保项目的组织结构清晰,我们建议创建一个专门的项目文件夹,并在其中存放所有相关文件。以下是推荐的项目结构:

automated_model_selection/
│
├── data/
│   └── fraud_data.csv
│
├── config.yaml
├── requirements.txt
├── automated_model_llm.py
│
├── README.md
└── .gitignore

主要文件说明

  • data/: 存放数据集的文件夹。
  • config.yaml: 存储项目配置和元数据的YAML文件。
  • requirements.txt: 列出项目所需的Python包,以便快速安装依赖。
  • automated_model_llm.py: 主脚本文件,包含自动化模型选择和实验的所有代码。
  • README.md: 项目说明文件。
  • .gitignore: Git忽略文件配置,防止不必要的文件被提交到版本控制系统。

通过这种结构化的组织方式,我们可以更方便地管理项目文件,并确保各部分功能模块化,便于维护和扩展。

导入必要的软件包

在主代码文件中,我们需要导入所有必要的软件包,并定义模型映射关系。这些软件包包括:

  • pandas:用于数据处理和分析。
  • yaml:用于加载配置文件。
  • reast:用于处理字符串和解析字典。
  • sklearn:提供机器学习模型和评估工具。
  • openai:用于调用OpenAI的GPT-4模型。

以下是导入软件包和定义模型映射的代码示例:

import pandas as pd
import yaml
import ast
import re
import sklearn
from openai import OpenAI
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score

# 模型映射
model_mapping = {
    "LogisticRegression": LogisticRegression,
    "DecisionTreeClassifier": DecisionTreeClassifier,
    "RandomForestClassifier": RandomForestClassifier
}

软件包功能简述

  • pandas:处理数据集,进行数据清洗和预处理。
  • yaml:读取和解析配置文件,以便动态加载参数。
  • reast:处理LLM生成的文本输出,提取有用的信息。
  • sklearn:提供各种分类模型和评估指标,支持模型训练和评估。
  • openai:用于与OpenAI的GPT-4模型进行交互,获取模型选择和超参数建议。

辅助函数定义

为了简化流程,我们定义了一些辅助函数,包括加载配置、加载数据、预处理数据等。这些函数模块化地处理各个阶段的任务,使主流程代码更加简洁和易于维护。

加载配置文件

def load_config(config_path='config.yaml'):
    """
    加载配置文件

    参数:
        config_path (str): 配置文件路径

    返回:
        dict: 配置内容
    """
    with open(config_path, 'r') as file:
        config = yaml.safe_load(file)
    return config

加载数据集

def load_data(dataset_path):
    """
    加载数据集

    参数:
        dataset_path (str): 数据集路径

    返回:
        DataFrame: 加载的数据集
    """
    return pd.read_csv(dataset_path)

预处理数据集

def preprocess_data(df):
    """
    预处理数据集

    参数:
        df (DataFrame): 原始数据集

    返回:
        DataFrame: 预处理后的数据集
        dict: 标签编码器
    """
    label_encoders = {}
    for column in df.select_dtypes(include=['object']).columns:
        le = LabelEncoder()
        df[column] = le.fit_transform(df[column])
        label_encoders[column] = le
    return df, label_encoders

函数功能详解

  • load_config:读取并解析YAML格式的配置文件,返回配置内容的字典。
  • load_data:读取CSV格式的数据集,返回DataFrame对象。
  • preprocess_data:对数据集进行预处理,主要包括标签编码,将类别型特征转换为数值型,以便于模型处理。

这些辅助函数的定义确保了代码的模块化和可重用性,增强了代码的可维护性。

集成LLM进行模型选择

在同一个文件中,我们设置LLM(如GPT-4)作为机器学习专家,用于评估和选择最佳模型。通过与LLM的对话,我们可以让其根据模型的性能指标推荐最优的模型和相应的超参数。大模型聚集地-ChatMoss & ChatGPT中文版

调用LLM的函数定义

def call_llm(prompt, api_key):
    """
    调用LLM生成响应

    参数:
        prompt (str): 提示语
        api_key (str): OpenAI API密钥

    返回:
        str: LLM生成的响应内容
    """
    client = OpenAI(api_key=api_key)
    response = client.chat.completions.create(
        model="gpt-4",
        messages=[
            {"role": "system", "content": "You are an expert in machine learning and able to evaluate the model well."},
            {"role": "user", "content": prompt}
        ]
    )
    return response.choices[0].message.content.strip()

函数功能详解

  • call_llm:接受提示语和API密钥,通过OpenAI的API调用GPT-4模型,获取生成的响应内容。系统提示中明确了LLM的角色为机器学习专家,使其在响应时更加专业和准确。

使用场景示例

prompt = (
    f"I have trained the following models with these metrics: {model_performance}. "
    "Which model should I select based on the best performance?"
)
best_model_response = call_llm(prompt, config['llm_api_key'])
print(f"LLM response for best model selection:\n{best_model_response}")

在上述示例中,我们向LLM提供了各个模型的性能指标,询问其基于最佳性能推荐哪个模型。这一过程自动化了模型选择的决策,减少了人为干预和偏见。

清理和验证LLM的输出

LLM生成的响应通常是以自然语言形式呈现,可能包含噪音或额外的信息。为了确保输出能够被后续流程有效利用,我们需要对其进行清理和验证。

清理超参数建议

def clean_hyperparameter_suggestion(suggestion):
    """
    清理LLM生成的超参数建议

    参数:
        suggestion (str): LLM生成的超参数建议

    返回:
        str: 清理后的建议字典字符串,或None
    """
    pattern = r'\{.*?\}'
    match = re.search(pattern, suggestion, re.DOTALL)
    if match:
        cleaned_suggestion = match.group(0)
        return cleaned_suggestion
    else:
        print("Could not find a dictionary in the hyperparameter suggestion.")
        return None

提取模型名称

def extract_model_name(llm_response, available_models):
    """
    从LLM响应中提取模型名称

    参数:
        llm_response (str): LLM生成的响应内容
        available_models (list): 可用模型列表

    返回:
        str: 提取到的模型名称,或None
    """
    for model in available_models:
        pattern = r'\b' + re.escape(model) + r'\b'
        if re.search(pattern, llm_response, re.IGNORECASE):
            return model
    return None

验证超参数

def validate_hyperparameters(model_class, hyperparameters):
    """
    验证超参数的有效性

    参数:
        model_class (class): 模型类
        hyperparameters (dict): 超参数字典

    返回:
        bool: 超参数是否有效
    """
    valid_params = model_class().get_params()
    invalid_params = []
    for param, value in hyperparameters.items():
        if param not in valid_params:
            invalid_params.append(param)
        else:
            if param == 'max_features' and value == 'auto':
                print(f"Invalid value for parameter '{param}': '{value}'")
                invalid_params.append(param)
    if invalid_params:
        print(f"Invalid hyperparameters for {model_class.__name__}: {invalid_params}")
        return False
    return True

修正超参数

def correct_hyperparameters(hyperparameters, model_name):
    """
    修正不合法的超参数

    参数:
        hyperparameters (dict): 原始超参数
        model_name (str): 模型名称

    返回:
        tuple: 修正后的超参数字典和是否进行了修正的布尔值
    """
    corrected = False
    if model_name == "RandomForestClassifier":
        if 'max_features' in hyperparameters and hyperparameters['max_features'] == 'auto':
            print("Correcting 'max_features' from 'auto' to 'sqrt' for RandomForestClassifier.")
            hyperparameters['max_features'] = 'sqrt'
            corrected = True
    return hyperparameters, corrected

函数功能详解

  • clean_hyperparameter_suggestion:使用正则表达式提取LLM响应中的字典形式的超参数建议。如果未找到有效的字典,则返回None并输出错误信息。

  • extract_model_name:从LLM的响应中提取出推荐的模型名称。它会遍历可用模型列表,并匹配响应中的模型名称,确保提取到的是有效的模型。

  • validate_hyperparameters:验证LLM建议的超参数是否与模型类兼容。会检查超参数名称是否存在于模型的参数列表中,并过滤掉不合法或弃用的参数值。

  • correct_hyperparameters:根据模型名称对不合法的超参数值进行修正。例如,RandomForestClassifier的max_features参数不能设为'auto',应改为'sqrt'

这些函数确保了LLM生成的建议能被准确解析和应用,防止因无效的超参数导致模型训练失败或性能下降。

模型训练与评估

接下来,我们定义一个函数,用于训练和评估给定模型,并返回评估指标。这个过程涉及数据的分割、模型的实例化、训练、预测和评估。

大模型聚集地-ChatMoss & ChatGPT中文版

训练与评估函数定义

def train_and_evaluate(X_train, X_test, y_train, y_test, model_name, hyperparameters=None):
    """
    训练并评估模型

    参数:
        X_train (DataFrame): 训练特征
        X_test (DataFrame): 测试特征
        y_train (Series): 训练标签
        y_test (Series): 测试标签
        model_name (str): 模型名称
        hyperparameters (dict, optional): 超参数字典

    返回:
        dict: 评估指标
        model: 训练好的模型
    """
    if model_name not in model_mapping:
        print(f"Valid model names are: {list(model_mapping.keys())}")
        return None, None

    model_class = model_mapping.get(model_name)
    try:
        if hyperparameters:
            hyperparameters, corrected = correct_hyperparameters(hyperparameters, model_name)
            if not validate_hyperparameters(model_class, hyperparameters):
                return None, None
            model = model_class(**hyperparameters)
        else:
            model = model_class()
    except Exception as e:
        print(f"Error instantiating model with hyperparameters: {e}")
        return None, None
    try:
        model.fit(X_train, y_train)
    except Exception as e:
        print(f"Error during model fitting: {e}")
        return None, None

    y_pred = model.predict(X_test)
    metrics = {
        "accuracy": accuracy_score(y_test, y_pred),
        "precision": precision_score(y_test, y_pred, average='weighted', zero_division=0),
        "recall": recall_score(y_test, y_pred, average='weighted', zero_division=0),
        "f1_score": f1_score(y_test, y_pred, average='weighted', zero_division=0)
    }
    return metrics, model

函数功能详解

  • train_and_evaluate

    1. 模型实例化:根据传入的模型名称,从model_mapping中获取相应的模型类。如果提供了超参数,则在实例化模型时传入这些参数;否则使用默认参数。

    2. 模型训练:使用训练数据(X_trainy_train)对模型进行训练。

    3. 模型预测:使用测试数据(X_test)进行预测,得到预测结果y_pred

    4. 指标评估:计算并返回模型在测试集上的各项评估指标,包括准确率(accuracy)、精确率(precision)、召回率(recall)和F1分数(f1_score)。

通过这个函数,我们可以轻松地对不同的模型进行训练和评估,并获取一致的性能指标,便于后续的比较和选择。

自动化流程实现

现在,我们将上述功能整合起来,实现整个自动化的模型选择与实验流程。该流程包括以下几个关键步骤:

  1. 训练并评估所有模型:对配置文件中指定的所有模型进行训练和评估,记录各自的性能指标。
  2. LLM选择最佳模型:将各个模型的性能指标输入LLM,询问其推荐最佳模型。
  3. 检查最佳模型的超参数调优:询问LLM针对最佳模型的超参数建议。
  4. 自动运行超参数调优:如果LLM提供了有效的超参数建议,自动应用这些参数并重新训练评估模型。

自动化流程函数定义

def run_llm_based_model_selection_experiment(df, config):
    """
    运行基于LLM的模型选择和实验自动化流程

    参数:
        df (DataFrame): 预处理后的数据集
        config (dict): 配置字典
    """
    # 数据拆分
    X = df.drop("is_fraud", axis=1)
    y = df["is_fraud"]
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

    available_models = config['default_models']
    model_performance = {}

    # 训练并评估所有模型
    for model_name in available_models:
        print(f"训练模型: {model_name}")
        metrics, _ = train_and_evaluate(X_train, X_test, y_train, y_test, model_name)
        model_performance[model_name] = metrics
        print(f"模型: {model_name} | 评估指标: {metrics}")

    # 使用LLM选择最佳模型
    sklearn_version = sklearn.__version__
    prompt = (
        f"我训练了以下模型,并获得了这些评估指标: {model_performance}. "
        "基于最佳性能,我应该选择哪个模型?"
    )
    best_model_response = call_llm(prompt, config['llm_api_key'])
    print(f"LLM选择的最佳模型:\n{best_model_response}")

    best_model = extract_model_name(best_model_response, available_models)
    if not best_model:
        print("错误: 无法从LLM响应中提取有效的模型名称。")
        return
    print(f"LLM选择的最佳模型: {best_model}")

    # 检查并建议超参数调优
    prompt_tuning = (
        f"选择的模型是 {best_model}。你能建议一些超参数以提升性能吗? "
        "请以Python字典格式提供,例如 {{'max_depth': 5, 'min_samples_split': 4}}。"
        f"确保所有建议的超参数在scikit-learn版本 {sklearn_version} 中是有效的,"
        "并避免使用已弃用或无效的值,例如 'max_features': 'auto'。"
        "不要提供任何解释或以其他格式返回。"
    )
    tuning_suggestion = call_llm(prompt_tuning, config['llm_api_key'])
    print(f"超参数调优建议:\n{tuning_suggestion}")

    cleaned_suggestion = clean_hyperparameter_suggestion(tuning_suggestion)
    if cleaned_suggestion is None:
        suggested_params = None
    else:
        try:
            suggested_params = ast.literal_eval(cleaned_suggestion)
            if not isinstance(suggested_params, dict):
                print("超参数建议不是有效的字典。")
                suggested_params = None
        except (ValueError, SyntaxError) as e:
            print(f"解析超参数建议时出错: {e}")
            suggested_params = None

    # 根据建议自动运行超参数调优
    if suggested_params:
        print(f"使用建议的超参数运行 {best_model}: {suggested_params}")
        tuned_metrics, _ = train_and_evaluate(
            X_train, X_test, y_train, y_test, best_model, hyperparameters=suggested_params
        )
        print(f"调优后的评估指标: {tuned_metrics}")
    else:
        print("未提供有效的超参数进行调优。")

函数功能详解

  1. 数据拆分:将数据集划分为训练集和测试集,比例为70%训练,30%测试。这里使用了random_state=42以确保结果的可重复性。

  2. 训练并评估所有模型

    • 遍历配置文件中指定的所有模型。
    • 对每个模型调用train_and_evaluate函数,获取其性能指标,并将结果记录在model_performance字典中。
    • 打印每个模型的评估指标,便于实时监控训练进程。
  3. 使用LLM选择最佳模型

    • 构建一个提示语,包含各个模型的性能指标,询问LLM推荐哪个模型。
    • 调用call_llm函数获取LLM的响应。
    • 使用extract_model_name函数从LLM响应中提取出推荐的模型名称。
    • 打印并确认LLM选择的最佳模型。
  4. 检查并建议超参数调优

    • 基于LLM选择的最佳模型,构建一个新的提示语,请求LLM提供超参数调优建议。
    • 调用call_llm函数获取LLM的超参数建议。
    • 使用clean_hyperparameter_suggestion函数清理LLM的响应,提取出有效的超参数字典。
  5. 自动运行超参数调优

    • 如果LLM提供了有效的超参数建议,调用train_and_evaluate函数重新训练模型,并评价其调优后的性能。
    • 打印调优后的评估指标,以便对比和验证性能提升效果。

通过这一流程,整个模型选择和调优过程实现了高度自动化,极大地提升了工作效率,并减少了人为错误的可能性。

主函数

最后,定义主函数以运行整个自动化流程。主函数负责加载配置文件、加载和预处理数据集,并调用自动化流程函数。

主函数定义

def main():
    """
    主函数,运行整个自动化模型选择与实验流程
    """
    # 加载配置文件
    config = load_config()
    
    # 加载数据集
    df = load_data(config['dataset_path'])
    
    # 预处理数据集
    df, _ = preprocess_data(df)
    
    # 运行自动化流程
    run_llm_based_model_selection_experiment(df, config)

if __name__ == "__main__":
    main()

函数功能详解

  • 加载配置文件:调用load_config函数读取config.yaml中的配置信息,包括LLM API密钥、待测试的模型列表、评估指标和数据集路径。

  • 加载数据集:调用load_data函数读取预处理后的数据集。

  • 预处理数据集:调用preprocess_data函数对数据进行进一步处理,如标签编码,以确保模型能够正确处理数据。

  • 运行自动化流程:调用run_llm_based_model_selection_experiment函数,执行整个模型选择与实验的自动化流程。

通过主函数的调用,整个流程得以顺利运行,实现从数据加载到模型选择和调优的全自动化。

执行代码

确保所有文件准备就绪后,你可以通过以下命令运行整个自动化过程:

python automated_model_llm.py

前置步骤

  1. 安装依赖:确保安装了requirements.txt中列出的所有软件包。你可以使用以下命令快速安装:

    pip install -r requirements.txt
    
  2. 配置文件设置:在config.yaml中填入你的OpenAI API密钥,并根据需求调整模型列表和评估指标。

    llm_api_key: "YOUR-OPENAI-API-KEY"
    default_models:
      - LogisticRegression
      - DecisionTreeClassifier
      - RandomForestClassifier
    metrics: ["accuracy", "precision", "recall", "f1_score"]
    dataset_path: "fraud_data.csv"
    
  3. 数据集准备:将预处理后的fraud_data.csv放入data/文件夹中。

执行命令

python automated_model_llm.py

运行命令后,脚本将依次执行各个步骤,最终输出模型选择和调优的结果。

示例输出

以下是一个示例输出,展示了自动化流程的运行结果:

训练模型: LogisticRegression
模型: LogisticRegression | 评估指标: {'accuracy': 0.954, 'precision': 0.952, 'recall': 0.954, 'f1_score': 0.953}
训练模型: DecisionTreeClassifier
模型: DecisionTreeClassifier | 评估指标: {'accuracy': 0.912, 'precision': 0.910, 'recall': 0.912, 'f1_score': 0.911}
训练模型: RandomForestClassifier
模型: RandomForestClassifier | 评估指标: {'accuracy': 0.970, 'precision': 0.968, 'recall': 0.970, 'f1_score': 0.969}

LLM选择的最佳模型:
根据以上评估指标,我推荐选择RandomForestClassifier,因为它在所有评估指标上表现最佳。

LLM选择的最佳模型: RandomForestClassifier
超参数调优建议:
{
'n_estimators': 100,
'max_depth': None,
'min_samples_split': 2,
'min_samples_leaf': 1,
'max_features': 'sqrt',
'bootstrap': True
}
使用建议的超参数运行 RandomForestClassifier: {'n_estimators': 100, 'max_depth': None, 'min_samples_split': 2, 'min_samples_leaf': 1, 'max_features': 'sqrt', 'bootstrap': True}
调优后的评估指标: {'accuracy': 0.973, 'precision': 0.972, 'recall': 0.973, 'f1_score': 0.972}

输出解释

  1. 模型训练与评估结果

    • LogisticRegression:准确率95.4%,精确率95.2%,召回率95.4%,F1分数95.3%。
    • DecisionTreeClassifier:准确率91.2%,精确率91.0%,召回率91.2%,F1分数91.1%。
    • RandomForestClassifier:准确率97.0%,精确率96.8%,召回率97.0%,F1分数96.9%。

    从结果可以看出,RandomForestClassifier在所有评估指标上均表现最佳。

  2. LLM选择的最佳模型:基于评估指标,LLM推荐选择RandomForestClassifier。

  3. 超参数调优建议

    • n_estimators: 100
    • max_depth: None
    • min_samples_split: 2
    • min_samples_leaf: 1
    • max_features: ‘sqrt’
    • bootstrap: True
  4. 调优后的评估指标

    • RandomForestClassifier:准确率97.3%,精确率97.2%,召回率97.3%,F1分数97.2%。

    通过应用LLM建议的超参数,RandomForestClassifier的性能得到了进一步提升。

注意:实际输出可能因数据不同或LLM的响应而有所差异。你可以根据需要调整提示语和生成参数,以获得更加多样化或严格的LLM输出。

主要优势

  1. 效率提升:自动化流程极大地减少了手动选择和调优模型的时间,提高了工作效率。
  2. 一致性:减少了人为错误和主观偏见,确保模型选择和调优的一致性和客观性。
  3. 可扩展性:通过调整配置文件和提示语,可以轻松扩展到更多的模型和更复杂的调优任务。

更多文章

【VScode】中文版ChatGPT编程工具-CodeMoss!教程+示例+快捷键
【VScode】VSCode中的智能编程利器,全面揭秘ChatMoss & ChatGPT中文版

结语

随着LLM能力的进一步提升,其在数据科学和机器学习领域的应用前景将更加广阔。未来,LLM可能不仅能自动选择和调优模型,还能进行更复杂的特征工程、模型解释和结果分析,全面助力数据科学家的工作。

希望本文能够帮助你理解如何利用LLM实现机器学习模型选择与实验的自动化。如果有任何问题或建议,欢迎在评论区交流讨论!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/912334.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器学习在时间序列预测中的应用与实现——以电力负荷预测为例(附代码)

📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 1. 引言 随着数据采集技术的发展,时间序列数据在各个领域中的应用越来越广泛。时间序列预测旨在基于过去的时间数据来…

Python学习------第四天

Python的判断语句 一、布尔类型和比较运算符 二、 if语句的基本格式 if语句注意空格缩进!!! if else python判断语句的嵌套用法:

Vue3版本的uniapp项目运行至鸿蒙系统

新建Vue3版本的uniapp项目 注意,先将HbuilderX升级至最新版本,这样才支持鸿蒙系统的调试与运行; 按照如下图片点击,快速升级皆可。 通过HbuilderX创建 官方文档指导链接 点击HbuilderX中左上角文件->新建->项目 创建vue3…

让Apache正确处理不同编码的文件避免中文乱码

安装了apache2.4.39以后&#xff0c;默认编码是UTF-8&#xff0c;不管你文件是什么编码&#xff0c;统统按这个来解析&#xff0c;因此 GB2312编码文件内的中文将显示为乱码。 <!doctype html> <html> <head><meta http-equiv"Content-Type" c…

LabVIEW实验室液压制动系统

压制动系统是许多实验设备的重要安全组件&#xff0c;尤其在高负荷、高速实验环境下&#xff0c;制动系统的性能对设备和操作人员的安全至关重要。传统的实验室液压制动系统监测方法存在数据采集实时性差、精度低、故障预警不及时等问题。为了提高实验安全性和设备运行的稳定性…

Qt教程(007):资源文件添加

文章目录 7.1 创建新的项目7.2 添加资源文件7.2 设置页面7.1 创建新的项目 选择创建项目类型 输入项目名称 勾选UI界面 7.2 添加资源文件 选中项目名称,右键,选择【Add New】 添加资源文件 选择Qt Resource File文件

【Python爬虫实战】深入解锁 DrissionPage:ChromiumPage 自动化网页操作指南

&#x1f308;个人主页&#xff1a;易辰君-CSDN博客 &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/2401_86688088/category_12797772.html ​ 目录 前言 一、ChromiumPage基础操作 &#xff08;一&#xff09;初始化Drission 和 ChromiumPage 对象 &#xff0…

如何保证kafka生产者数据可靠性

ack参数的设置&#xff1a; 0&#xff1a;生产者发送过来的数据&#xff0c;不需要等数据落盘应答 假如发送了Hello 和 World两个信息&#xff0c;Leader直接挂掉&#xff0c;数据就会丢失 生产者 ---> Kafka集群 一放进去就跑 数据可靠性分析&#xff1a;丢数 1&#…

python爬虫指南——初学者避坑篇

目录 Python爬虫初学者学习指南一、学习方向二、Python爬虫知识点总结三、具体知识点详解和实现步骤1. HTTP请求和HTML解析2. 正则表达式提取数据3. 动态内容爬取4. 数据存储5. 反爬虫应对措施 四、完整案例&#xff1a;爬取京东商品信息1. 导入库和设置基本信息2. 获取网页内容…

C 语言学习-05【数组】

1、一维数组元素的操作 输入一个数&#xff0c;按原来排序的规律将它插入到一个一排列好的数组中&#xff1a; #include <stdio.h>int main() {int i, data, a[10] {2, 3, 6, 9, 11, 12, 14, 17, 19};printf("Primitive series: \n");for (i 0; i < 9; i)…

C 语言学习-1【基本语法】

1、符号常量 #define 符号常量名 常量 使用符号常量计算圆柱体的体积&#xff1a; #include <stdio.h> #define PI 3.1415926int main() {float r, h, volum;printf("Please enter the radius: ");scanf("%f", &r);printf("Please enter th…

【微服务】不同微服务之间用户信息的获取和传递方案

如何才能在每个微服务中都拿到用户信息&#xff1f;如何在微服务之间传递用户信息&#xff1f; 文章目录 概述利用微服务网关做登录校验网关转微服务获取用户信息openFeign传递微服务之间的用户信息 概述 要在每个微服务中获取用户信息&#xff0c;可以采用以下几种方法&#…

HarmonyOS入门 : 获取网络数据,并渲染到界面上

1. 环境搭建 开发HarmonyOS需要安装DevEco Studio&#xff0c;下载地址 : https://developer.huawei.com/consumer/cn/deveco-studio/ 2. 如何入门 入门HarmonyOS我们可以从一个实际的小例子入手&#xff0c;比如获取网络数据&#xff0c;并将其渲染到界面上。 本文就是基于…

SpringMVC总结 我的学习笔记

SpringMVC总结 我的学习笔记 一、SpringMVC简介1.MVC2.SpringMVC概述3. SpringMVC中的核心组件4.SpringMVC核心架构流程 二、SpringMVC框架实例具体实现使用注解实现 四、数据处理及跳转1.结果跳转方式2.处理器方法的参数与返回值处理提交数据数据显示到前端 五、RestFul风格1.…

Qml 模型-视图-代理(贰)之 动态视图学习

Repeater 元素适合有限的静态数据&#xff0c; QtQuick 提供了 ListView 和 GridView, 这两个都是基于 Flickable(可滑动) 区域的元素 &#xff0c; ListView 与 Repeater 相比&#xff0c; ListView 使用了一个 model&#xff0c; 使用delegate 来 实例化&#xff0c;并且在两…

rce代码层面

目录 RCE的分类Remote Code Execute 远程代码执⾏php Remote Command Execte 远程命令执⾏php shell的相关知识管道重定向fd反弹shell linux进程的创建c/php/python下的system()/popen()函数python的subprocess.call函数java的Runtime.getRuntime().exec和ProcessBuilder()命令…

一篇文章入门docker!

文章目录 DockerUbuntu 下 docker 安装安装docker运行docker Docker的常用命令帮助命令镜像命令容器命令其他常用命令小结 分层理解一、Docker镜像的分层结构二、UnionFS与镜像分层三、镜像层的具体内容四、镜像分层的好处五、容器层与镜像层的关系 如何提交一个自己的镜像 Doc…

【大数据学习 | HBASE】habse的表结构

在使用的时候hbase就是一个普通的表&#xff0c;但是hbase是一个列式存储的表结构&#xff0c;与我们常用的mysql等关系型数据库的存储方式不同&#xff0c;mysql中的所有列的数据是按照行级别进行存储的&#xff0c;查询数据要整个一行查询出来&#xff0c;不想要的字段也需要…

泛微E9 OA与金蝶云的差旅费报销接口集成

FD001-差旅费报销申请 泛微>金蝶--498 集成案例分享 在企业日常运营中&#xff0c;差旅费报销申请的处理效率直接影响到员工满意度和财务管理的精确性。为了实现泛微OA-Http系统与金蝶云星空平台之间的数据无缝对接&#xff0c;我们设计并实施了FD001-差旅费报销申请集成方…

鸿蒙开发:ArkUI Toggle 组件

ArkUI提供了一套完整的UI开发工具集&#xff0c;帮助开发者高效完成页面的开发。它融合了语言、编译器、图形构建等关键的应用UI开发底座&#xff0c;为应用的UI开发提供了完整的基础设施&#xff0c;包括简洁的UI语法、丰富的UI功能以及实时界面预览工具等&#xff0c;可以支持…