【笔记】scikit-learn中的Scaler(归一化)
scikit-learn中的数据归一化
在机器学习使用数据归一化的时候有一个重要的注意事项
我们对训练数据进行均值和方差的处理,得到mean_train以及std_train,但是在对测试数据进行归一化的时候,是不能直接用测试数据的均值和方差来进行归一化的,应该使用训练数据的均值和方差对测试数据进行均值方差归一化

为什么要这样做呢,我们训练这个模型是为了在真实的环境中去使用的,测试数据是模拟真实的环境,但是真实环境很有可能是没法得到所有的测试数据的均值和方差的,是很难得到这种统计数据的,另外,对数据的归一化也是算法的一部分,我们针对后面来的数据,应该也对其进行这样的处理
那么我们就必须要保存训练数据集得到的均值和方差
整体流程

实际操作(以鸢尾花为例)
x前十行的内容(并未进行归一化处理)

scikit-learn中的standardscaler
想调用,只需要
from sklearn.preprocessing import StandardScaler
创建一个实例
standardScaler = StandardScaler()
进行fit操作,其包含了很多的信息
standardScaler.fit(X_train)
数组的均值(对应的四个特征的均值)
对于mean_的_,对于是由用户传进去的变量计算得到的,用户可以随时在外围进行查询的,在后面要有_才行

方差
standardScaler.std_
这个我的版本已经弃用了,使用的话会报错
标准差
standardScaler.scale_

现在可以正式使用transform进行数据归一化处理

注意:这样处理以后,X_train实际上没有进行变化

使用
X_train = standardScaler.transform(X_train)
就可以使X_train保存下归一化以后的矩阵了
在对训练矩阵进行归一化
X_test_standard = standardScaler.transform(X_test)
使用knn算法进行预测分析准确率

值得注意的是,当我们用归一化以后的训练集来训练机器算法之后,我们在预测的时候,测试数据集必须同样进行归一化,不然的话准确率会相当的低

在pc中手动写出可以实现的归一化
import numpy as np
class StandardScaler:
def __init__(self):
self.mean_ = None
self.scale_ = None;
def fit(self, X):
assert X.ndim == 2, "The dimension of X must be 2"
self.mean_ = np.array([np.mean(X[:, i]) for i in range(X.shape[1])])
self.scale_ = np.array([np.std(X[:, i]) for i in range(X.shape[1])])
return self
def tranform(self, X):
assert X.ndim == 2, "The dimension 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 feature number of X must be equal to mean_ and std_"
resX = np.empty(shape=X.shape, dtype=float)
for col in range(X.shape[1]):
resX[:, col] = (X[:, col] - self.mean_[col]) / self.scale_[col]
return resX

【笔记】scikit-learn中的Scaler(归一化)的更多相关文章
- (原创)(四)机器学习笔记之Scikit Learn的Logistic回归初探
目录 5.3 使用LogisticRegressionCV进行正则化的 Logistic Regression 参数调优 一.Scikit Learn中有关logistics回归函数的介绍 1. 交叉 ...
- (原创)(三)机器学习笔记之Scikit Learn的线性回归模型初探
一.Scikit Learn中使用estimator三部曲 1. 构造estimator 2. 训练模型:fit 3. 利用模型进行预测:predict 二.模型评价 模型训练好后,度量模型拟合效果的 ...
- Scikit Learn: 在python中机器学习
转自:http://my.oschina.net/u/175377/blog/84420#OSC_h2_23 Scikit Learn: 在python中机器学习 Warning 警告:有些没能理解的 ...
- scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类 (python代码)
scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类数据集 fetch_20newsgroups #-*- coding: UTF-8 -*- import ...
- 从头开始学JavaScript 笔记(一)——基础中的基础
原文:从头开始学JavaScript 笔记(一)--基础中的基础 概要:javascript的组成. 各个组成部分的作用 . 一.javascript的组成 javascript ECMASc ...
- 第十八节,TensorFlow中使用批量归一化(BN)
在深度学习章节里,已经介绍了批量归一化的概念,详情请点击这里:第九节,改善深层神经网络:超参数调试.正则化以优化(下) 神经网络在进行训练时,主要是用来学习数据的分布规律,如果数据的训练部分和测试部分 ...
- Scikit Learn
Scikit Learn Scikit-Learn简称sklearn,基于 Python 语言的,简单高效的数据挖掘和数据分析工具,建立在 NumPy,SciPy 和 matplotlib 上.
- 并发编程学习笔记(4)----jdk5中提供的原子类及Lock使用及原理
(1)jdk中原子类的使用: jdk5中提供了很多原子类,它会使变量的操作变成原子性的. 原子性:原子性指的是一个操作是不可中断的,即使是在多个线程一起操作的情况下,一个操作一旦开始,就不会被其他线程 ...
- [学习笔记] 在Eclipse中导入项目
参考前文:[学习笔记] 在Eclips 中导出项目 选择已经导出的文件: 导入之后,项目结构如下: 至此,完成.
随机推荐
- Java:Java的<<<移位运算符详解
1) 左移运算(<<) 左移就是把所有位向左移动几位 如: 12 << 2 意思就是12向左移动两位 12的二进制是: 0000 1100 通过这个图我们 ...
- jenkins send files or publish
1.创建一个自由风格项目 2.添加用户凭据 3.配置git 4.配置构建方式 这里选择 send files or execute command over SSH 5.配置远程发布脚本 6.构建 7 ...
- php图片木马实现原理
什么是木马 木马病毒是指隐藏在正常程序中的一段具有特殊功能的恶意代码,是具备破坏和删除文件.发送密码.记录键盘和攻击Dos等特殊功能的后门程序. 那,php的木马是长什么样的呢?我们来看下面这段代码: ...
- centos7 php开发环境安装-composer
1.安装composer cd /usr/local/src curl -sS https://getcomposer.org/installer | php mv composer.phar /us ...
- QT. 学习之路 三
添加一个动作: Qt 使用QAction类作为动作.QAction包含了图标.菜单文字.快捷键.状态栏文字.浮动帮助等信息.当把一个QAction对象添加到程序中时,Qt 自己选择使用哪个属性来显示, ...
- 建立属于自己的scrapy crawl模板
本人安装PYTHON3.7安装位置:D:\Python\Python37模板位置:D:\Python\Python37\Lib\site-packages\scrapy\templates\spide ...
- 家庭账本开发day11
编写登录界面和个人信息查看界面 $.ajax({ url: "UserServlet?method=login",//url ...
- DataFrame的创建
DataFrame的创建从Spark2.0以上版本开始,Spark使用全新的SparkSession接口替代Spark1.6中的SQLContext及HiveContext接口来实现其对数据加载.转换 ...
- Spring Boot入门学习必知道企业常用的Starter
SpringBoot企业常用的 starter SpringBoot简介 SpringBoot运行 SpringBoot目录结构 整合JdbcTemplate @RestController 整合JS ...
- lucene 入门简介
Lucene 是一个基于 Java 的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能.Lucene 目前是 Apache Jakarta 家族中的一个开源项目. ...