news 2026/4/17 21:29:43

数据预处理与特征工程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
数据预处理与特征工程

目录

数据预处理的目的

常见数据预处理方法

实际应用注意事项

数据抽样的定义

常见的抽样方法

抽样误差与控制

样本量计算

实施步骤

工具与代码示例

注意事项

数据标准化的定义

Z-score标准化

Min-Max标准化

归一化的定义

L2归一化

小数缩放

标准化与归一化的选择

实现示例(Python)

数据质量与清洗

特征工程方法

特征选择技术

自动化工具应用

数据操作

小狐狸(MetaMask)操作

数据抽样的主要类型及原理

简单随机抽样

分层抽样

整群抽样

系统抽样

多阶段抽样

方便抽样

配额抽样

雪球抽样

数据标准化的原理及优势

数据归一化的原理及优势

标准化与归一化的选择依据

数据质量问题及处理方法

数据清洗技术示例

数据清洗与预处理

特征构建

特征选择

特征变换

验证与迭代

工具与代码示例


一、数据预处理

数据预处理的目的

数据预处理是机器学习和数据分析的关键步骤,旨在将原始数据转化为适合模型训练的格式。通过处理缺失值、异常值、噪声等问题,提升数据质量,从而提高模型的准确性和泛化能力。

常见数据预处理方法

缺失值处理

  • 删除法:直接删除含有缺失值的样本或特征,适用于缺失比例较低的情况。
  • 填充法:用均值、中位数、众数或预测模型(如KNN)填充缺失值。
  • 插值法:使用时间序列插值或多项式插值补充缺失数据。

异常值检测与处理

  • 统计方法:基于Z-score或IQR(四分位距)识别异常值,通过阈值过滤。
  • 可视化方法:借助箱线图或散点图直观发现异常点。
  • 处理方法:替换为合理值、分箱处理或直接删除。

数据标准化与归一化

  • 标准化(Z-score):将数据转换为均值为0、标准差为1的分布,公式为:
    $$ x' = \frac{x - \mu}{\sigma} $$
  • 归一化(Min-Max):将数据缩放到[0,1]区间,公式为:
    $$ x' = \frac{x - \text{min}}{\text{max} - \text{min}} $$

类别数据编码

  • 独热编码(One-Hot):为每个类别创建二进制列,适用于无序特征。
  • 标签编码(Label Encoding):将类别映射为整数,适用于有序特征。

特征选择与降维

  • 过滤法:基于方差、卡方检验或互信息选择重要特征。
  • 嵌入法:通过模型(如Lasso回归)自动选择特征。
  • 降维技术:使用PCA或t-SNE减少特征维度,保留主要信息。

实际应用注意事项

  • 数据分布一致性:确保训练集与测试集的预处理方式相同,避免数据泄露。
  • 自动化流水线:通过Scikit-learn的Pipeline整合预处理步骤,提升效率。
  • 业务逻辑结合:根据领域知识调整处理方法(如金融数据中对异常值的特殊处理)。

二、数据抽样

数据抽样的定义

数据抽样是从总体中选取一部分个体作为样本的过程,旨在通过样本推断总体特征。抽样可降低数据收集成本、提高效率,同时保证统计分析的可靠性。

常见的抽样方法

概率抽样

  • 简单随机抽样:每个个体有相同的被抽中概率,适用于均匀分布的总体。
  • 分层抽样:将总体划分为若干层(如年龄、性别),每层内随机抽样,确保各子群代表性。
  • 系统抽样:按固定间隔(如每隔第10个个体)抽取样本,需注意周期性偏差。
  • 整群抽样:将总体分为若干群组,随机抽取整个群组作为样本,适用于地理分散的群体。

非概率抽样

  • 方便抽样:选择最容易获取的个体(如街头调查),成本低但代表性差。
  • 配额抽样:按预设比例抽取特定特征的样本(如男女比例1:1),缺乏随机性。
  • 雪球抽样:通过已有样本推荐新样本,适用于隐蔽群体(如罕见病患者)。

抽样误差与控制

抽样误差是样本统计量与总体参数之间的差异,可通过以下方式降低:

  • 增加样本量,但需权衡成本与精度。
  • 采用分层或整群抽样优化样本结构。
  • 确保抽样框(总体清单)完整,避免遗漏或重复。

样本量计算

样本量取决于置信水平、允许误差和总体方差。常用公式为:
$$ n = \frac{Z^2 \cdot p(1-p)}{e^2} $$
其中:

  • ( Z ) 为置信水平对应的Z值(如95%置信水平时 ( Z=1.96 ));
  • ( p ) 为总体比例估计值(未知时取0.5);
  • ( e ) 为允许误差(如±5%)。

实施步骤

  1. 明确研究目标:确定需推断的总体参数(如均值、比例)。
  2. 选择抽样方法:根据总体特征和研究资源决定概率或非概率抽样。
  3. 计算样本量:结合统计公式或在线工具(如G*Power)确定最小样本。
  4. 执行抽样:使用随机数表或软件(如Python的random.sample)抽取样本。
  5. 验证样本质量:检查样本是否覆盖关键子群,避免偏差。

工具与代码示例

Python中实现简单随机抽样:

import random population = list(range(1, 1001)) # 假设总体为1-1000 sample_size = 100 sample = random.sample(population, sample_size)

R语言中分层抽样示例:

library(dplyr) data <- data.frame( group = rep(c("A", "B"), each = 500), value = rnorm(1000) ) sample <- data %>% group_by(group) %>% sample_n(50)

注意事项

  • 偏差避免:确保抽样过程无系统偏好(如仅选择工作日数据)。
  • 数据清洁:剔除无效样本(如重复或缺失值)。
  • 结果泛化性:非概率抽样结果仅适用于特定样本,谨慎推广到总体。

例题一:

实现简单随机抽样并计算样本均值的Python代码

import numpy as np # 生成包含1000个元素的一维数组 population = np.random.rand(1000) # 使用numpy的random.choice进行简单随机抽样 sample = np.random.choice(population, size=100, replace=False) # 计算样本均值 sample_mean = np.mean(sample) print("样本均值:", sample_mean)

代码说明

numpy.random.rand(1000)生成一个包含1000个均匀分布在[0,1)区间的随机数的数组作为总体数据

np.random.choice函数实现简单随机抽样:

  • 第一个参数population指定抽样总体
  • size=100指定抽取100个样本
  • replace=False确保无放回抽样

np.mean计算样本数组的算术平均值

其他实现方式

import random # 使用Python内置random模块实现 population = [random.random() for _ in range(1000)] sample = random.sample(population, 100) sample_mean = sum(sample) / len(sample)

注意事项

确保总体数据量足够大,避免抽样偏差

对于大规模数据,numpy实现通常比纯Python实现更高效

可根据实际需求修改随机数生成方式,如使用正态分布np.random.normal

示例二:使用Pandas库,对一个"新订单表" 进行系统抽样,每隔行抽取50一行,并输出抽出的样本。同时保存抽样结果到新文件,命名为“抽样结果.xlsx”。

系统抽样方法

使用Pandas的iloc方法结合切片操作实现系统抽样。通过指定步长参数,可以每隔固定行数抽取样本。

import pandas as pd # 读取原始数据文件 df = pd.read_excel('新订单表.xlsx') # 设置抽样间隔为50行 sample_interval = 50 # 使用iloc进行系统抽样 sampled_data = df.iloc[::sample_interval] # 显示抽样结果 print(sampled_data)

保存抽样结果

将抽样结果保存为Excel文件,使用Pandas的to_excel方法实现。

# 保存抽样结果到新文件 sampled_data.to_excel('抽样结果.xlsx', index=False) # 确认保存成功 print("抽样结果已保存至'抽样结果.xlsx'")

注意事项

确保原始数据文件名为"新订单表.xlsx"且与脚本在同一目录下。若数据量不足50行,抽样结果可能为空或仅包含首行。对于大型数据集,可考虑添加进度提示或分块处理优化性能。

例题三:

附件给定一个包含1000个学生的信息数据集,其中包含性别字段。请编写代码实现分层抽样,从男女两个类别中分别抽取20%的样本,并合并为一个完整的样本集输出。

分层抽样实现步骤

分层抽样可以确保每个性别类别的样本比例与总体一致。以下是使用Python和pandas库实现的代码示例。

导入必要库
import pandas as pd
读取数据并检查性别分布

假设数据存储在students.csv文件中,包含gender字段。

data = pd.read_csv('students.csv') gender_counts = data['gender'].value_counts() print(gender_counts)
定义分层抽样函数

从每个性别类别中抽取20%的样本。

def stratified_sample(data, strata_column, sample_frac=0.2): samples = [] for stratum in data[strata_column].unique(): stratum_data = data[data[strata_column] == stratum] sample = stratum_data.sample(frac=sample_frac, random_state=42) samples.append(sample) return pd.concat(samples)
执行抽样并输出结果
sampled_data = stratified_sample(data, 'gender', 0.2) print(sampled_data.head()) sampled_data.to_csv('stratified_sample.csv', index=False)

代码说明

  • value_counts()用于检查原始数据的性别分布。
  • sample(frac=0.2)从每个性别类别中随机抽取20%的样本。
  • random_state=42确保结果可复现。
  • 最终结果合并后保存为新的CSV文件。

注意事项

  • 确保数据集中gender字段没有缺失值。
  • 调整sample_frac参数可改变抽样比例。
  • 使用random_state保证每次运行结果一致。

三、数据标准及归一化

数据标准化的定义

数据标准化是将不同尺度或单位的数据转换为统一标准的过程,旨在消除量纲影响,便于不同特征间的比较和建模。常见方法包括Z-score标准化Min-Max标准化

Z-score标准化

通过计算数据的均值和标准差,将原始数据转换为均值为0、标准差1的分布。公式如下:
[ x_{\text{标准化}} = \frac{x - \mu}{\sigma} ]

  • (\mu):特征的均值
  • (\sigma):特征的标准差
    适用于数据分布近似正态或存在异常值的情况。

Min-Max标准化

将数据线性缩放到固定范围(如[0, 1])。公式如下:
[ x_{\text{标准化}} = \frac{x - \min(X)}{\max(X) - \min(X)} ]

  • (\min(X))、(\max(X)):特征的最小值和最大值
    适用于数据边界明确且无极端异常值的场景。

归一化的定义

归一化是标准化的一种特殊形式,通常指将数据缩放到单位范数(如L2范数为1)或特定范围(如[0, 1])。常见方法包括L2归一化小数缩放

L2归一化

将每个样本的特征向量除以其L2范数,使向量长度为1。公式如下:
[ x_{\text{归一化}} = \frac{x}{|x|_2} ]
适用于需要计算向量间相似度的场景(如文本分类、聚类)。

小数缩放

通过移动小数点直接调整数据范围,例如将数据除以固定值(如1000)。适用于简单缩放需求。

标准化与归一化的选择

  • 标准化:优先用于基于距离的算法(如SVM、KNN)或数据分布不稳定时。
  • 归一化:优先用于需要单位范数的场景(如神经网络)或数据范围已知且均匀。

实现示例(Python)

from sklearn.preprocessing import StandardScaler, MinMaxScaler, Normalizer # Z-score标准化 scaler = StandardScaler() X_scaled = scaler.fit_transform(X) # Min-Max标准化 minmax_scaler = MinMaxScaler() X_minmax = minmax_scaler.fit_transform(X) # L2归一化 normalizer = Normalizer(norm='l2') X_normalized = normalizer.fit_transform(X)

四、数据质量与清洗、特征工程

数据质量与清洗

数据质量直接影响机器学习模型的性能。高质量数据应具备准确性、完整性、一致性、时效性和唯一性。数据清洗是提升数据质量的关键步骤。

常见数据问题包括缺失值、异常值、重复值、不一致格式等。处理缺失值可采用删除、均值/中位数填充、模型预测填充等方法。异常值检测可使用箱线图、Z-score或聚类算法识别。重复值需根据业务场景判断是否去重。

文本数据需处理拼写错误、停用词、标准化格式。时间数据需统一时区和格式。分类数据需检查类别一致性,处理拼写变体。数值数据需验证范围合理性,处理单位不统一问题。

特征工程方法

特征工程是将原始数据转化为更好表达问题特征的过程。数值特征可进行标准化(Z-score)或归一化(Min-Max)。分箱处理可将连续变量离散化,增强模型鲁棒性。

分类变量编码包括独热编码(One-Hot)、标签编码(Label Encoding)和目标编码(Target Encoding)。高基数类别可采用哈希编码或聚类降维。文本特征可通过词袋模型(Bag-of-Words)、TF-IDF或嵌入向量处理。

特征构造可结合领域知识创造新特征。日期时间可分解为年、月、星期等周期特征。地理位置可计算距离特征或聚类。交互特征可通过数值特征相乘或分类特征组合生成。

特征选择技术

特征选择能降低维度、减少过拟合。过滤法(Filter)通过统计指标选择特征,如卡方检验、互信息、方差阈值。包装法(Wrapper)使用模型性能评估特征子集,如递归特征消除(RFE)。

嵌入法(Embedded)在模型训练时完成选择,如L1正则化(LASSO)、决策树特征重要性。降维技术如PCA、t-SNE可压缩特征空间。特征重要性分析可通过SHAP值、排列重要性等方法解释。

自动化工具应用

Python库如Pandas、NumPy提供基础数据处理功能。Scikit-learn提供标准化、编码、特征选择等工具。Featuretools支持自动化特征生成。PyOD专注于异常值检测。Dabl提供快速数据探索和清洗。

自动化机器学习平台如TPOT、AutoML可优化特征工程流程。开源框架如Feast管理特征存储。可视化工具如Sweetviz、Pandas-profiling辅助数据质量评估。

小结

1.简述数据与小狐狸可以包括哪些操作

数据操作

数据操作涉及数据的存储、处理和分析。常见操作包括数据清洗(去除重复值、处理缺失值)、数据转换(格式标准化、归一化)、数据聚合(分组统计、汇总)以及数据可视化(图表展示、趋势分析)。

数据库操作涵盖增删改查(CRUD),例如插入新记录、更新现有数据、删除冗余数据以及查询特定信息。SQL语句是实现这些操作的主要工具。

大数据处理通常使用分布式计算框架(如Hadoop、Spark),支持批处理和流处理。数据挖掘和机器学习算法可用于预测分析和模式识别。

小狐狸(MetaMask)操作

小狐狸(MetaMask)是以太坊生态中的钱包工具,支持多种区块链操作。

创建和管理钱包:生成助记词、设置密码、导入/导出私钥或助记词。支持多账户切换和自定义网络配置(如RPC节点)。

交易功能:发送和接收ETH及ERC-20代币,调整Gas费用,查看交易历史记录。支持通过QR码或钱包地址进行转账。

DApp交互:连接去中心化应用(如Uniswap、OpenSea),授权智能合约调用。可查看和撤销已授权的合约权限。

安全设置:启用隐私模式、自动锁定时间,以及 phishing 检测功能。支持硬件钱包(如Ledger、Trezor)集成以增强安全性。

网络切换:支持以太坊主网、测试网(如Ropsten、Goerli)以及自定义EVM兼容链(如BNB Chain、Polygon)。

2.数据抽样可包括哪些类型的抽样方式,每一种抽样方式的原理是什么

数据抽样的主要类型及原理

简单随机抽样

每个个体从总体中被抽中的概率相同且相互独立。通常通过随机数生成器或抽签实现。适用于总体分布均匀且规模较小的情况。

分层抽样

将总体划分为若干互不重叠的层(strata),每层内部同质性高,层间异质性高。然后在每层内独立进行随机抽样。能提高估计精度,尤其适用于总体存在明显分层结构时。

整群抽样

将总体划分为若干群组(clusters),随机抽取完整群组作为样本。群内异质性高,群间同质性高。适用于群组自然存在且调查成本高的场景,但精度通常低于简单随机抽样。

系统抽样

按固定间隔(k=N/n)从有序总体中抽取样本。首个样本点随机选择,后续按间隔k选取。要求总体无周期性模式,否则可能导致偏差。

多阶段抽样

结合多种抽样方法,常见于大规模调查。例如先整群抽样选取区域,再分层抽样选取子群体。灵活性强但设计复杂度高。

方便抽样

依据可及性或便利性选取样本(如街头拦截)。成本低但代表性差,常用于探索性研究。

配额抽样

按预设比例从不同子群体中非随机选取样本。试图模仿总体结构,但可能引入选择偏差。

雪球抽样

通过现有样本推荐新样本,适用于难以触达的群体(如特殊疾病患者)。依赖初始样本质量,可能存在网络偏差。

每种方法的选择需权衡研究目的、成本、精度要求及总体特征。随机抽样类方法通常统计性质更优,而非随机方法更侧重实操便利性。

3.回顾数据标准化及归一化的原理,简述数据标准化及归一化的优势

数据标准化的原理及优势

原理:数据标准化(Z-score标准化)通过将数据转换为均值为0、标准差为1的分布。公式为:
$$
z = \frac{x - \mu}{\sigma}
$$
其中,$\mu$为均值,$\sigma$为标准差。

优势

  • 消除量纲影响,使不同量级的特征具有可比性。
  • 适用于数据分布未知或存在异常值的情况。
  • 提升基于距离的算法(如KNN、聚类)的准确性。

数据归一化的原理及优势

原理:归一化(Min-Max缩放)将数据线性变换到特定范围(如[0, 1])。公式为:
$$
x' = \frac{x - \min(X)}{\max(X) - \min(X)}
$$

优势

  • 加速梯度下降等优化算法的收敛速度。
  • 适用于神经网络、SVM等对输入范围敏感的模型。
  • 保留原始数据的相对关系,适合图像或音频等数值范围固定的数据。

标准化与归一化的选择依据

  • 标准化:优先用于数据分布近似正态或存在异常值。
  • 归一化:适用于数据边界明确且需要快速收敛的场景。
  • 树模型(如随机森林)通常无需标准化/归一化。

4.思考一般的业务数据可能存在什么样的数据质量问题,针对不同的数据质量问题,可采用什么样的数据处理手段对数据进行数据清洗

数据质量问题及处理方法

缺失值问题
数据中可能存在空值或未记录的字段。对于数值型数据,可采用均值、中位数或众数填充;对于分类数据,可使用高频类别或单独标记为“缺失”类别。若缺失比例过高,考虑直接删除该字段或记录。

重复数据问题
同一记录多次出现会导致分析偏差。通过主键或关键字段比对识别重复项,保留最新或最完整的记录,其余删除。需结合业务逻辑判断是否为真实重复(如订单重复支付)。

异常值问题
超出合理范围的值可能由录入错误或系统故障引起。使用统计方法(如3σ原则)或业务规则定义阈值,通过箱线图、散点图等可视化工具辅助识别。处理方式包括修正为边界值、置空或标注为异常。

格式不一致问题
同一字段存在多种格式(如日期“2023-01-01”和“01/01/2023”)。制定统一标准,通过正则表达式或字符串函数转换。例如将电话号码统一为“区号-号码”格式。

数据不一致问题
关联数据矛盾(如订单金额与商品单价不符)。通过逻辑规则或外部数据源验证,修正错误字段。例如检查“年龄=18”但“婚姻状态=已婚”的记录。

噪声数据问题
数据中包含无关信息或随机波动。采用平滑技术(如移动平均)或分箱处理,对时间序列数据可应用滤波算法。文本数据需去除特殊字符或停用词。

数据清洗技术示例

结构化数据清洗代码片段

# 处理缺失值 df['age'].fillna(df['age'].median(), inplace=True) # 删除重复记录 df.drop_duplicates(subset=['user_id'], keep='last', inplace=True) # 修正异常值 df.loc[df['price'] > 1000, 'price'] = df['price'].quantile(0.99)

非结构化数据处理示例
文本清洗可使用正则表达式移除HTML标签:

import re clean_text = re.sub(r'<[^>]+>', '', raw_text)

自动化工具建议

  • OpenRefine:适用于可视化交互式清洗
  • Pandas:Python环境下高效处理结构化数据
  • Trifacta:支持大规模数据集的智能清洗

每种问题需结合具体业务场景选择处理方法,清洗后应通过数据质量报告验证改进效果。

5.思考特征工程所包含的内容与步骤

数据清洗与预处理

处理缺失值:删除缺失样本、填充均值/中位数/众数、使用模型预测缺失值。
处理异常值:通过箱线图、Z-score或IQR方法识别并修正或删除异常数据。
数据类型转换:将分类变量编码为数值(如独热编码、标签编码),标准化或归一化数值特征。

特征构建

创建新特征:通过现有特征组合(如加减乘除)、分解时间戳(年/月/日)、提取文本长度或统计量。
分箱处理:将连续变量离散化为区间(如等宽分箱、等频分箱),增强模型鲁棒性。

特征选择

过滤法:基于统计指标(如方差、卡方检验、互信息)筛选与目标相关性高的特征。
包裹法:使用递归特征消除(RFE)或基于模型的特征重要性排序(如随机森林、XGBoost)。
嵌入法:通过L1正则化(LASSO)或树模型内置的特征重要性进行选择。

特征变换

降维技术:主成分分析(PCA)、线性判别分析(LDA)或t-SNE减少特征维度。
非线性变换:对数变换、Box-Cox变换处理偏态分布,提升特征线性可分性。

验证与迭代

评估特征效果:通过交叉验证或模型性能指标(如AUC、RMSE)验证特征工程的有效性。
反馈优化:根据模型表现调整特征处理方法,删除冗余特征或重构新特征。

工具与代码示例

# 示例:标准化与PCA降维 from sklearn.preprocessing import StandardScaler from sklearn.decomposition import PCA scaler = StandardScaler() X_scaled = scaler.fit_transform(X) pca = PCA(n_components=0.95) # 保留95%方差 X_pca = pca.fit_transform(X_scaled)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 0:49:49

wpf 怎么设置Border是屏幕宽度的50%

wpf 怎么设置Border是屏幕宽度的50% <Grid><Grid.ColumnDefinitions><ColumnDefinition Width"1*"/><ColumnDefinition Width"1*"/></Grid.ColumnDefinitions><!--推荐套餐--><Border Grid.Column"0"…

作者头像 李华
网站建设 2026/4/18 0:48:29

还在用无真实参考文献的AI写论文?8款AIGC率低至5%工具推荐!

还在为论文熬夜到凌晨&#xff0c;却发现AI生成的内容漏洞百出&#xff1f; 还在手动拼凑参考文献&#xff0c;却被导师一句“来源不实”打回原形&#xff1f; 还在为动辄30%、40%的AI检测率而提心吊胆&#xff0c;感觉努力全白费&#xff1f; 如果你对以上任何一个问题疯狂点头…

作者头像 李华
网站建设 2026/4/18 0:53:49

LobeChat能否实现AI炼金术士?古代化学知识与现代科学对照

LobeChat能否实现AI炼金术士&#xff1f;古代化学知识与现代科学对照 在人类探索自然的漫长历史中&#xff0c;炼金术曾是一种既神秘又充满哲思的实践。它不只是试图“点石成金”的荒诞幻想&#xff0c;更承载着古人对物质本质、宇宙秩序和生命转化的深刻追问。如今&#xff0c…

作者头像 李华
网站建设 2026/4/18 0:16:13

大模型Token按需购买:YOLO用户的福音

大模型Token按需购买&#xff1a;YOLO用户的福音 在智能制造车间的质检线上&#xff0c;一台AOI设备每秒拍摄数十张PCB板图像&#xff0c;传统部署模式下必须全天候运行昂贵的GPU服务器——即使夜间停工也照常计费。而在另一端&#xff0c;一家初创安防公司想用目标检测做智能监…

作者头像 李华
网站建设 2026/4/17 17:25:15

大模型Token机制在YOLO训练中的潜在价值

大模型Token机制在YOLO训练中的潜在价值 在工业质检线上&#xff0c;一台视觉检测设备正高速运行——摄像头每秒捕捉数十帧图像&#xff0c;系统需要实时判断产品是否存在划痕、缺件或装配错误。传统YOLO模型能快速框出异常区域&#xff0c;但面对“轻微磨损是否算缺陷”这类模…

作者头像 李华
网站建设 2026/4/18 0:49:34

基于单片机的非接触式防疫自动门系统设计【附代码】

&#x1f4c8; 算法与建模 | 专注PLC、单片机毕业设计 ✨ 擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导&#xff0c;毕业论文、期刊论文经验交流。✅ 专业定制毕业设计✅ 具体问题可以私信或查看文章底部二维码本系统旨在设计一个基于非接触式感应触发、…

作者头像 李华