当前位置: 首页 > news >正文

StandardScaler简介

StandardScaler(标准化)转换器,可用于将数据转换为均值为0,标准差为1的标准正态分布。

StandardScaler 的作用

将每个特征的所有值进行标准化处理,使数据服从标准正态分布。

计算公式

X_scaled = (X - mean) / std

其中:

  • mean:该特征的均值
  • std:该特征的标准差

与 MinMaxScaler 的对比

特性StandardScalerMinMaxScaler
输出范围无固定范围(通常在 -3 到 3 之间)固定区间(如 [0,1])
分布形状保持原始分布形状,但中心化为0线性压缩到指定区间
对异常值敏感度较敏感(受均值和标准差影响)非常敏感(受最大值影响)
适用场景大多数机器学习算法需要固定边界时(如神经网络)

使用示例

基础使用

fromsklearn.preprocessingimportStandardScalerimportnumpyasnp# 创建标准化器scaler=StandardScaler()# 原始数据data=np.array([[1,100],[2,200],[3,300]])# 标准化scaled_data=scaler.fit_transform(data)print(scaled_data)# 输出:# [[-1.22474487 -1.22474487]# [ 0. 0. ]# [ 1.22474487 1.22474487]]print(scaled_data.mean(axis=0))# [0., 0.] 均值为0print(scaled_data.std(axis=0))# [1., 1.] 标准差为1

分步操作

# 1. 拟合:计算每列的均值和标准差scaler.fit(data)print(scaler.mean_)# [2., 200.] 每列均值print(scaler.scale_)# [0.81649658, 81.64965809] 每列标准差# 2. 转换:应用标准化scaled_data=scaler.transform(data)# 3. 逆转换:恢复原始数据original_data=scaler.inverse_transform(scaled_data)

重要属性

# 每列的均值print(scaler.mean_)# 每列的标准差print(scaler.scale_)# 每列的方差(标准差的平方)print(scaler.var_)# 训练样本数量print(scaler.n_samples_seen_)

实际应用场景

1. 大多数机器学习算法的标准预处理

fromsklearn.svmimportSVCfromsklearn.linear_modelimportLogisticRegressionfromsklearn.neighborsimportKNeighborsClassifier# StandardScaler 是这些算法的常用选择scaler=StandardScaler()X_scaled=scaler.fit_transform(X)# SVM 对尺度非常敏感svm=SVC()svm.fit(X_scaled,y)# 逻辑回归虽然可以通过正则化调整,但标准化后收敛更快lr=LogisticRegression()lr.fit(X_scaled,y)

2. PCA 降维前的必备步骤

fromsklearn.decompositionimportPCA# PCA 寻找最大方差方向,必须标准化scaler=StandardScaler()X_scaled=scaler.fit_transform(X)pca=PCA(n_components=2)X_pca=pca.fit_transform(X_scaled)

3. 使用管道简化流程

fromsklearn.pipelineimportmake_pipelinefromsklearn.svmimportSVC# 创建包含标准化和SVM的管道model=make_pipeline(StandardScaler(),SVC(kernel='rbf'))# 训练(自动标准化)model.fit(X_train,y_train)# 预测(自动标准化测试集)predictions=model.predict(X_test)

什么时候用 StandardScaler?

✅ 推荐使用的场景

  1. 大多数机器学习算法(SVM、逻辑回归、KNN、K-Means、PCA)
  2. 数据近似正态分布时效果最好
  3. 不知道用什么归一化方法时,默认选 StandardScaler
  4. 需要保持异常值信息时(MinMaxScaler 会压缩异常值)

❌ 不推荐使用的场景

  1. 数据有极端异常值

    # 如果有极端异常值,用 RobustScaler 更好fromsklearn.preprocessingimportRobustScaler scaler=RobustScaler()# 基于中位数和四分位数
  2. 需要输出在固定范围内(如图像像素值 0-255)

    # 此时用 MinMaxScalerscaler=MinMaxScaler(feature_range=(0,1))
  3. 稀疏数据(大量0值)

    # 稀疏数据标准化会破坏稀疏结构# 考虑使用 MaxAbsScaler 或不做处理

完整工作流示例

importpandasaspdfromsklearn.model_selectionimporttrain_test_splitfromsklearn.preprocessingimportStandardScalerfromsklearn.neighborsimportKNeighborsClassifierfromsklearn.metricsimportaccuracy_score# 1. 准备数据data=pd.DataFrame({'年龄':[25,30,35,40,45,50,55,60],'收入':[30000,40000,50000,60000,70000,80000,90000,100000],'购买':[0,0,1,1,1,1,0,0]# 标签})X=data[['年龄','收入']]y=data['购买']# 2. 划分训练集和测试集X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=42)# 3. 标准化(重要:只用训练集拟合)scaler=StandardScaler()X_train_scaled=scaler.fit_transform(X_train)X_test_scaled=scaler.transform(X_test)# 用训练集的参数# 4. 训练模型knn=KNeighborsClassifier(n_neighbors=3)knn.fit(X_train_scaled,y_train)# 5. 预测和评估y_pred=knn.predict(X_test_scaled)print(f"准确率:{accuracy_score(y_test,y_pred):.2f}")# 6. 查看标准化参数print(f"训练集均值:{scaler.mean_}")print(f"训练集标准差:{scaler.scale_}")

常见陷阱和注意事项

  1. 必须用训练集拟合,测试集只转换

    # ✅ 正确scaler.fit(X_train)X_train_scaled=scaler.transform(X_train)X_test_scaled=scaler.transform(X_test)# ❌ 错误:数据泄露X_train_scaled=scaler.fit_transform(X_train)X_test_scaled=scaler.fit_transform(X_test)
  2. 新数据超出范围是正常的

    # 标准化后,新数据可能不在 [-3, 3] 范围内# 这是正常的,因为标准正态分布理论上可以取任意值
  3. 标准化不是万能的

    # 决策树、随机森林等基于树的模型不需要标准化fromsklearn.ensembleimportRandomForestClassifier rf=RandomForestClassifier()# 可以直接用原始数据

总结

  • StandardScaler是机器学习中最常用的数据预处理方法
  • 将数据转换为均值为0,标准差为1的标准正态分布
  • 适合大多数算法(SVM、逻辑回归、KNN、PCA等)
  • 不确定用什么时,优先选 StandardScaler
  • 记得只用训练集拟合,转换所有数据
http://www.jsqmd.com/news/587127/

相关文章:

  • 桌面开发,在线银行业务管理系统,基于wpf,net,csharp,ef,sql server数据库。
  • 自己改了一周AI率还是超标,最后怎么解决的 - 我要发一区
  • CAM++在客服场景的应用:自动归类客户语音,提升服务效率
  • FREE!ship Plus终极指南:如何用免费开源软件设计专业船舶
  • 科研生产力!小龙虾(Claude Code)论文Skill全解,附国内直连API教程
  • 新手入门:跟快马学开发,从零构建你的第一个clawhub skill应用
  • Qwen3-14B WebUI交互截图集:支持中英混合输入、思维链提示、格式化输出
  • fre:ac全平台音频转换解决方案:从入门到精通的效率提升指南
  • Nomic-Embed-Text-V2-MoE快速上手:Ubuntu系统下一键部署与验证
  • 段落自己改 vs 全文工具降:论文AI率哪种降得更彻底 - 我要发一区
  • 如何用AKTools快速搭建财经数据API服务:跨语言数据获取终极指南
  • MinIO权限配置踩坑实录:从‘策略不生效’到‘安全加固’的完整排错指南
  • 前端设计稿智能审查:Phi-4-mini-reasoning助力UI/UX一致性推理
  • LeagueAkari:英雄联盟玩家的智能游戏管家,让你的排位胜率提升50%的终极秘籍
  • 网站 SEO 优化对转化率有什么影响_网站 SEO 优化要注意哪些关键点
  • LeetDown:让旧iPhone重获新生的开源降级工具
  • APIPark:一站式 AI 网关与 API 开发者门户深度解析
  • 像素语言·维度裂变器:5分钟上手,像玩游戏一样改写你的文字
  • 面向未来的移动端开发:技术栈深度解析与应届生成长指南
  • SOLOv2的‘动态’内核与‘矩阵’NMS:深入代码看它如何比SOLO快3倍
  • 终极ECAPA-TDNN实战指南:快速构建0.86错误率语音识别系统
  • Python全栈开发实战指南:7大技术领域×100个实践案例
  • Qwen3.5-4B-Claude模型Java面试题深度解析与高频考点归纳
  • 效率倍增:用快马AI自动生成openclaw101风格前端组件库
  • SQL注入专项笔记
  • 告别MoveIt!用Pinocchio、OMPL和Ruckig手搓一个轻量级机械臂规划模块(附完整C++代码)
  • Audacity 4:免费开源音频编辑的终极解决方案,让专业音频处理触手可及
  • cpp学习——类的封装
  • 鸣潮帧率解锁:用WaveTools轻松突破60FPS限制的终极指南
  • 实战演练:基于快马平台开发集成中科院分区的学术成果看板