Python实战开发及案例分析(14)—— 随机森林

        随机森林(Random Forest)是一种基于决策树的集成学习方法,由多个独立训练的决策树组成,能够显著提升模型的性能和稳定性。它通过引入随机性,增强了模型的泛化能力。随机森林通常用于分类和回归问题。

随机森林的工作原理

  1. 随机采样:使用自助采样法(Bootstrap Sampling),即有放回的随机抽样,创建多个样本数据集。
  2. 构建决策树:对每个样本数据集构建一棵决策树,在节点分裂时,随机选择特征的子集进行最佳分裂。
  3. 集成预测
    • 分类问题:采用投票方式,选择得票最多的类别作为预测结果。
    • 回归问题:取多个决策树预测值的平均值作为最终预测结果。

Python 实现:随机森林

        我们可以使用 scikit-learn 库实现随机森林。下面是一个分类问题的具体案例:

案例分析:使用随机森林进行鸢尾花分类

数据集:鸢尾花数据集(Iris Dataset)

Python 实现:

# 导入所需库
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report, confusion_matrix, accuracy_score
import seaborn as sns
import matplotlib.pyplot as plt

# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 使用随机森林进行分类
rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf.fit(X_train, y_train)

# 预测测试集
y_pred = rf.predict(X_test)

# 输出分类报告和混淆矩阵
print("Classification Report:")
print(classification_report(y_test, y_pred, target_names=iris.target_names))

print("Confusion Matrix:")
cm = confusion_matrix(y_test, y_pred)
sns.heatmap(cm, annot=True, fmt="d", cmap="Blues", xticklabels=iris.target_names, yticklabels=iris.target_names)
plt.xlabel("Predicted")
plt.ylabel("Actual")
plt.show()

# 输出准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.2f}")

# 绘制特征重要性
feature_importances = rf.feature_importances_
features = iris.feature_names
sns.barplot(x=feature_importances, y=features)
plt.xlabel("Feature Importance Score")
plt.ylabel("Features")
plt.title("Feature Importance in Random Forest")
plt.show()
案例分析:使用随机森林进行回归

数据集:加州房价数据集(California Housing Dataset)

Python 实现:

# 导入所需库
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

# 加载加州房价数据集
california = fetch_california_housing()
X = california.data
y = california.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 使用随机森林进行回归
rf = RandomForestRegressor(n_estimators=100, random_state=42)
rf.fit(X_train, y_train)

# 预测测试集
y_pred = rf.predict(X_test)

# 输出性能指标
mse = mean_squared_error(y_test, y_pred)
mae = mean_absolute_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f"Mean Squared Error: {mse:.2f}")
print(f"Mean Absolute Error: {mae:.2f}")
print(f"R-squared Score: {r2:.2f}")

# 绘制预测值与实际值的散点图
plt.scatter(y_test, y_pred, alpha=0.5)
plt.xlabel("Actual Values")
plt.ylabel("Predicted Values")
plt.title("Actual vs Predicted Values (Random Forest Regression)")
plt.show()

# 绘制特征重要性
feature_importances = rf.feature_importances_
features = california.feature_names
sns.barplot(x=feature_importances, y=features)
plt.xlabel("Feature Importance Score")
plt.ylabel("Features")
plt.title("Feature Importance in Random Forest Regression")
plt.show()

解释与总结

  1. 鸢尾花分类案例

    • 使用 RandomForestClassifier 进行多分类问题。
    • 输出分类报告和混淆矩阵,显示了模型的性能。
    • 使用特征重要性图显示了模型对不同特征的依赖程度。
  2. 加州房价回归案例

    • 使用 RandomForestRegressor 进行回归问题。
    • 输出性能指标,包括 MSE、MAE 和 R²。
    • 使用散点图显示实际值与预测值的关系。
  3. 总结

    • 随机森林是一种强大的集成学习方法,可以有效解决分类和回归问题。
    • 特征重要性图有助于解释模型的决策依据。
    • scikit-learn 提供了丰富的随机森林参数调整选项,可以根据实际问题进行优化。

        为了进一步深化对随机森林算法的理解和应用,我们可以考虑以下方面:

  1. 超参数调优:通过交叉验证和网格搜索进行模型调优。
  2. 随机森林可解释性:使用 SHAP 或 LIME 等工具解释模型。
  3. 实际应用案例:对现实数据集进行建模和分析。

超参数调优

        随机森林有多个超参数可以调节,例如:

  • n_estimators:树的数量
  • max_depth:树的最大深度
  • min_samples_split:节点分裂所需的最小样本数
  • max_features:寻找最佳分裂时的特征数量
Python 实现:随机森林超参数调优

        我们可以使用 GridSearchCV 进行网格搜索,找到最佳参数组合。

分类问题超参数调优案例:鸢尾花分类

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report, accuracy_score
import seaborn as sns
import matplotlib.pyplot as plt

# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 定义参数网格
param_grid = {
    'n_estimators': [50, 100, 200],
    'max_depth': [None, 10, 20, 30],
    'min_samples_split': [2, 5, 10],
    'max_features': ['auto', 'sqrt', 'log2']
}

# 使用 GridSearchCV 进行超参数调优
rf = RandomForestClassifier(random_state=42)
grid_search = GridSearchCV(estimator=rf, param_grid=param_grid, cv=5, scoring='accuracy')
grid_search.fit(X_train, y_train)

# 输出最佳参数组合
print("Best Parameters:", grid_search.best_params_)

# 使用最佳参数组合进行分类
best_rf = grid_search.best_estimator_
y_pred = best_rf.predict(X_test)

# 输出分类报告
print("\nClassification Report:")
print(classification_report(y_test, y_pred, target_names=iris.target_names))

# 输出准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.2f}")

# 绘制混淆矩阵
cm = confusion_matrix(y_test, y_pred)
sns.heatmap(cm, annot=True, fmt="d", cmap="Blues", xticklabels=iris.target_names, yticklabels=iris.target_names)
plt.xlabel("Predicted")
plt.ylabel("Actual")
plt.title("Confusion Matrix (Optimized Random Forest)")
plt.show()

随机森林可解释性

        随机森林模型的可解释性可以通过特征重要性(Feature Importance)实现。此外,使用 SHAP 或 LIME 可以更全面地解释模型。

Python 实现:使用 SHAP 解释随机森林模型

分类问题解释案例:鸢尾花分类

import shap
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
import matplotlib.pyplot as plt

# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 使用随机森林进行分类
rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf.fit(X_train, y_train)

# 使用 SHAP 进行解释
explainer = shap.TreeExplainer(rf)
shap_values = explainer.shap_values(X_test)

# 绘制总体特征重要性图
shap.summary_plot(shap_values, X_test, feature_names=iris.feature_names)

# 绘制单个样本的特征重要性解释
shap.force_plot(explainer.expected_value[0], shap_values[0][0], X_test[0], feature_names=iris.feature_names)

实际应用案例:信用卡欺诈检测

        我们可以尝试使用随机森林对现实数据集进行建模和分析。在此案例中,我们将使用一个信用卡欺诈检测数据集。

Python 实现:信用卡欺诈检测
import pandas as pd
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report, confusion_matrix, accuracy_score
import seaborn as sns
import matplotlib.pyplot as plt

# 加载信用卡欺诈检测数据集
data_url = "https://storage.googleapis.com/download.tensorflow.org/data/creditcard.csv"
data = pd.read_csv(data_url)

# 查看数据集信息
print(data.head())

# 选择特征和标签
X = data.drop(columns=["Class"])
y = data["Class"]

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 使用随机森林进行分类
rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf.fit(X_train, y_train)

# 预测测试集
y_pred = rf.predict(X_test)

# 输出分类报告
print("\nClassification Report:")
print(classification_report(y_test, y_pred, target_names=["Not Fraud", "Fraud"]))

# 输出准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.2f}")

# 绘制混淆矩阵
cm = confusion_matrix(y_test, y_pred)
sns.heatmap(cm, annot=True, fmt="d", cmap="Blues", xticklabels=["Not Fraud", "Fraud"], yticklabels=["Not Fraud", "Fraud"])
plt.xlabel("Predicted")
plt.ylabel("Actual")
plt.title("Confusion Matrix (Random Forest - Credit Card Fraud Detection)")
plt.show()

总结

  1. 超参数调优

    • 使用 GridSearchCV 进行超参数调优,可以显著提升随机森林的性能。
  2. 模型可解释性

    • 使用 SHAP 或 LIME 可以更直观地理解模型决策。
  3. 实际应用案例

    • 信用卡欺诈检测等现实问题中,随机森林能够很好地处理数据不平衡问题。

        随机森林具有较强的鲁棒性和泛化能力,是分类和回归任务中的优秀选择。

        为了进一步提升随机森林的理解和应用,我们可以探索以下内容:

  1. 数据不平衡处理:在不平衡数据集上使用随机森林。
  2. 自定义特征重要性度量:通过改变评价标准(如 Gini 不纯度和信息增益)来衡量特征的重要性。
  3. 与其他集成学习方法的比较:与梯度提升树和 XGBoost 等方法比较性能。

数据不平衡处理

        数据不平衡是实际应用中常见的问题,直接使用随机森林可能会导致模型对少数类的识别能力不足。我们可以通过以下方式进行调整:

  • 增加采样策略
    • 欠采样(Undersampling):减少多数类样本。
    • 过采样(Oversampling):增加少数类样本。
  • 调整分类权重
    • 设置 class_weight='balanced' 来自动调整类别权重。
Python 实现:数据不平衡处理

信用卡欺诈检测案例

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report, confusion_matrix, accuracy_score
import seaborn as sns
import matplotlib.pyplot as plt

# 加载信用卡欺诈检测数据集
data_url = "https://storage.googleapis.com/download.tensorflow.org/data/creditcard.csv"
data = pd.read_csv(data_url)

# 查看数据集信息
print(data.head())

# 选择特征和标签
X = data.drop(columns=["Class"])
y = data["Class"]

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 使用随机森林,设置 class_weight 为 'balanced'
rf_balanced = RandomForestClassifier(n_estimators=100, class_weight='balanced', random_state=42)
rf_balanced.fit(X_train, y_train)

# 预测测试集
y_pred_balanced = rf_balanced.predict(X_test)

# 输出分类报告
print("\nClassification Report (Balanced Random Forest):")
print(classification_report(y_test, y_pred_balanced, target_names=["Not Fraud", "Fraud"]))

# 输出准确率
accuracy_balanced = accuracy_score(y_test, y_pred_balanced)
print(f"Accuracy: {accuracy_balanced:.2f}")

# 绘制混淆矩阵
cm_balanced = confusion_matrix(y_test, y_pred_balanced)
sns.heatmap(cm_balanced, annot=True, fmt="d", cmap="Blues", xticklabels=["Not Fraud", "Fraud"], yticklabels=["Not Fraud", "Fraud"])
plt.xlabel("Predicted")
plt.ylabel("Actual")
plt.title("Confusion Matrix (Balanced Random Forest - Credit Card Fraud Detection)")
plt.show()

自定义特征重要性度量

        特征重要性是随机森林模型可解释性的重要指标。我们可以使用不同的特征重要性度量标准,例如:

  1. Gini 不纯度(默认)
  2. 信息增益
Python 实现:自定义特征重要性度量

特征重要性可视化案例

import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 使用随机森林进行分类,使用 Gini 不纯度作为度量标准
rf_gini = RandomForestClassifier(n_estimators=100, criterion='gini', random_state=42)
rf_gini.fit(X_train, y_train)

# 使用随机森林进行分类,使用信息增益(熵)作为度量标准
rf_entropy = RandomForestClassifier(n_estimators=100, criterion='entropy', random_state=42)
rf_entropy.fit(X_train, y_train)

# 获取特征重要性
feature_importances_gini = rf_gini.feature_importances_
feature_importances_entropy = rf_entropy.feature_importances_
features = iris.feature_names

# 绘制特征重要性对比图
fig, axs = plt.subplots(1, 2, figsize=(12, 5))

sns.barplot(x=feature_importances_gini, y=features, ax=axs[0])
axs[0].set_title("Feature Importance (Gini)")
axs[0].set_xlabel("Importance Score")
axs[0].set_ylabel("Feature")

sns.barplot(x=feature_importances_entropy, y=features, ax=axs[1])
axs[1].set_title("Feature Importance (Entropy)")
axs[1].set_xlabel("Importance Score")
axs[1].set_ylabel("Feature")

plt.tight_layout()
plt.show()

与其他集成学习方法的比较

        我们可以将随机森林与其他集成学习方法进行性能比较,例如:

  1. 梯度提升树(Gradient Boosting Trees)
  2. XGBoost
  3. LightGBM
Python 实现:集成学习方法的比较

鸢尾花分类案例

from sklearn.ensemble import GradientBoostingClassifier, RandomForestClassifier
from xgboost import XGBClassifier
from lightgbm import LGBMClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report, accuracy_score
import matplotlib.pyplot as plt

# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 定义模型
models = {
    "RandomForest": RandomForestClassifier(n_estimators=100, random_state=42),
    "GradientBoosting": GradientBoostingClassifier(n_estimators=100, random_state=42),
    "XGBoost": XGBClassifier(n_estimators=100, random_state=42, use_label_encoder=False),
    "LightGBM": LGBMClassifier(n_estimators=100, random_state=42)
}

# 训练和评估每个模型
accuracy_scores = {}
for name, model in models.items():
    model.fit(X_train, y_train)
    y_pred = model.predict(X_test)
    accuracy = accuracy_score(y_test, y_pred)
    accuracy_scores[name] = accuracy
    print(f"\n{name} Classification Report:")
    print(classification_report(y_test, y_pred, target_names=iris.target_names))

# 绘制各模型的准确率对比
plt.bar(accuracy_scores.keys(), accuracy_scores.values())
plt.xlabel("Model")
plt.ylabel("Accuracy Score")
plt.title("Model Comparison on Iris Dataset")
plt.show()

总结

  1. 数据不平衡处理

    • 使用 class_weight='balanced' 调整类别权重。
  2. 自定义特征重要性度量

    • 比较 Gini 不纯度与信息增益(熵)。
  3. 集成学习方法比较

    • 梯度提升树、XGBoost 和 LightGBM 提供了不同的性能特征。

        随机森林在分类和回归问题中具有广泛应用,可以通过超参数调优和数据处理进一步提高其性能。

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

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

相关文章

ESP32引脚入门指南(四):从理论到实践(PWM)

引言 ESP32 作为物联网领域的明星微控制器,除了强大的Wi-Fi和蓝牙功能,还内置了丰富的外设资源,其中就包括高级的PWM(脉冲宽度调制)功能。本文将深入探讨ESP32的PWM引脚,解析其工作原理,并通过…

OV SSL比DV SSL更好吗

直接说结论,OV证书相较于DV证书而言,性能更加强大,加密等级以及加密方式也更优,从安全的角度上来说,OV证书会比DV证书拥有更多的优势。 不同于DV SSL证书申请只需要验证域名所有权,申请OV SSL证书除了会验…

Java的事件处理机制

Java事件处理机制 Java事件处理是采取“委派事件模型”。当事件发生时,产生事件的对象,会把此“信息”传递给“事件的监听者”处理,这里所说的“信息”实际上就是java.awt.event事件类库里某个类所创建的对象,把它称为“事件的对…

基于Springboot+Vue的Java项目-电影院购票系统开发实战(附演示视频+源码+LW)

大家好!我是程序员衣一帆,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…

国内护眼台灯品牌哪些实用?推荐五款物美价廉的台灯品牌

近年来,我们注意到儿童近视的现象呈现出增多且趋于低龄化的趋势。这一变化,部分原因可以归咎于孩子们越来越多地使用电子产品,另一部分则与他们面临的学业压力增加有关。鉴于此,家长们在挑选儿童学习用品时变得格外谨慎&#xff0…

华为OD机试【城市聚集度】(java)(200分)

1、题目描述 一张地图上有N个城市,城市和城市之间有且只有一条道路相连,要么直接相连,要么通过其他城市中转相连(可中转一次或多次)。城市与城市之间的道路都不会成环。 当切断通往某城市i的所有道路后,地图上将分成多个连通的城…

百融云创回购计划加速落实 机构看好中长期吸引力

单日回购近400万港元B类股份,一站式服务的AI科技领航者百融云创(百融云-W,6608.HK)的回购计划正在加速落实。 此前,在百融云创2023年年度业绩公告的同时,该公司一并披露将在2024年不时在公开市场购回总金额不超过2.5亿…

【C++】C/C++中新const用法:const成员

欢迎来到CILMY23的博客 本篇主题为: C/C中新const用法:const成员 个人主页:CILMY23-CSDN博客 系列专栏:Python | C | C语言 | 数据结构与算法 | 贪心算法 | Linux 感谢观看,支持的可以给个一键三连,点赞…

阿里巴巴杭州全球总部正式启用,创新“减碳大脑”科技减碳 | 最新快讯

来源:封面新闻 封面新闻记者付文超 5 月 10 日,记者获悉,位于未来科技城的阿里巴巴杭州全球总部新园区正式启用,这是阿里巴巴目前最大的综合性办公园区。从空中俯瞰,园区正中央呈现阿里标志性的笑脸 logo,这…

【大学物理】双语笔记

7.5 angular momentu(角动量)_哔哩哔哩_bilibili 6.4Energy in Rotation Motion 有质量有速度的物体有动能,是不是很有道理 international system(from French systeme international,acronym,SI)of ineria kg*m^2 转…

uniapp——弹出键盘遮挡住输入框 textarea,处理方法

案例 在写输入框的时候会遇见 键盘遮挡住部分textarea框的一部分&#xff0c;使用cursor-spacing处理即可 修改后&#xff1a; 其他问题&#xff1a; 调起键盘输入时&#xff0c;不希望上方的内容被顶上去 代码 <view class"commentBox" :style"botto…

上亿用户面临风险!小米、WPS等知名安卓应用竟藏有“文件覆盖”漏洞

Google Play商店中的几款热门安卓应用程序容易受到与路径遍历相关的漏洞攻击&#xff0c;该漏洞的代号为“Dirty Stream”攻击&#xff0c;恶意应用程序可能会利用此漏洞覆盖易受攻击的应用程序主目录中的任意文件。 微软威胁情报团队的Dimitrios Valsamaras在周三发布的一份报…

实现C++ Vector

手写C Vector&#xff0c;参考QVector 类声明 template<typename T >class IteratorVector;template<typename T >class IteratorVectorConst;template<typename T >class Vector final :public ContainerBase{public:explicit Vector()noexcept;explicit V…

如何使用Reqable脚本功能提高API开发效率

Reqable支持使用Python脚本对API开发和调试进行辅助&#xff0c;今天写一篇实战教程&#xff0c;由浅入深地演示下如何使用Reqable的脚本功能。 首先&#xff0c;电脑上需要安装Python软件包。一般情况下&#xff0c;系统都会预安装Python软件包&#xff0c;如果系统没有安装或…

大语言模型LLM应用篇

大模型席卷全球&#xff0c;彷佛得模型者得天下。对于IT行业来说&#xff0c;以后可能没有各种软件了&#xff0c;只有各种各样的智体&#xff08;Agent&#xff09;调用各种各样的API。在这种大势下&#xff0c;笔者也阅读了很多大模型相关的资料&#xff0c;和很多新手一样&a…

升级到 AGP7+,适配 assets 目录了吗

我们知道 assets 文件处理的任务是 merge[变体名称]ReleaseAssets&#xff0c;例如&#xff1a; mergeCommonReleaseAssetsmergeReleaseAssetsmergeDebugAssets 在 AGP 升级过程中&#xff0c;不同的 Android Gradle Plugin 版本打包过程中处理 assets 文件的临时目录可能存在…

[笔试训练](十七)

目录 049:小乐乐改数字 050:十字爆破 051:比那名局的桃子 049:小乐乐改数字 小乐乐改数字_牛客题霸_牛客网 (nowcoder.com) 题目&#xff1a; 题解&#xff1a; 把输入的数字当成字符串&#xff0c;按字符一个一个读&#xff0c;边读边按条件改成字符0或1。 #include &l…

2024 年 数维杯(A题)大学生数学建模挑战赛 | 多源机会信号建模| 数学建模完整代码+建模过程全解全析

2024数维杯数学建模A题B题C题思路模型代码&#xff08;开赛后第一时间更新&#xff09;及时留意关注哦 https://mbd.pub/o/bread/ZpWakpdq https://mbd.pub/o/bread/ZpWakpdq 2024数维杯数学建模A题B题C题思路模型代码&#xff08;开赛后第一时间更新&#xff09;及时留意关注…

每周一算法:无向图的最小环

题目链接 观光之旅 题目描述 给定一张无向图&#xff0c;求图中一个至少包含 3 3 3 个点的环&#xff0c;环上的节点不重复&#xff0c;并且环上的边的长度之和最小。 该问题称为无向图的最小环问题。 你需要输出最小环的方案&#xff0c;若最小环不唯一&#xff0c;输出…

SG3225EEN在PAM4光模块和400G,QSFP-DD光模块中的应用

爱普生晶振SG3225EEN&#xff0c;156.25MHz在PAM4光模块和QSFP-DD光模块中的应用。光模块市场已发展至400G光模块&#xff0c;那么PAM4光模块和400G QSFPDD光模块有哪些区别呢?SG3225EEN又是怎么应用在PAM4光模块和QSFP-DD光模块中的呢? 首先介绍的是PAM4光模块:PAM4是PAM(脉…