使用 Microsoft Fabric 和 PySpark 进行特征工程

【信息科学与工程学】计算机科学与自动化—第十五篇 云计算 11 算法篇02 但若第一个应用需求40GB/s,第二个10GB/s,总需求50GB/s>40GB/s,第一个得32GB/s,第二个得8GB/s,不公平。但若分区负载不均(分区1-2各有100任务/s,分区3-4各有50任务/s),A负责1-2(200/s),B负责3-4(100/s),仍均衡。任务 τi​ 的计算需求 Wi​(CPU周期),在频率 f 下执行时间 Ti​=Wi​/f,能耗 Ei​=Pdyn​⋅Ti​=Ceff​⋅V2⋅f⋅(Wi​/f)=Ceff​⋅V2⋅Wi​。若 Mneed​>Mi​,需使用远程显存。 阅读详情

原文:towardsdatascience.com/feature-engineering-with-microsoft-fabric-and-pyspark-16d458018744?source=collection_archive---------9-----------------------#2024-04-08

Fabric 疯狂系列第二部分

https://medium.com/@roger_noble?source=post_page---byline--16d458018744--------------------------------https://towardsdatascience.com/?source=post_page---byline--16d458018744-------------------------------- Roger Noble

·发表于 Towards Data Science ·12 分钟阅读·2024 年 4 月 8 日

–

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/e76cf994c16355962435cec1d006594b.png

图片由作者和 ChatGPT 提供。“设计一幅插图,重点描绘一位正在行动的篮球运动员,这次的主题是使用 PySpark 为机器学习模型生成特征,采用图像小说风格。”提示语:ChatGPT,4,OpenAI,2024 年 4 月 4 日。chat.openai.com.

特别感谢 Martim Chaves ,他与我共同撰写了这篇文章并开发了示例脚本。

在我们 之前的文章 中,我们从高层次的角度介绍了如何在 Microsoft Fabric 中训练机器学习模型。在这篇文章中,我们希望更深入地探讨特征工程的过程。

特征工程是任何机器学习(ML)系统开发生命周期中的关键部分。它是开发周期中的一个步骤,旨在处理原始数据,以更好地代表其潜在结构,并提供额外的信息,从而增强我们的机器学习模型。特征工程既是一门艺术,也是一门科学。尽管我们可以采取特定的步骤来创建良好的特征,但有时只有通过实验,才能获得好的结果。良好的特征对于保证系统性能至关重要。

随着数据集的指数增长,传统的特征工程可能在处理非常大的数据集时遇到困难。这时,PySpark 就能派上用场——它是一个可扩展且高效的处理平台,专为大规模数据集设计。Fabric 的一大优势是,它使得使用 PySpark 变得简单!

在这篇文章中,我们将讨论:

  • PySpark 是如何工作的?

  • PySpark 基础

  • 特征工程实践

希望在本文结束时,你能够自如地在 Fabric 中使用 PySpark 进行特征工程。让我们开始吧!

PySpark 是如何工作的?

Spark 是一个分布式计算系统,允许在机器集群上高效且快速地处理大规模数据集。它围绕弹性分布式数据集(RDD)概念构建,RDD 是一个容错的数据集合,能够并行处理。RDD 是 Spark 的基础数据结构,它们允许将数据分布到机器集群中。

PySpark 是 Spark 的 Python API。它允许创建 Spark DataFrame,类似于 Pandas DataFrame,但具有分布式跨机器集群的优势。PySpark DataFrame 是 PySpark 的核心数据结构,它们允许以分布式方式操作大规模数据集。

PySpark 的核心是 SparkSession 对象,它是与 Spark 交互的基础。这个 SparkSession 允许创建 DataFrame 和其他功能。请注意,在 Fabric 中运行 Notebook 时,会自动为你创建一个 SparkSession,因此你无需担心这个问题。

了解了 PySpark 的大致工作原理后,我们来看看基础知识。

PySpark 基础

尽管 Spark DataFrame 由于其相似性可能会让我们联想到 Pandas DataFrame,但使用 PySpark 时的语法可能会有所不同。在本节中,我们将介绍一些 PySpark 的基础知识,如读取数据、合并 DataFrame、选择列、分组数据、连接 DataFrame 和使用函数等。

数据

我们所查看的数据来自 2024 年美国大学篮球锦标赛,这些数据是从正在进行的Kaggle 2024 年 3 月机器学习狂潮竞赛中获取的,详情请见此处,并且根据 CC BY 4.0 许可协议[1]发布。

读取数据

正如在本系列的上一篇文章中提到的,第一步通常是创建一个湖仓并上传一些数据。然后,在创建 Notebook 时,我们可以将其附加到创建的湖仓上,这样我们就可以访问存储在那里的数据。

PySpark DataFrame 可以读取各种数据格式,如 CSV、JSON、Parquet 等。我们的数据存储为 CSV 格式,因此我们将使用该格式,如以下代码片段所示:

# Read women's data
w_data = (
    spark.read.option("header", True)
    .option("inferSchema", True)
    .csv(f"Files/WNCAATourneyDetailedResults.csv")
    .cache()
)

在这个代码片段中,我们正在读取最终女子篮球大学锦标赛比赛的详细结果数据集。请注意,"header" 选项为 true 时意味着列名将从 CSV 文件的第一行推导出来。inferSchema 选项告诉 Spark 自动推测列的数据类型——否则它们将全部作为字符串读取。.cache() 用于将 DataFrame 保持在内存中。

如果你来自 Pandas,你可能会好奇 PySpark 中 df.head() 的等效函数是什么 —— 它是 df.show(5)。.show() 的默认值是显示前 20 行,因此需要特别指定 5 行。

合并 DataFrame

合并 DataFrame 可以通过多种方式进行。我们首先查看的是 union,要求两个 DataFrame 的列名相同:

# Read women's data
...

# Read men's data
m_data = (
    spark.read.option("header", True)
    .option("inferSchema", True)
    .csv(f"Files/MNCAATourneyDetailedResults.csv")
    .cache()
)

# Combine (union) the DataFrames
combined_results = m_data.unionByName(w_data)

在这里,unionByName 通过匹配列名将两个 DataFrame 连接起来。由于女子和男子的 详细比赛结果 具有相同的列,这是一种很好的方法。另一种方法是使用 union,它通过匹配列的位置合并两个 DataFrame。

选择列

在 PySpark 中,可以使用 .select() 方法选择 DataFrame 中的列。我们只需将相关列的名称作为参数进行指定。

这是 w_scores.show(5) 的输出:

# Selecting a single column
w_scores = w_data.select("WScore")

# Selecting multiple columns
teamid_w_scores = w_data.select("WTeamID", "WScore")

这是 w_scores.show(5) 的输出:

+------+
|Season|
+------+
|  2010|
|  2010|
|  2010|
|  2010|
|  2010|
+------+
only showing top 5 rows

在选择列时,还可以使用 .alias() 方法重命名列:

winners = w_data.select(
    w_data.WTeamID.alias("TeamID"),
    w_data.WScore.alias("Score")
)

分组数据

分组允许我们对数据中的各个组执行某些操作,通常与聚合函数结合使用。我们可以使用 .groupBy() 来实现这一点:

# Grouping and aggregating
winners_average_scores = winners.groupBy("TeamID").avg("Score")

在这个示例中,我们按 "TeamID" 进行分组,这意味着我们考虑的是具有不同 "TeamID" 值的行组。对于每个组,我们计算 "Score" 的平均值。通过这种方式,我们可以获得每支队伍的平均得分。

这是 winners_average_scores.show(5) 的输出,显示了每支队伍的平均分数:

+------+-----------------+
|TeamID|       avg(Score)|
+------+-----------------+
|  3125|             68.5|
|  3345|             74.2|
|  3346|79.66666666666667|
|  3376|73.58333333333333|
|  3107|             61.0|
+------+-----------------+

连接数据

可以使用 .join() 方法连接两个 DataFrame。连接本质上是通过将一个 DataFrame 的列添加到另一个 DataFrame 来扩展 DataFrame。

# Joining on Season and TeamID
final_df = matches_df.join(stats_df, on=['Season', 'TeamID'], how='left')

在这个示例中,stats_df 和 matches_df 都使用 Season 和 TeamID 作为每一行的唯一标识符。除了 Season 和 TeamID 外,stats_df 还有其他列,比如每支队伍在每个赛季中的统计数据,而 matches_df 则包含关于比赛的信息,如日期和地点。此操作使我们能够将这些有趣的统计数据添加到比赛信息中!

函数

PySpark 提供了多个函数帮助我们转换 DataFrame。你可以在 这里 找到完整的函数列表。

这是一个简单函数的示例:

from pyspark.sql import functions as F

w_data = w_data.withColumn("HighScore", F.when(F.col("Score") > 80, "Yes").otherwise("No"))

在上面的代码片段中,当分数高于 80 时,会创建一个 "HighScore" 列。对于 "Score" 列中的每一行(由 .col() 函数指示),如果 "Score" 的值大于 80,则通过 .when() 函数选择 "HighScore" 列的值为 "Yes",否则通过 .otherwise() 函数选择值为 "No"。

特征工程实战

现在我们对 PySpark 有了基本的了解,并知道如何使用它,让我们来看看常规赛统计特征是如何创建的。这些特征随后被用作机器学习模型的输入,以尝试预测最终锦标赛比赛的结果。

起点是一个名为 regular_data 的数据框,包含了常规赛的逐场比赛统计数据,这是指每年从 11 月到 3 月的美国大学篮球赛季。

这个数据框中的每一行包含了赛季、比赛日期、队伍 1 的 ID、队伍 2 的 ID 以及其他信息,如比赛的地点。重要的是,它还包含了每支队伍在特定比赛中的统计数据,例如 "T1_FGM",表示队伍 1 的投篮命中数 (FGM),或者 "T2_OR",表示队伍 2 的进攻篮板 (OR)。

第一步是选择哪些列将被使用。这些列严格包含了比赛中的统计数据。

# Columns that we'll want to get statistics from
boxscore_cols = [
    'T1_FGM', 'T1_FGA', 'T1_FGM3', 'T1_FGA3', 'T1_OR', 'T1_DR', 'T1_Ast', 'T1_Stl', 'T1_PF', 
    'T2_FGM', 'T2_FGA', 'T2_FGM3', 'T2_FGA3', 'T2_OR', 'T2_DR', 'T2_Ast', 'T2_Stl', 'T2_PF'
]

如果你感兴趣,以下是每个统计数据代码的含义:

  • FGM: 投篮命中数

  • FGA: 投篮出手数

  • FGM3: 三分球命中数

  • FGA3: 三分球出手数

  • OR: 进攻篮板。篮板是指当一次投篮尝试未能进网时,球从篮板反弹出来。如果进行投篮尝试的队伍重新获得球权,这称为“进攻篮板”。否则,称为“防守篮板”。

  • DR: 防守篮板

  • Ast: 助攻,指直接导致进球的传球

  • Stl: 抢断,指球权被抢走

  • PF: 个人犯规,指球员犯规时

从那里开始,创建了一个聚合表达式字典。基本上,对于前面列出的每个列名,都会存储一个计算该列均值的函数,并通过添加后缀 "mean" 来重命名。

from pyspark.sql import functions as F
from pyspark.sql.functions import col  # select a column

agg_exprs = {col: F.mean(col).alias(col + 'mean') for col in boxscore_cols}

接着,数据按 "Season" 和 "T1_TeamID" 分组,并使用先前创建的字典中的聚合函数作为 .agg() 的参数。

season_statistics = regular_data.groupBy(["Season", "T1_TeamID"]).agg(*agg_exprs.values())

请注意,分组是按照赛季和队伍 1 的 ID进行的——这意味着,例如,"T2_FGAmean" 实际上会是 T1 对手的投篮出手数的均值,而不一定是某支特定队伍的投篮出手均值。所以,我们实际上需要将像 "T2_FGAmean" 这样的列重命名为类似 "T1_opponent_FGAmean" 的名称。

# Rename columns for T1
for col in boxscore_cols:
    season_statistics = season_statistics.withColumnRenamed(col + 'mean', 'T1_' + col[3:] + 'mean') if 'T1_' in col \
        else season_statistics.withColumnRenamed(col + 'mean', 'T1_opponent_' + col[3:] + 'mean')

在这一点上,必须提到的是,regular_data 数据框实际上每场比赛都有两行数据。这是为了让每场比赛的两支队伍都可以被标记为“T1”和“T2”。这个小“技巧”使得这些统计数据变得有用。

请注意,我们“只有”关于“T1”的统计数据。我们“需要”关于“T2”的统计数据——因为没有计算新的统计数据,所以“需要”加上引号。我们只需要相同的数据,但是列的名称不同,这样对于“T1”和“T2”的匹配,我们就能得到 T1 和 T2 的统计数据。因此,我们创建了一个镜像的 DataFrame,在这个 DataFrame 中,原来的“T1…mean”和“T1_opponent_…mean”被替换为“T2…mean”和“T2_opponent_…mean”。这是非常重要的,因为稍后,当我们将这些常规赛统计数据与锦标赛比赛数据合并时,我们就能够得到 T1 和 T2 的统计数据。

season_statistics_T2 = season_statistics.select(
    *[F.col(col).alias(col.replace('T1_opponent_', 'T2_opponent_').replace('T1_', 'T2_')) if col not in ['Season'] else F.col(col) for col in season_statistics.columns]
)

现在,有两个 DataFrame,分别包含了“T1”和“T2”的赛季统计数据。由于最终的 DataFrame 将包含“赛季”、“T1TeamID”和“T2TeamID”,我们可以通过合并操作将这些新创建的特征合并起来!

tourney_df = tourney_df.join(season_statistics, on=['Season', 'T1_TeamID'], how='left')
tourney_df = tourney_df.join(season_statistics_T2, on=['Season', 'T2_TeamID'], how='left')

Elo 评分

Elo 最早由阿尔帕德·厄洛创立,是一个用于零和游戏(即一方获胜另一方失败的游戏)的评分系统,例如篮球。在 Elo 评分系统中,每支队伍都有一个 Elo 评分,这个评分通常反映了队伍的质量。最初,每支队伍的 Elo 评分是相同的,当队伍获胜时,Elo 评分增加;当队伍失败时,Elo 评分减少。这个系统的一个关键特点是,战胜强队时 Elo 评分的增幅大于战胜弱队时的增幅。因此,它是一个非常有用的特征!

我们想要记录一个团队在常规赛结束时的 Elo 评分,并将其作为锦标赛的特征。为了做到这一点,我们为每场比赛计算了每个团队的 Elo 评分。为了计算这个特征的 Elo,我们发现使用 Pandas 更为直观。

Elo 的核心是计算每支队伍的预期得分。可以通过以下代码来描述这一过程:

# Function to calculate expected score
def expected_score(ra, rb):
    # ra = rating (Elo) team A
    # rb = rating (Elo) team B
    # Elo function
    return 1 / (1 + 10 ** ((rb - ra) / 400))

考虑一支队伍 A 和一支队伍 B,这个函数计算队伍 A 对队伍 B 的预期得分。

对于每场比赛,我们都会更新队伍的 Elo 评分。请注意,比赛的地点也起着作用——在主场获胜被认为不如客场获胜令人印象深刻。

# Function to update Elo ratings, keeping T1 and T2 terminology
def update_elo(t1_elo, t2_elo, location, T1_Score, T2_Score):
    expected_t1 = expected_score(t1_elo, t2_elo)
    expected_t2 = expected_score(t2_elo, t1_elo)

    actual_t1 = 1 if T1_Score > T2_Score else 0
    actual_t2 = 1 - actual_t1

    # Determine K based on game location
    # The larger the K, the bigger the impact
    # team1 winning at home (location=1) less impressive than winning away (location = -1)
    if actual_t1 == 1:  # team1 won
        if location == 1:
            k = 20
        elif location == 0:
            k = 30
        else:  # location = -1
            k = 40
    else:  # team2 won
        if location == 1:
            k = 40
        elif location == 0:
            k = 30
        else:  # location = -1
            k = 20

    new_t1_elo = t1_elo + k * (actual_t1 - expected_t1)
    new_t2_elo = t2_elo + k * (actual_t2 - expected_t2)

    return new_t1_elo, new_t2_elo

为了应用 Elo 评分系统,我们遍历了每个赛季的比赛,为每支队伍初始化一个基础评分,并逐场更新它们的评分。每支队伍在每个赛季的最终 Elo 评分,应该能很好地描述该队伍的质量。

def calculate_elo_through_seasons(regular_data):

    # For this feature, using Pandas
    regular_data = regular_data.toPandas()

    # Set value of initial elo
    initial_elo = 1500

    # DataFrame to collect final Elo ratings
    final_elo_list = []

    for season in sorted(regular_data['Season'].unique()):
        print(f"Season: {season}")
        # Initialize elo ratings dictionary
        elo_ratings = {}

        print(f"Processing Season: {season}")
        # Get the teams that played in the season
        season_teams = set(regular_data[regular_data['Season'] == season]['T1_TeamID']).union(set(regular_data[regular_data['Season'] == season]['T2_TeamID']))

        # Initialize season teams' Elo ratings
        for team in season_teams:
            if (season, team) not in elo_ratings:
                elo_ratings[(season, team)] = initial_elo

        # Update Elo ratings per game
        season_games = regular_data[regular_data['Season'] == season]
        for _, row in season_games.iterrows():
            t1_elo = elo_ratings[(season, row['T1_TeamID'])]
            t2_elo = elo_ratings[(season, row['T2_TeamID'])]

            new_t1_elo, new_t2_elo = update_elo(t1_elo, t2_elo, row['location'], row['T1_Score'], row['T2_Score'])

            # Only keep the last season rating
            elo_ratings[(season, row['T1_TeamID'])] = new_t1_elo
            elo_ratings[(season, row['T2_TeamID'])] = new_t2_elo

        # Collect final Elo ratings for the season
        for team in season_teams:
            final_elo_list.append({'Season': season, 'TeamID': team, 'Elo': elo_ratings[(season, team)]})

    # Convert list to DataFrame
    final_elo_df = pd.DataFrame(final_elo_list)

    # Separate DataFrames for T1 and T2
    final_elo_t1_df = final_elo_df.copy().rename(columns={'TeamID': 'T1_TeamID', 'Elo': 'T1_Elo'})
    final_elo_t2_df = final_elo_df.copy().rename(columns={'TeamID': 'T2_TeamID', 'Elo': 'T2_Elo'})

    # Convert the pandas DataFrames back to Spark DataFrames
    final_elo_t1_df = spark.createDataFrame(final_elo_t1_df)
    final_elo_t2_df = spark.createDataFrame(final_elo_t2_df)

    return final_elo_t1_df, final_elo_t2_df

理想情况下,我们不会逐场计算 Elo 的变化来确定每支队伍赛季结束时的最终 Elo。然而,我们没有想到更好的方法。你有什么想法吗?如果有,请告诉我们!

附加值

展示的特征工程步骤展示了我们如何将原始数据——常规赛统计数据——转化为具有预测能力的有价值信息。可以合理假设,一支球队在常规赛中的表现能够反映其在最终锦标赛中的潜在表现。通过计算每场比赛的统计数据平均值,包括球队和对手的统计数据,以及每支球队在最后一场比赛中的 Elo 评分,我们能够创建一个适合建模的数据集。然后,使用这些特征,训练模型来预测锦标赛比赛的结果,其他特征也以类似的方式开发。通过这些模型,我们只需要两个球队的 ID,查找它们的常规赛统计数据平均值和 Elo 评分,输入到模型中即可预测得分!

结论

在这篇文章中,我们探讨了 Spark 和 PySpark 背后的部分理论,如何应用这些理论,并展示了一个具体的实践例子。我们研究了如何在体育数据的案例中进行特征工程,创建常规赛统计数据,作为最终锦标赛比赛的特征使用。希望你觉得这篇文章有趣且有帮助——祝特征工程愉快!

这篇文章及系列中其他文章的完整源代码可以在 这里找到。

最初发布于 https://nobledynamic.com 2024 年 4 月 8 日。

参考文献

[1] Jeff Sonas, Ryan Holbrook, Addison Howard, Anju Kandru. (2024). March Machine Learning Mania 2024. Kaggle. kaggle.com/competitions/march-machine-learning-mania-2024

【多媒体处理】基于C++与Qt的短视频智能裁剪系统:FFmpeg驱动的横竖屏转换与预览解决方案 项目介绍 基于C++、Qt与FFmpeg的短视频横竖屏智能裁剪与预览系统设计与实现(含模型描述及部分示例 内容概要:本文介绍了一个基于C++、Qt与FFmpeg的短视频横竖屏智能裁剪与预览系统的设计与实现。系统通过构建完整的视频处理闭环,实现了从视频读取、解码、内容分析、智能裁剪到实时预览和重新编码的全流程处理。核心架构分为五个层次:媒体输入与标准化层利用FFmpeg完成视频解复用与解码,并统一帧格式;视觉重要区域分析层通过显著性检测、边缘强度、颜色差异和运动信息识别画面中的主体区域;时序跟踪与轨迹稳定层采用卡尔曼滤波或指数平滑技术对主体位置进行连续优化,确保裁剪窗口在时间维度上的稳定性;比例约束与裁剪决策层根据目标宽高比和主体位置求解最优裁剪框,兼顾内容保留与画面合规;预览、导出与任务控制层基于Qt实现双画面同步预览、参数配置和导出控制,保障交互流畅性。项目还提供了模拟数据生成功能,可批量生成五万条包含分辨率、主体位置、运动速度、覆盖率等字段的结构化样本,支持算法验证与模型训练。; 适合人群:具备C++编程基础,熟悉Qt图形界面开发和FFmpeg多媒体处理技术的中高级研发人员,尤其适用于从事视频处理、智能编辑、自动化内容生产等相关领域的开发者或科研人员。; 使用场景及目标:①解决短视频在横竖屏转换过程中因固定裁剪导致的主体丢失问题,提升内容保留能力;②实现高效稳定的智能裁剪算法原型开发与性能测试;③构建可扩展的视频处理系统框架,支持后续集成人脸检测、人体识别或深度学习模型;④为算法优化提供标准化数据集,支持回归测试与质量评估。; 阅读建议:此资源不仅包含完整的技术架构设计和核心代码示例,还强调工程实践中对资源管理、线程安全、性能优化和异常处理的关注。建议读者结合代码实现深入理解各模块间的协作机制,并尝试替换分析器或调整平滑策略以验证不同算法效果。同时推荐运行数据生成模块,用于训练模型或开展量化对比实验。 立即下载

相关推荐

政府科技管理者如何提升科技成果转化项目进场交易的备案效率?.docx

政府科技管理者如何提升科技成果转化项目进场交易的备案效率?

Fabric Madness

在 Fabric 中,实验可以看作是一组相关的运行,其中运行是代码片段的执行。在这种情况下,运行即是模型的训练。对于每一次运行,模型将使用不同的超参数集合进行训练。超参数集合及最终的模型评分会被记录下来,并且这些信息对每次运行都是可用的。一旦足够多的运行完成,就可以比较最终的模型评分,从而选择每个模型的最佳版本。在 Fabric 中创建实验可以通过 UI 或直接从 Notebook 进行。实验本质上是的包装器。使用 Fabric 中的实验有一个很棒的优点,那就是结果可以与他人共享。

龙哥盟 963

科技中介服务机构如何通过智能体技术提升服务效率与专业度?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

Python 学习 ---> 模块、pypi ( 模块库 )、添加模块路径

什么是 模块 在 Python 中,一个.py文件就是一个模块(Module)。模块的名字就是文件的名字。在模块内部,通过全局变量__name__可以获取模块名(即字符串) 模块作用 为了实现代码的复用,通常会把一些其他程序中重用的代码拿出来单独放在一个程序文件中,

freeking101的博客 3485

产业园区如何高效对接企业技术需求并推动成果转化?观点作者:科易网-国家科技成果转化(厦门)示范基地.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

政府科技管理者在推动科技成果转化时,如何高效整合区域创新要素资源?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

无功优化电网故障下分布式能源系统多目标优化[并网转换器(GCC)](Matlab代码&Simulink实现)

内容概要:本文详细介绍了基于Plecs或Simulink平台构建的全桥LLC谐振变换器仿真模型,重点研究了变频控制与移相混合控制策略下的闭环系统设计与参数优化方法。内容涵盖全桥LLC谐振变换器的工作原理、小信号建模技术(如扩展描述函数EDF)、PID控制器参数整定过程以及软开关实现条件,并通过仿真验证了系统在稳态输出性能、动态响应特性(如启动过程与负载阶跃)和频率调节平滑性等方面的优良表现。同时提供了完整的仿真模型、参数设计报告及说明文档,有助于读者复现结果并深入理解控制机制与建模细节。; 适合人群:具备电力电子、自动控制等相关专业知识背景,从事高效率电源设计、新能源变换系统研发的工程师及高等院校电力电子与电力传动方向的研究生。; 使用场景及目标:①掌握LLC谐振变换器的小信号建模与闭环控制系统设计方法;②学习并应用变频与移相结合控制策略提升电源转换效率;③支撑科研项目中的电力电子系统仿真验证或学位论文课题开发;④复现高水平学术论文中关于谐振变换器的控制方案与性能分析。; 阅读建议:建议结合所提供的仿真模型与参数设计资料,边运行仿真边对照文章内容理解控制逻辑与建模过程,特别关注小信号模型的建立方法与PID控制器参数整定环节,以增强对实际工程问题的分析与设计能力。

法律服务业AI知识库与大模型训练平台规划方案.pptx

法律服务业AI知识库与大模型训练平台规划方案.pptx

两相交错并联Boost电路仿真模型(Simulink仿真实现)

内容概要:本文围绕两相交错并联Boost电路的Simulink仿真模型展开,旨在通过仿真手段深入研究该电路在电力电子系统中的工作特性与性能优势。文章系统阐述了两相交错并联Boost电路的拓扑结构、工作原理及其在提升系统效率、减小输入电流纹波、均衡电流分配方面的显著优势。通过构建完整的Simulink仿真模型,对电路在不同负载与输入条件下的动态响应、稳态性能及控制策略进行了全面分析与验证。重点设计并实现了电压电流双闭环PI控制策略,详细论述了PI控制器的参数整定方法、占空比调节机制以及交错并联所带来的均流效果。仿真结果表明,所构建的模型能够有效提升系统的动态响应速度与稳定性,显著降低输入电流的谐波含量与纹波幅值,验证了交错并联技术在中高功率DC-DC变换应用中的优越性。; 适合人群:具备电力电子技术基础、熟悉Simulink仿真的电气工程及相关专业本科生、研究生,以及从事电源系统设计、新能源变换器研发的工程技术人员。; 使用场景及目标:①学习和掌握交错并联Boost电路的拓扑结构、工作原理与建模方法;②开展电力电子变换器的仿真分析、控制器设计与参数优化;③为实际工程项目中的高性能DC-DC变换器设计,特别是追求低输入纹波和高功率密度的应用场景,提供理论支撑与仿真验证依据。; 阅读建议:建议读者结合Simulink模型文件同步操作,深入理解主电路各模块、双闭环控制结构及PWM调制环节的参数设置与逻辑实现,重点关注PI控制器的参数整定过程与交错控制的时序配合,并可通过调整输入电压、负载大小及控制参数进行对比实验,以深化对交错并联技术优势及其控制策略的理解。

政府科技管理者在推动科技成果转化时,如何精准识别区域内的技术供需匹配问题?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

山区道路边坡落石隐患检测数据集VOC+YOLO格式241张1类别.md

【重要提示】本页面仅为资源介绍,不含外部下载地址 亲爱的 优快云 用户: 感谢你浏览本资源页面,在这里提前向大家说明相关情况,避免后续产生误解。本资源我设置的初衷是 0 积分免费分享文档介绍,希望可以无偿给到有需要的朋友。但 优快云 平台存在自动调控机制,系统会根据资源下载热度、文件体积、平台规则等因素,自动修改资源所需下载积分,页面显示为 1 积分、2 积分或更高积分都属于平台自动调整结果,并非我手动修改设置,我没有权限自主锁定积分数值。 如果你打开页面后,发现下载所需积分不为 0,请务必谨慎考虑是否下载。一旦你支付积分完成下载,后续遇到资源内容和描述不符、文件损坏等问题,我无法承担对应的积分损失,也没有渠道为你办理积分退还。在此强烈建议,只有页面明确显示 0 积分的时候,再进行下载操作。 同时特别说明:这份资源介绍文案里,没有附带任何外部下载地址。资源本身是通过 优快云 官方上传通道上传的附件,正常情况下直接点击页面自带的下载按钮即可获取文件。页面找不到外部下载链接属于正常情况,并非资源缺失。 如果因为平台积分显示异常,导致你被扣取积分,积分退款、积分异常相关问题,请直接联系 优快云 官方客服咨询处理。平台规则由官方制定,我无法干预积分变动,望各位理解。

秋葵成熟度检测数据集VOC+YOLO格式508张3类别.md

【重要提示】本页面仅为资源介绍,不含外部下载地址 亲爱的 优快云 用户: 感谢你浏览本资源页面,在这里提前向大家说明相关情况,避免后续产生误解。本资源我设置的初衷是 0 积分免费分享文档介绍,希望可以无偿给到有需要的朋友。但 优快云 平台存在自动调控机制,系统会根据资源下载热度、文件体积、平台规则等因素,自动修改资源所需下载积分,页面显示为 1 积分、2 积分或更高积分都属于平台自动调整结果,并非我手动修改设置,我没有权限自主锁定积分数值。 如果你打开页面后,发现下载所需积分不为 0,请务必谨慎考虑是否下载。一旦你支付积分完成下载,后续遇到资源内容和描述不符、文件损坏等问题,我无法承担对应的积分损失,也没有渠道为你办理积分退还。在此强烈建议,只有页面明确显示 0 积分的时候,再进行下载操作。 同时特别说明:这份资源介绍文案里,没有附带任何外部下载地址。资源本身是通过 优快云 官方上传通道上传的附件,正常情况下直接点击页面自带的下载按钮即可获取文件。页面找不到外部下载链接属于正常情况,并非资源缺失。 如果因为平台积分显示异常,导致你被扣取积分,积分退款、积分异常相关问题,请直接联系 优快云 官方客服咨询处理。平台规则由官方制定,我无法干预积分变动,望各位理解。

高空作业栏杆检测数据集VOC+YOLO格式230张3类别.md

【重要提示】本页面仅为资源介绍,不含外部下载地址 亲爱的 优快云 用户: 感谢你浏览本资源页面,在这里提前向大家说明相关情况,避免后续产生误解。本资源我设置的初衷是 0 积分免费分享文档介绍,希望可以无偿给到有需要的朋友。但 优快云 平台存在自动调控机制,系统会根据资源下载热度、文件体积、平台规则等因素,自动修改资源所需下载积分,页面显示为 1 积分、2 积分或更高积分都属于平台自动调整结果,并非我手动修改设置,我没有权限自主锁定积分数值。 如果你打开页面后,发现下载所需积分不为 0,请务必谨慎考虑是否下载。一旦你支付积分完成下载,后续遇到资源内容和描述不符、文件损坏等问题,我无法承担对应的积分损失,也没有渠道为你办理积分退还。在此强烈建议,只有页面明确显示 0 积分的时候,再进行下载操作。 同时特别说明:这份资源介绍文案里,没有附带任何外部下载地址。资源本身是通过 优快云 官方上传通道上传的附件,正常情况下直接点击页面自带的下载按钮即可获取文件。页面找不到外部下载链接属于正常情况,并非资源缺失。 如果因为平台积分显示异常,导致你被扣取积分,积分退款、积分异常相关问题,请直接联系 优快云 官方客服咨询处理。平台规则由官方制定,我无法干预积分变动,望各位理解。

景嘉微 JM 9100 系列 麒麟操作系统驱动包 x86架构

景嘉微 JM 9100 系列 麒麟操作系统驱动包 x86架构

ti-cgt-c2000-22.6.0.LTS-windows-x64-installer

ti-cgt-c2000-22.6.0.LTS-windows-x64-installer

光伏板太阳能板尘土灰尘脏污检测数据集VOC+YOLO格式1006张3类别.md

【重要提示】本页面仅为资源介绍,不含外部下载地址 亲爱的 优快云 用户: 感谢你浏览本资源页面,在这里提前向大家说明相关情况,避免后续产生误解。本资源我设置的初衷是 0 积分免费分享文档介绍,希望可以无偿给到有需要的朋友。但 优快云 平台存在自动调控机制,系统会根据资源下载热度、文件体积、平台规则等因素,自动修改资源所需下载积分,页面显示为 1 积分、2 积分或更高积分都属于平台自动调整结果,并非我手动修改设置,我没有权限自主锁定积分数值。 如果你打开页面后,发现下载所需积分不为 0,请务必谨慎考虑是否下载。一旦你支付积分完成下载,后续遇到资源内容和描述不符、文件损坏等问题,我无法承担对应的积分损失,也没有渠道为你办理积分退还。在此强烈建议,只有页面明确显示 0 积分的时候,再进行下载操作。 同时特别说明:这份资源介绍文案里,没有附带任何外部下载地址。资源本身是通过 优快云 官方上传通道上传的附件,正常情况下直接点击页面自带的下载按钮即可获取文件。页面找不到外部下载链接属于正常情况,并非资源缺失。 如果因为平台积分显示异常,导致你被扣取积分,积分退款、积分异常相关问题,请直接联系 优快云 官方客服咨询处理。平台规则由官方制定,我无法干预积分变动,望各位理解。

上一篇: 使用 Microsoft Fabric 和 Dataflow Gen2 进行特征工程
下一篇: 特征提取:从理论到实践,使用 Python
绝不原创的飞龙
绝不原创的飞龙 优质创作者: 人工智能、数据科学与机器学习技术领域 优质创作者: 人工智能、数据科学与机器学习技术领域
博客等级 码龄15年 4万+粉丝 2万+原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值