您的位置:首页 > 健康 > 养生 > 上海各区的网站有哪些公司_制作网站用什么软件好_新媒体销售好做吗_2345网址导航浏览器

上海各区的网站有哪些公司_制作网站用什么软件好_新媒体销售好做吗_2345网址导航浏览器

2025/4/2 15:06:07 来源:https://blog.csdn.net/sujiangming/article/details/145532740  浏览:    关键词:上海各区的网站有哪些公司_制作网站用什么软件好_新媒体销售好做吗_2345网址导航浏览器
上海各区的网站有哪些公司_制作网站用什么软件好_新媒体销售好做吗_2345网址导航浏览器

scikit-learn的Scaler数据归一化

  • 一、摘要
  • 二、训练数据集和测试数据集的归一化处理原则
  • 三、scikit-learn中的Scalar类及示例
  • 四、自定义StandardScaler类进行数据归一化处理
  • 五、小结

一、摘要

本文主要介绍了scikit-learn中Scaler的使用方法,特别强调了数据归一化在机器学习过程中的重要性。讲述了归一化算法在训练模型前对训练数据集的处理,以及预测时对测试数据集的正确归一化方式。强调了保存训练数据集得到的均值和方差的重要性,并介绍了scalar类在数据处理中的封装理念和过程。最后通过实际代码示例,演示了如何使用standard scalar对数据进行归一化处理,并进行了knn分类实验,展示了归一化处理对提高模型预测准确度的重要性。
在这里插入图片描述

二、训练数据集和测试数据集的归一化处理原则

  1. 训练数据集用于训练模型,测试数据集用于评估模型性能。
  2. 归一化处理包括均值和方差的计算,用于将数据转换为标准正态分布。
  3. 测试数据集应使用训练数据集得到的均值和方差进行归一化处理
  4. 不应直接对测试数据集计算均值和方差,应使用训练数据集的均值和方差

三、scikit-learn中的Scalar类及示例

在这里插入图片描述

  1. Scalar类封装了数据的归一化处理,使流程与机器学习算法一致。
  2. fit方法用于计算训练数据集的均值和方差,保存关键信息。
  3. transform方法用于对输入样例进行归一化处理,输出结果。
  4. 使用scalar类可以方便地对后续样本进行归一化,并送入机器学习算法中进行预测处理。
  5. StandardScaler的使用示例,具体实现步骤如下:
    • 1.加载鸢尾花数据集,分为训练数据集和测试数据集。

      import numpy as np 
      from sklearn import datasets# 引入鸢尾花数据集
      iris = datasets.load_iris()# 特征矩阵和标签向量
      X = iris.data
      y = iris.target# 将特征矩阵划分成训练集和测试集及其对应的特征向量
      from sklearn.model_selection import train_test_split
      X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=666)
      
    • 2.使用StandardScaler对训练数据集进行归一化处理。

      # 使用StandardScaler对训练数据集进行归一化处理.
      from sklearn.preprocessing import StandardScaler
      # 初始化对象
      standardScaler = StandardScaler()
      # 训练数据集进行归一化
      standardScaler.fit(X_train)
      X_train_standard = standardScaler.transform(X_train)
      X_train_standard
      

      执行效果:
      在这里插入图片描述

    • 3.使用相同的StandardScaler对测试数据集进行归一化处理。

      # 使用StandardScaler对测试数据集进行归一化处理.
      standardScaler.fit(X_test)
      X_test_standard = standardScaler.transform(X_test)
      X_test_standard
      

      执行效果:
      在这里插入图片描述

    • 4.使用归一化后的数据训练k-近邻分类器,并评估分类准确度。

      # 使用归一化后的数据训练k-近邻分类器,并评估分类准确度。
      from sklearn.neighbors import KNeighborsClassifier# 初始化分类器
      knn_clf = KNeighborsClassifier(n_neighbors=3,n_jobs=-1)# 调用fit函数
      knn_clf.fit(X_train_standard,y_train)# 调用score函数
      knn_clf.score(X_test_standard,y_test)
      

      执行效果:
      在这里插入图片描述

    • 5.对比未归一化处理的测试数据集会导致分类准确度降低

      # 传入未归一化的测试集
      knn_clf.score(X_test,y_test)
      

      执行效果:
      在这里插入图片描述
      传入未归一化的测试集后,kNN分类器的准确度就下降了很多。

四、自定义StandardScaler类进行数据归一化处理

  1. 创建自定义StandardScaler类,包含fit和transform方法。
  2. fit方法计算训练数据集的均值和方差,保存为类的属性。
  3. transform方法使用训练数据集的均值和方差对输入数据进行归一化处理。
  4. 自定义StandardScaler的使用方式与sklearn中的StandardScaler一致。
  5. 自定义完整代码如下:
    import numpy as npclass MyStandardScaler:def __init__(self):self.mean_ = None  # 均值self.scale_ = None  # 方差def fit(self, X):"""根据训练集X(二维的)获得数据的均值和方差"""assert X.ndim == 2, \"The dimenstion of X must be 2."self.mean_ = np.array([(np.mean(X[:, col])) for col in range(X.shape[1])])self.scale_ = np.array([(np.std(X[:, col])) for col in range(X.shape[1])])return selfdef transform(self, X):"""将X进行均值方差归一化处理"""assert X.ndim == 2, \"The dimenstion of X must be 2."assert self.mean_ is not None and self.scale_ is not None, \"must fit before transform."assert X.shape[1] == len(self.mean_), \"The number of X`s features must be equal to the number of self.mean_. "# 定义一个与X大小一致的空的矩阵retX = np.empty(shape=X.shape, dtype=float)# 均值方差归一化算法for col in range(X.shape[1]):retX[:, col] = (X[:, col] - self.mean_[col]) / self.scale_[col]return retX
    
  6. 在jupyter中执行效果如下:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

五、小结

本文围绕 scikit - learn 中 Scaler 的使用方法展开介绍,着重强调了数据归一化在机器学习中的重要性。文中阐述了归一化算法在训练模型前对训练数据集的处理操作,以及预测时对测试数据集的正确归一化方式。特别指出保存训练数据集所得均值和方差的重要意义,还介绍了 scalar 类在数据处理中的封装理念与过程。最后借助实际代码示例,演示了运用 standard scalar 对数据进行归一化处理的过程,并开展了 knn 分类实验,以此展示归一化处理对提升模型预测准确度的重要作用。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com