【机器学习】sklearn实现---归类为5大类

sklearn实现---归类为5大类

  • sklearn.preprocessing.scale()(最常用,易受异常值影响)
  • sklearn.preprocessing.StandardScaler()
  • sklearn.preprocessing.minmax_scale()(一般缩放到[0,1]之间,若新数据集最大最小值范围有变,需重新minmax_scale)
  • sklearn.preprocessing.MinMaxScaler()
  • sklearn.preprocessing.maxabs_scale()(为稀疏数据而生)
  • sklearn.preprocessing.MaxAbsScaler()
  • sklearn.preprocessing.robust_scale()(为异常值而生)
  • sklearn.preprocessing.RobustScaler()
  • sklearn.preprocessing.normalize()(文本分类or聚类时常用,默认对样本正则化,上述4种默认对列,即特征来规范化)
  • sklearn.preprocessing.preprocessing.Normalizer()

借用iris数据集

import pandas as pd
import numpy as np
from sklearn import datasets
iris  = datasets.load_iris()
x, y = iris.data, iris.target
print(x[:10])
[[ 5.1  3.5  1.4  0.2][ 4.9  3.   1.4  0.2][ 4.7  3.2  1.3  0.2][ 4.6  3.1  1.5  0.2][ 5.   3.6  1.4  0.2][ 5.4  3.9  1.7  0.4][ 4.6  3.4  1.4  0.3][ 5.   3.4  1.5  0.2][ 4.4  2.9  1.4  0.2][ 4.9  3.1  1.5  0.1]]
print(x.shape,x.max(),x.min())
(150, 4) 7.9 0.1

官网对不同方法的比较文档:

https://scikit-learn.org/stable/auto_examples/preprocessing/plot_all_scaling.html#sphx-glr-auto-examples-preprocessing-plot-all-scaling-py

一.z-score 标准化(zero-mean normalization)

也叫标准差标准化。先减去均值,后除以均方根。提高了数据可比性,同时削弱了数据解释性,是用的最多的数据的标准化方法。输出:每个属性值均值为0,方差为1,呈正态分布。
公式如下:
x* = (x-μ)/σ
( 其中μ为所有样本数据的均值,σ为所有样本数据的标准差。)

使用原因:
部分机器学习算法求解目标函数时,要求特征的均值为0,方差为1.(如:SVM的RFB内核、线性模型的L1和L2正则化)此时,如果某个特征的方差比其他特征的方差大几个数量级别,如:3000:2等,会造成方差大的特征在算法中占据主导地位,使得机器学习效果不佳。

缺点:

  • 当特征明显不遵从高斯正态分布时,标准化出来的效果较差。
  • 还要注意,均值和标准差受离群点的影响很大,所以如果有很多异常值,使用RobustScaler或robust_scaler 的效果更好。
  • scale和 StandardScaler都能接受 scipy.sparse 作为输入,但参数必须设置: with_mean=False。Or会报错: ValueError ,因为默认的中心化会破坏稀疏性,并且此时内存一般会炸,然后崩溃------>dead。
  • 实际应用中,经常忽略特征数据的分布形状,移除每个特征均值,划分离散特征的标准差,从而等级化,进而实现数据中心化。

实现:

  • sklearn.preprocessing.scale
  • sklearn.preprocessing.StandardScaler(两个基本一样,但一般用这个就ok了,比较高级、方法比较齐全)

1.1 sklearn.preprocessing.scale(X, axis=0, with_mean=True, with_std=True, copy=True)

参数说明:
axis=0,默认。计算列。axis=1,则会按行进行标准化。
with_mean、with_std,默认为True,设置将数据转化成0均值、方差为1的标准正态分布,基本不用管。

from sklearn.preprocessing import scale
iris_scale = scale(x)
print(iris_scale[:5])  #显示4个被scale后的特征
[[-0.90068117  1.03205722 -1.3412724  -1.31297673][-1.14301691 -0.1249576  -1.3412724  -1.31297673][-1.38535265  0.33784833 -1.39813811 -1.31297673][-1.50652052  0.10644536 -1.2844067  -1.31297673][-1.02184904  1.26346019 -1.3412724  -1.31297673]]
print("平均值:",iris_scale.mean(axis=0))
print("样本方差:",iris_scale.std(axis=0))
平均值: [ -1.69031455e-15  -1.63702385e-15  -1.48251781e-15  -1.62314606e-15]
样本方差: [ 1.  1.  1.  1.]

1.2 class sklearn.preprocessing.StandardScaler(copy=True, with_mean=True, with_std=True)

from sklearn.preprocessing import StandardScaler
Stan_scaler = StandardScaler()
Stan_scaler.fit(x)
x_test = np.array([[6,4,6,2],[4.999,3,5,2.3]])   #假设新的数据集,可当作我们平时用到的测试集
Stan_scaler.transform(x_test)
array([[ 0.18982966,  2.18907205,  1.27454998,  1.05353673],[-1.02306072, -0.1249576 ,  0.70589294,  1.44795564]])

transform时,用到的是原先x中的均值与标准差,相当于我们平时的训练集例的均值与标准差,然后用这两个值去标准化测试集的数据。

二.最小最大值标准化(将数据缩放到一定范围内)

公式如下:
x* = (x-min)/(max-min) (当使用默认[0,1]范围时)
( 其中min为特征的最小值,max为特征的最大值。)

使用原因:

  • 对于方差非常小的属性可以增强其稳定性。有时数据集的标准差非常非常小,有时数据中有很多很多零(稀疏数据)需要保存住0元素。
  • 维持稀疏矩阵中为0的条目。

缺点:
当数据出现新的最大最小值时,需要重来一遍。
若数值集中且某个数值很大,则规范化后各值接近于0,并且将会相差不大。(如:100、101、102、108、20001)

实现:

  • sklearn.preprocessing.minmax_scale
  • sklearn.preprocessing.MinMaxScaler(这两者的关系跟上面的标准差标准化差不多,这里只讲后者)

sklearn.preprocessing.MinMaxScaler(feature_range=(0, 1), copy=True)
官网文档:
https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.MinMaxScaler.html#sklearn.preprocessing.MinMaxScaler
参数说明:
feature_range : tuple (min, max), default=(0, 1)
转化步骤如下:
X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0)) #每列最大、最小值
X_scaled = X_std * (max - min) + min

from sklearn.preprocessing import MinMaxScaler
MiMaScaler = MinMaxScaler()
MiMaScaler.fit(x)
x_test = np.array([[4.563,4,6,2],[4.999,3,3,1]])   #假设新的数据集,可当作我们平时用到的测试集
MiMaScaler.transform(x_test)    #如果新数据集中最大最小值超出原来fit的数据的最大最小值,请注意transform出来的数据将不在[0,1]内,需重新fit
array([[ 0.07305556,  0.83333333,  0.84745763,  0.79166667],[ 0.19416667,  0.41666667,  0.33898305,  0.375     ]])

举一个栗子(反例):当transform的数据集的最大最小值超出fit数据集中的最大最小值

x_test_out = np.array([[9,10,77,88],[33,29,10,3]])
MiMaScaler.transform(x_test_out) 
array([[  1.30555556,   3.33333333,  12.88135593,  36.625     ],[  7.97222222,  11.25      ,   1.52542373,   1.20833333]])

Obviously,转换出来的数据范围并不在[0,1]内。所以应用中需引起注意。

另外,说明一下:fit_transform存在的意义

1 MiMaScaler.fit(x)
2 MiMaScaler.transform(x)
3 MinMaxScaler().fit_transform(x)
注意第3句效果跟1、2句联合起来一样,第3句省一步,飞快实现转换~~

三.绝对值标准化(暂时这么叫)(将数据缩放到一定范围内,专为稀疏数据而生)

使用原因:
将每个要素缩放到[-1,1]范围,它不会移动/居中数据,因此不会破坏任何稀疏性。
该估计器单独地缩放每个特征,使得训练集中的每个特征的最大绝对值将是1.0。
该缩放器也可以应用于稀疏CSR或CSC矩阵。

实现:

  • sklearn.preprocessing.maxabs_scale(X, axis=0, copy=True)
  • sklearn.preprocessing.MaxAbsScaler(copy=True)(这两者的关系同上)
from sklearn.preprocessing import MaxAbsScaler
MaAbScaler = MaxAbsScaler().fit(x)
MaAbScaler.transform(x)[:10]
array([[ 0.64556962,  0.79545455,  0.20289855,  0.08      ],[ 0.62025316,  0.68181818,  0.20289855,  0.08      ],[ 0.59493671,  0.72727273,  0.1884058 ,  0.08      ],[ 0.58227848,  0.70454545,  0.2173913 ,  0.08      ],[ 0.63291139,  0.81818182,  0.20289855,  0.08      ],[ 0.6835443 ,  0.88636364,  0.24637681,  0.16      ],[ 0.58227848,  0.77272727,  0.20289855,  0.12      ],[ 0.63291139,  0.77272727,  0.2173913 ,  0.08      ],[ 0.55696203,  0.65909091,  0.20289855,  0.08      ],[ 0.62025316,  0.70454545,  0.2173913 ,  0.04      ]])
MaAbScaler.transform(x).max(axis=0)
array([ 1.,  1.,  1.,  1.])

每列值的Max值的绝对值将会是1.

四.鲁棒性标准化(暂时这么叫)(将数据缩放到一定范围内,专为异常值而生)

使用原因:
标准差标准化(第一种,最常用的那种)对数据中出现的异常值处理能力不佳,因此诞生了robust_scale,这种不怕异常值扰动的数据缩放法。
此Scaler根据分位数范围(默认为IQR:Interquartile Range)删除中位数并缩放数据。 IQR是第1四分位数(第25个分位数)和第3个四分位数(第75个分位数)之间的范围。

实现:

  • sklearn.preprocessing.robust_scale(X, axis=0, with_centering=True, with_scaling=True, quantile_range=(25.0, 75.0), copy=True)
  • sklearn.preprocessing.RobustScaler(with_centering=True, with_scaling=True, quantile_range=(25.0, 75.0), copy=True)
from sklearn.preprocessing import RobustScaler
Robust_Scaler = RobustScaler()
Robust_Scaler.fit(x)
Robust_Scaler.transform(x)[:10]
array([[-0.53846154,  1.        , -0.84285714, -0.73333333],[-0.69230769,  0.        , -0.84285714, -0.73333333],[-0.84615385,  0.4       , -0.87142857, -0.73333333],[-0.92307692,  0.2       , -0.81428571, -0.73333333],[-0.61538462,  1.2       , -0.84285714, -0.73333333],[-0.30769231,  1.8       , -0.75714286, -0.6       ],[-0.92307692,  0.8       , -0.84285714, -0.66666667],[-0.61538462,  0.8       , -0.81428571, -0.73333333],[-1.07692308, -0.2       , -0.84285714, -0.73333333],[-0.69230769,  0.2       , -0.81428571, -0.8       ]])

五.正则化

使用原因:
每个样本被单独缩放,使得其范数等于1。注意,是对每个样本,不再像之前的(默认对列进行规范化)规范化。
文本分类或聚类中常用。可用于密集的numpy数组和scipy.sparse矩阵(如果你想避免复制/转换的负担,请使用CSR格式)
Normalization主要思想是对每个样本计算其p-范数,然后对该样本中每个元素除以该范数,这样处理的结果是使得每个处理后样本的p-范数(l1-norm,l2-norm)等于1。
p-范数的计算公式:||X||p=(|x1|^p+|x2|^p+...+|xn|^p)^1/p

实现:

  • sklearn.preprocessing.normalize(X, norm=’l2’, axis=1, copy=True, return_norm=False)
  • sklearn.preprocessing.Normalizer(norm=’l2’, copy=True)

5.1 sklearn.preprocessing.normalize(X, norm=’l2’, axis=1, copy=True, return_norm=False)

官方文档:
https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.normalize.html#sklearn.preprocessing.normalize

5.2 sklearn.preprocessing.Normalizer(norm=’l2’, copy=True)

官方文档:
https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.Normalizer.html#sklearn.preprocessing.Normalizer
参数说明:
norm :‘l1’,‘l2’, or ‘max’, 默认l2。

from sklearn.preprocessing import Normalizer
Normalizer_ = Normalizer()
Normalizer_.fit(x)
Normalizer_.transform(x)[:10]
array([[ 0.80377277,  0.55160877,  0.22064351,  0.0315205 ],[ 0.82813287,  0.50702013,  0.23660939,  0.03380134],[ 0.80533308,  0.54831188,  0.2227517 ,  0.03426949],[ 0.80003025,  0.53915082,  0.26087943,  0.03478392],[ 0.790965  ,  0.5694948 ,  0.2214702 ,  0.0316386 ],[ 0.78417499,  0.5663486 ,  0.2468699 ,  0.05808704],[ 0.78010936,  0.57660257,  0.23742459,  0.0508767 ],[ 0.80218492,  0.54548574,  0.24065548,  0.0320874 ],[ 0.80642366,  0.5315065 ,  0.25658935,  0.03665562],[ 0.81803119,  0.51752994,  0.25041771,  0.01669451]])
 0.80377277* 0.80377277+0.55160877*0.55160877+  0.22064351*0.22064351 +   0.0315205 * 0.0315205 
1.0000000013597559

下面验证一下每个样本的范数,随机挑选第四个样本、第77个样本来验证:

output_3 = []
aa = Normalizer_.transform(x)[3]
for i in aa:output_3.append(i*i)
print(output_3)
print("样本范数:",sum(output_3))
[0.64004839685420423, 0.29068360556563821, 0.068058076225045352, 0.0012099213551119174]
样本范数: 1.0
output_76 = []
bb = Normalizer_.transform(x)[76]
for i in bb:output_76.append(i*i)
print(output_76)
print("样本范数:",sum(output_76))
[0.58472432979261513, 0.099140111279716753, 0.29135053110773901, 0.024785027819929188]
样本范数: 1.0

拓:向量范数的内容:


欢迎指错。 Thanks!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kafka官方文档翻译——实现

IMPLEMENTATION 1. API Design Producer APIs Producer API封装了底层两个Producer: kafka.producer.SyncProducerkafka.producer.async.AsyncProducerclass Producer {/* Sends the data, partitioned by key to the topic using either the *//* synchronous or t…

【机器学习】熵、决策树、随机森林 总结

一、熵 公式: −∑i1np(xi)∗log2p(xi)-\sum_{i 1}^{n}{p(xi)*log_2p(xi)}−i1∑n​p(xi)∗log2​p(xi) ∑i1np(xi)∗log21p(xi)\sum_{i1}^{n}p(xi)*log_2\frac{1}{p(xi)}i1∑n​p(xi)∗log2​p(xi)1​ import numpy as np# 账号是否真实:3no&#xff…

HDU 4857 逃生(拓扑排序)

拓扑排序 一.定义 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序&#xff0c;是将G中所有顶点排成一个线性序列&#xff0c;使得图中任意一对顶点u和v&#xff0c;若<u&#xff0c;v> ∈E(G)&#xff0c;则u在线性序列中出现在v之前。 通常&#xff0c;…

关于deepin系统安装design compiler的问题解答

关于deepin系统安装design compiler的问题解答 Design Compiler是Synopsys综合软件的核心产品。它提供约束驱动时序最优化&#xff0c;并支持众多的设计类型&#xff0c;把设计者的HDL描述综合成与工艺相关的门级设计&#xff1b;它能够从速度、面积和功耗等方面来优化组合电…

【机器学习】交叉验证筛选参数K值和weight

交叉验证 导包 import numpy as npfrom sklearn.neighbors import KNeighborsClassifierfrom sklearn import datasets#model_selection &#xff1a;模型选择 # cross_val_score: 交叉 &#xff0c;validation&#xff1a;验证&#xff08;测试&#xff09; #交叉验证 from s…

手机只能签荣耀!最忠诚代言人胡歌喊你去天猫超品日

在你心中&#xff0c;男神胡歌是什么样子&#xff1f;“御剑乘风来&#xff0c;除魔天地间。”也许是《仙剑奇侠传》里飞扬跋扈、青春不羁的侠客李逍遥。“遍识天下英雄路&#xff0c;俯首江左有梅郎。”也许是《琅铘榜》中才智冠天下&#xff0c;远在江湖却名动帝辇的麒麟才子…

欧式距离与曼哈顿距离

欧式距离&#xff0c;其实就是应用勾股定理计算两个点的直线距离 二维空间的公式 其中&#xff0c; 为点与点之间的欧氏距离&#xff1b;为点到原点的欧氏距离。 三维空间的公式 n维空间的公式 曼哈顿距离&#xff0c;就是表示两个点在标准坐标系上的绝对轴距之和&#xff1a…

在maven pom.xml中加载不同的properties ,如localhost 和 dev master等jdbc.properties 中的链接不一样...

【参考】&#xff1a;maven pom.xml加载不同properties配置[转] 首先 看看效果&#xff1a; 点开我们项目中的Maven projects 后&#xff0c;会发现右侧 我们profile有个可勾选选项。默认勾选localhost。localhost对应项目启动后&#xff0c;会加载配置左侧localhost文件夹下面…

python安装以及版本检测

Windows 安装 Python 3 目前Python有两个大版本&#xff0c;分别是 2.X 和 3.X &#xff0c;我们的教程基于最新版本 3.6.1 首先我们需要获取Python的安装包&#xff0c;可以从官网获取&#xff0c;如果你因为没有VPN工具而无法访问官网的话&#xff0c;我已经将它放在网盘了&…

【机器学习】梯度下降原理

import numpy as np import matplotlib.pyplot as plt %matplotlib inlinef lambda x :(x-3)**22.5*x-7.5 f2 lambda x :-(x-3)**22.5*x-7.5求解导数 导数为0 取最小值 x np.linspace(-2,5,100) y f(x) plt.plot(x,y)梯度下降求最小值 #导数函数 d lambda x:2*(x-3)*12.…

C语言的面向对象设计-对X264/FFMPEG架构探讨

本文贡献给ZSVC开源社区&#xff08;https://sourceforge.net/projects/zsvc/&#xff09;&#xff0c;他们是来自于中国各高校的年轻学子&#xff0c;是满怀激情与梦想的人&#xff0c;他们将用自己的勤劳与智慧在世界开源软件领域为中国留下脚步&#xff0c;该社区提供大量视…

【机器学习】自己手写实现线性回归,梯度下降 原理

导包 import numpy as npimport matplotlib.pyplot as plt %matplotlib inlinefrom sklearn.linear_model import LinearRegression创建数据 X np.linspace(2,10,20).reshape(-1,1)# f(x) wx b y np.random.randint(1,6,size 1)*X np.random.randint(-5,5,size 1)# 噪…

跨站的艺术-XSS Fuzzing 的技巧

作者 | 张祖优(Fooying) 腾讯云 云鼎实验室 对于XSS的漏洞挖掘过程&#xff0c;其实就是一个使用Payload不断测试和调整再测试的过程&#xff0c;这个过程我们把它叫做Fuzzing&#xff1b;同样是Fuzzing&#xff0c;有些人挖洞比较高效&#xff0c;有些人却不那么容易挖出漏洞…

H.264/AVC视频压缩编码标准的新进展

H .264/AVC是由ISO/IEC与ITU-T组成的联合视频组(JVT)制定的新一代视频压缩编码标准&#xff0c;于2003年5月完成制订。相对于先前的标准&#xff0c;H.264/AVC无论在压缩效率、还是在网络适应性方面都有明显的提高&#xff0c;因此&#xff0c;业界普遍预测其将在未来的视频应用…

python注释及语句分类

注释 注释就是&#xff1a;注解&#xff0c;解释。 主要用于在代码中给代码标识出相关的文字提示(提高代码的可读性) 或 调试程序。Python中注释分为两类&#xff1a; 1.单行注释 &#xff1a; 单行注释以 # 号开头&#xff0c;在当前行内&#xff0c;# 号后面的内容就是注释…

【机器学习】回归误差:MSE、RMSE、MAE、R2、Adjusted R2 +方差、协方差、标准差(标准偏差/均方差)、均方误差、均方根误差(标准误差)、均方根解释

我们通常采用MSE、RMSE、MAE、R2来评价回归预测算法。 1、均方误差&#xff1a;MSE&#xff08;Mean Squared Error&#xff09; 其中&#xff0c;为测试集上真实值-预测值。 def rms(y_test, y): return sp.mean((y_test - y) ** 2) 2、均方根误差&#xff1a;RMSE&#xff…

大院大所合作对接会7天倒计时!亮点抢先看

为什么80%的码农都做不了架构师&#xff1f;>>> 推动产业特色发展&#xff0c;提升企业自主创新能力&#xff0c;加快成果转化落地&#xff0c;继江苏发展大会之后&#xff0c;围绕“聚力创新”&#xff0c;7月5日-6日&#xff0c;中国江苏大院大所合作对接会暨第六…

通过取父级for循环的i来理解闭包,iife,匿名函数

在使用for循环的时候&#xff0c;假如需要在循环体中添加一个匿名函数处理其他的事情&#xff0c;那么&#xff0c;在这个匿名函数内&#xff0c;如果需要用到对应的i&#xff0c;因为闭包的缘故&#xff0c;循环体循环结束后才返回i&#xff0c;所以i最终为最后一次的数值。闭…

H.264将普及 视频编码讲坛之H.264前世今生

随着HDTV等高清资源的兴起&#xff0c;H.264这个规范频频出现在我们眼前&#xff0c;HD-DVD和蓝光DVD均计划采用这一标准进行节目制作。而且自2005年下半年以来&#xff0c;无论是NVIDIA还是ATI都把支持H.264硬件解码加速作为自己最值得夸耀的视频技术。而数码播放器领域也吹来…

【机器学习】岭回归

import numpy as npimport matplotlib.pyplot as plt %matplotlib inlinefrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import mean_squared_error,r2_score from sklearn import datasets# CV crosss validation &#xff1a;交叉验证 from skl…