精华内容
下载资源
问答
  • 五、使用scikit-learn进行数据归一化 一、介绍 为什么需要进行数据归一化? 举个简单的例子,样本1以[1, 200]输入到模型中去的时候,由于200可能会直接忽略到1的存在。此时样本间的距离由时间所主导。 此时,如果...
  • 我开始这项工作,以比较在有无数据归一化的情况下,由KNN算法进行分类的准确性。 对于算法的准确性,我们是指正确分类的实例的百分比。 使用库sklearn用Python编写了代码,并且从流行的存储库UCI中下载了四个使用的...
  • 主要介绍了python数据归一化及三种方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 1.1.定义:归一化把需要处理的数据经过处理后(通过某种算法)限制在你需要的一定范围内。 1.2.优点:归一化使数据有可比性,同时又保持相比较的两个数据之间的相对关系 转换成标准模式,防止仿射变换的影响。 ...
  • 主要介绍了详解python实现数据归一化处理的方式:(0,1)标准化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • Matlab数据归一化代码

    2018-10-05 18:08:12
    带有例子的matlab的归一化和反归一化的代码,很详细。
  • 数据归一化程序

    2016-06-09 19:41:04
    数据归一化的matlab程序。 通过输入不同的上下限,可将原始数据归一化到指定的区间内。默认为0 1区间。 针对数据的列归一化,较为完善的合法性判断,基本不会报错。 自己编写的,免费拿去用吧! 尊重知识产权就行...
  • #Sintax print ( zscore ( data )) #输入 [[2104. 3.] [1600. 3.] [2400. 3.] [1416. 2.] [3000. 4.] [1985. 4.] [1534. 3.] [1427. 3.] [1380. 3.] [1494. 3.]] ... [-0.6691 -0.1857]]
  • 数据归一化matlab代码

    2020-12-13 15:00:23
    对于矩阵,向量的一个归一化小程序。很简单。能归到0~1的区间之内。 对于矩阵,向量的一个归一化小程序。很简单。能归到0~1的区间之内。
  • 在此代码中,提供了 14 种方法来规范化数据。 将未归一化(或原始)的数据输入到特定的方法中,得到相应的归一化数据
  • 今天小编就为大家分享一篇基于数据归一化以及Python实现方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 利用python 实现SVM,Logistics,以及训练数据归一化处理
  • 为了消除指标之间的量纲和取值范围差异的影响,需要进行标准化(归一化)处理,将数据按照比例进行缩放,使之落入一个特定的区域,便于进行综合分析。 数据规范化方法主要有: – 最小-最大规范化 – 零-均值规范化 ...
  • matlab数据归一化

    2013-03-18 16:35:27
    matlab数据归一化处理,自己总结的,一起学习下
  • 归一化其实就是标准化的一种方式,只不过归一化是将数据映射到了[0,1]这个区间中。 标准化则是将数据按照比例缩放,使之放到一个特定区间中。标准化后的数据的均值=0,标准差=1,因而标准化的数据可正可负。 二、...
  • 图像归一化,就是(数值-min)/(max-min),把结果都划归到0-1范围,便于不同变量之间的比较,取消...我们利用python的arcpy包对栅格数据批量归一化,而且再保证属性中没有最大值和最小值信息的情况下也能实现归一化计算。
  • 为什么需要进行数据归一化? 举个简单的例子。在下列的散点图中,可知,横轴的值相比于竖轴而言很小,倘若对于一个分类问题,采用KNN算法时求每两个点之间的距离时,倘若数据不归一化的话,因横轴上的数值作用十分...

     目录:

    一、介绍

    二、最值归一化

    1.计算公式

    2.Python实战

    三、均值方差归一化

    1.计算公式

    2.Python实战

    四、归一化要点

    五、使用scikit-learn进行数据归一化


    一、介绍

    为什么需要进行数据归一化?

    举个简单的例子,样本1以[1, 200]输入到模型中去的时候,由于200可能会直接忽略到1的存在。此时样本间的距离由时间所主导。

    此时,如果将天数转换为占比1年的比例,200/365=0.5479, 100/365=0.2740。但也导致样本间的距离又被肿瘤大小所主导。因此有必要进行数据归一化处理。不然直接计算样本间的距离是有一定偏差的

    解决方案:

    将所有的数据映射到统一尺度。

    两种数据归一化的方法:

    • 最值归一化(Normalization):把所有数据映射到0-1之间。适用于分布有明显边界的情况;受outliner影响较大。
    • 均值方差归一化(standardization):把所有数据归一化到均值为0方差为1的分布中。适用于数据分布没有明显的边界;有可能存在极端的数据值。

    二、最值归一化

    1.计算公式

    该方法实现对原始数据的等比例缩放,其中Xscale为归一化后的数据,X为原始数据,Xmax、Xmin分别为原始数据集的最大值和最小值。

    2.Python实战

    # 导包
    import numpy as np
    import matplotlib.pyplot as plt
    
    # 随机生成0-100之间的100个数
    x = np.random.randint(0, 100, size=100)
    x

    输出结果:

    array([10, 92, 55, 25, 67, 84, 64,  2,  5, 56, 32, 37, 69, 40, 24, 86, 65,
           29, 49, 93, 13, 80, 90, 70, 80, 63, 90, 95, 25, 50, 92, 37, 42, 16,
           83, 52, 36, 14, 73,  4, 53, 84, 34, 62, 59, 50, 46, 55, 72, 43, 39,
            1, 58,  6, 84, 64, 72, 70, 41, 30, 51, 62, 79, 14, 89, 20,  7, 37,
           44, 36, 40, 89, 70, 62,  6,  3, 74, 88, 36, 90,  0, 30, 20,  6,  0,
           67, 50,  4, 36, 28, 62, 91, 94, 96, 75, 22, 19, 56, 81, 28])
    # 最值归一化处理,把所有数据映射到0-1之间
    (X - np.min(X)) / (np.max(X) - np.min(X))

    输出结果:

    array([0.10416667, 0.95833333, 0.57291667, 0.26041667, 0.69791667,
           0.875     , 0.66666667, 0.02083333, 0.05208333, 0.58333333,
           0.33333333, 0.38541667, 0.71875   , 0.41666667, 0.25      ,
           0.89583333, 0.67708333, 0.30208333, 0.51041667, 0.96875   ,
           0.13541667, 0.83333333, 0.9375    , 0.72916667, 0.83333333,
           0.65625   , 0.9375    , 0.98958333, 0.26041667, 0.52083333,
           0.95833333, 0.38541667, 0.4375    , 0.16666667, 0.86458333,
           0.54166667, 0.375     , 0.14583333, 0.76041667, 0.04166667,
           0.55208333, 0.875     , 0.35416667, 0.64583333, 0.61458333,
           0.52083333, 0.47916667, 0.57291667, 0.75      , 0.44791667,
           0.40625   , 0.01041667, 0.60416667, 0.0625    , 0.875     ,
           0.66666667, 0.75      , 0.72916667, 0.42708333, 0.3125    ,
           0.53125   , 0.64583333, 0.82291667, 0.14583333, 0.92708333,
           0.20833333, 0.07291667, 0.38541667, 0.45833333, 0.375     ,
           0.41666667, 0.92708333, 0.72916667, 0.64583333, 0.0625    ,
           0.03125   , 0.77083333, 0.91666667, 0.375     , 0.9375    ,
           0.        , 0.3125    , 0.20833333, 0.0625    , 0.        ,
           0.69791667, 0.52083333, 0.04166667, 0.375     , 0.29166667,
           0.64583333, 0.94791667, 0.97916667, 1.        , 0.78125   ,
           0.22916667, 0.19791667, 0.58333333, 0.84375   , 0.29166667])
    # 随机生成0-100之间的100个数(50×2的矩阵)
    X = np.random.randint(0, 100, (50, 2))
    
    # 将整数转成浮点数
    X = np.array(X, dtype=float)
    
    # 最值归一化
    X[:, 0] = (X[:, 0] - np.min(X[:, 0])) / (np.max(X[:, 0]) - np.min(X[:, 0]))
    X[:, 1] = (X[:, 1] - np.min(X[:, 1])) / (np.max(X[:, 1]) - np.min(X[:, 1]))
    
    # 绘制散点图
    plt.scatter(X[:, 0], X[:, 1])
    plt.show()

    print('第一列数据的均值为', np.mean(X[:, 0]))
    print('第一列数据的方差为', np.std(X[:, 0])
    print('第二列数据的均值为', np.mean(X[:, 1]))
    print('第二列数据的方差为', np.std(X[:, 1]))

    输出结果:

    第一列数据的均值为 0.4480412371134021
    第一列数据的方差为 0.29316230758866496
    第二列数据的均值为 0.48494845360824745
    第二列数据的方差为 0.3163383877358538

    三、均值方差归一化

    1.计算公式

    其中,Xmean、S分别为原始数据集的均值和方差。该归一化方式要求原始数据的分布可以近似为高斯分布,否则归一化的效果会变得很糟糕。

    2.Python实战

    # 导包
    import numpy as np
    import matplotlib.pyplot as plt
    
    # 随机生成0-100之间的100个数(50×2的矩阵)
    X2 = np.random.randint(0, 100, (50, 2))
    
    # 将整数转成浮点数
    X2 = np.array(X2, dtype=float)
    
    # 均值方差归一化处理
    X2[:, 0] = (X2[:, 0] - np.mean(X2[:, 0])) / np.std(X2[:, 0])
    X2[:, 0] = (X2[:, 1] - np.mean(X2[:, 1])) / np.std(X2[:, 1])
    
    # 绘制散点图
    plt.scatter(X2[:, 0], X2[:, 1])
    plt.show()

    print('第一列数据的均值为', np.mean(X2[:, 0]))
    print('第一列数据的方差为', np.std(X2[:, 0])
    print('第二列数据的均值为', np.mean(X2[:, 1]))
    print('第二列数据的方差为', np.std(X2[:, 1]))

    输出结果:

    第一列数据的均值为 -9.325873406851315e-17
    第一列数据的方差为 1.0
    第二列数据的均值为 5.329070518200751e-17
    第二列数据的方差为 1.0

    四、归一化要点

    ​ 我们得到数据集训练模型之前,首先会把数据集进行切分,分成训练集和测试集,如果需要对数据进行归一化,我们可以很容易地通过训练集得到其最大值、最小值、均值和方差。但是测试集呢?如何对测试集进行数据归一化呢?

    正常情况下,测试数据集是模拟真实环境的,既然是真实环境,我们就很可能无法得到所有的测试集。因此当有一个新的数据需要进行预测时,我们需要使用训练集的最大值、最小值、均值和方差对测试集数据进行归一化

    五、使用scikit-learn进行数据归一化

    本案例采用鸢尾花数据集进行测试。

    # 导包
    import numpy as np
    from sklearn import datasets 
    
    # 加载iris数据集
    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)
    
    # 导入StandardScaler包(进行均值方差归一化)
    from sklearn.preprocessing import StandardScaler
    
    standardScaler = StandardScaler()
    
    # 训练
    standardScaler.fit(X_train)
    
    print(standardScaler.mean_)   # 均值 四个特征的均值
    print(standardScaler.scale_)  # 分布范围

    输出结果:

    array([5.83416667, 3.08666667, 3.70833333, 1.17      ])
    array([0.81019502, 0.44327067, 1.76401924, 0.75317107])
    # 归一化处理
    X_train = standardScaler.transform(X_train) 
    X_test_standard = standardScaler.transform(X_test)
    X_test_standard

    输出结果:

    array([[-0.28902506, -0.19551636,  0.44878573,  0.43814747],
           [-0.04217092, -0.64670795,  0.78891808,  1.63309511],
           [-1.0295875 , -1.77468693, -0.23147896, -0.22571233],
           [-0.04217092, -0.87230374,  0.78891808,  0.96923531],
           [-1.52329579,  0.03007944, -1.25187599, -1.28788802],
           [-0.41245214, -1.32349533,  0.16534211,  0.17260355],
           [-0.16559799, -0.64670795,  0.44878573,  0.17260355],
           [ 0.82181859, -0.19551636,  0.8456068 ,  1.10200727],
           [ 0.57496445, -1.77468693,  0.39209701,  0.17260355],
           [-0.41245214, -1.09789954,  0.39209701,  0.03983159],
           [ 1.06867274,  0.03007944,  0.39209701,  0.30537551],
           [-1.64672287, -1.77468693, -1.36525344, -1.15511606],
           [-1.27644165,  0.03007944, -1.19518726, -1.28788802],
           [-0.53587921,  0.70686683, -1.25187599, -1.0223441 ],
           [ 1.68580811,  1.15805842,  1.35580532,  1.76586707],
           [-0.04217092, -0.87230374,  0.22203084, -0.22571233],
           [-1.52329579,  1.15805842, -1.53531961, -1.28788802],
           [ 1.68580811,  0.25567524,  1.29911659,  0.83646335],
           [ 1.31552689,  0.03007944,  0.78891808,  1.50032315],
           [ 0.69839152, -0.87230374,  0.90229552,  0.96923531],
           [ 0.57496445,  0.48127103,  0.56216318,  0.57091943],
           [-1.0295875 ,  0.70686683, -1.25187599, -1.28788802],
           [ 2.30294347, -1.09789954,  1.80931511,  1.50032315],
           [-1.0295875 ,  0.48127103, -1.30856471, -1.28788802],
           [ 0.45153738, -0.42111215,  0.33540828,  0.17260355],
           [ 0.08125616, -0.19551636,  0.27871956,  0.43814747],
           [-1.0295875 ,  0.25567524, -1.42194216, -1.28788802],
           [-0.41245214, -1.77468693,  0.16534211,  0.17260355],
           [ 0.57496445,  0.48127103,  1.29911659,  1.76586707],
           [ 2.30294347, -0.19551636,  1.35580532,  1.50032315]])
    # 导包,测试数据归一化之后KNN的性能
    from sklearn.neighbors import KNeighborsClassifier
    
    knn_clf = KNeighborsClassifier(n_neighbors = 3)
    knn_clf.fit(X_train, y_train)
    
    # 计算准确度
    knn_clf.score(X_test_standard, y_test) 

    输出结果:

    1.0

    如果训练集进行了归一化,测试集不做归一化?结果又会如何?

    knn_clf.score(X_test, y_test)

    输出结果:

    0.3333333333333333

    菜鸟还在学习ing!

    后续,如有学习其他数据归一化处理方法,继续补充!

     

     

    展开全文
  • 研究了BP网络输入数据归一化方法 ,提出了一种联合归一化的新方法 ,从而加 快了网络的学习训练速 度 , 提高了分类精度。在此基础上 , 建立了用于机械故障诊断的三层 BP神经网 络模型 ,编写了基于 BP神经网络的故障...
  • SVM数据归一化matlab程序

    热门讨论 2012-06-06 11:16:48
    用于SVM数据归一化,主要目的为规避不同变量之间的量纲差异
  • 01.数据预处理——数据归一化.ipynb
  • 数据归一化

    千次阅读 2018-06-28 21:21:14
    多时候,如果不对数据进行归一化,会导致梯度下降复杂或是xgboost中的损失函数只能选择线性,导致模型效果不佳。下面我结合各类我看到的资料总结一下几种方式的归一化,并有python的实现。 从经验上说,归一化是让...

    多时候,如果不对数据进行归一化,会导致梯度下降复杂或是xgboost中的损失函数只能选择线性,导致模型效果不佳。下面我结合各类我看到的资料总结一下几种方式的归一化,并有python的实现。

    从经验上说,归一化是让不同维度之间的特征在数值上有一定比较性,可以大大提高分类器的准确性。

    如下有个形象的图解:

    如果不归一化,各维特征的跨度差距很大,目标函数就会是“扁”的:

    这里写图片描述

    (图中椭圆表示目标函数的等高线,两个坐标轴代表两个特征) 
    这样,在进行梯度下降的时候,梯度的方向就会偏离最小值的方向,走很多弯路。

    如果归一化了,那么目标函数就“圆”了:

    这里写图片描述

    在知乎里,有人这么回答:

    
       
    1. 主要看模型是否具有伸缩不变性。有些模型在各个维度进行不均匀伸缩后,最优解与原来不等价,例如SVM。对于这样的模型,除非本来各维数据的分布范围就比较接近,否则必须进行标准化,以免模型参数被分布范围较大或较小的数据dominate。有些模型在各个维度进行不均匀伸缩后,最优解与原来等价,例如logistic regression。对于这样的模型,是否标准化理论上不会改变最优解。但是,由于实际求解往往使用迭代算法,如果目标函数的形状太“扁”,迭代算法可能收敛得很慢甚至不收敛。所以对于具有伸缩不变性的模型,最好也进行数据标准化。
    2. 作者:王赟 Maigo
    3. 链接:https: //www.zhihu.com/question/30038463/answer/50491149
    4. 来源:知乎
    5. 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    max-min(Min-Max Normalization)

    也称为离差标准化,是对原始数据的线性变换,使结果值映射到[0 - 1]之间。转换函数如下:

    tips : 适用于本来就分布在有限范围内的数据。

    x_min表示样本数据的最小值,x_max表示样本数据的最大值。

    
       
    1. def Normalization(x):
    2. return [(float(i)-min(x))/float(max(x)-min(x)) for i in x]
    3. # 测试:
    4. x=[ 1, 2, 1, 4, 3, 2, 5, 6, 2, 7]
    5. b=Normalization(x)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    output:

    [0.0, 0.16666666666666666, 0.0, 0.5, 0.3333333333333333, 0.16666666666666666, 0.6666666666666666, 0.8333333333333334, 0.16666666666666666, 1.0]
    
       
    • 1
    • 2

    如果想要将数据映射到[-1,1],则将公式换成:

    
       
    1. import numpy as np
    2. def Normalization2(x):
    3. return [(float(i)-np.mean(x))/(max(x)-min(x)) for i in x]
    4. # 测试
    5. x=[ 1, 2, 1, 4, 3, 2, 5, 6, 2, 7]
    6. b=Normalization2(x)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    output:

    [-0.3833333333333333, -0.21666666666666665, -0.3833333333333333, 0.1166666666666667, -0.049999999999999968, -0.21666666666666665, 0.28333333333333338, 0.45000000000000001, -0.21666666666666665, 0.6166666666666667]
    
       
    • 1
    • 2

    适用场景

    这种归一化方法比较适用在数值比较集中的情况。但是,如果max和min不稳定,很容易使得归一化结果不稳定,使得后续使用效果也不稳定,实际使用中可以用经验常量值来替代max和min。而且当有新数据加入时,可能导致max和min的变化,需要重新定义。

    在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用第一种方法或其他归一化方法。比如图像处理中,将RGB图像转换为灰度图像后将其值限定在[0 255]的范围。

    z-score 标准化方法

    tips : 适用于分布没有明显边界的情况,受outlier影响也较小。

    这种方法给予原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。经过处理的数据符合标准正态分布,即均值为0,标准差为1,转化函数为:

    其中,μ表示所有样本数据的均值,σ表示所有样本的标准差。

    
       
    1. import numpy as np
    2. def z_score(x):
    3. x_mean=np.mean(x)
    4. s2=sum([(i-np.mean(x))*(i-np.mean(x)) for i in x])/len(x)
    5. return [(i-x_mean)/s2 for i in x] #这里感觉是缺少了开根号
    6. # 测试:
    7. x=[ 1, 2, 1, 4, 3, 2, 5, 6, 2, 7]
    8. print z_score(x)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    output:

    [-0.57356608478802995, -0.32418952618453861, -0.57356608478802995, 0.17456359102244395, -0.074812967581047343, -0.32418952618453861, 0.42394014962593524, 0.67331670822942646, -0.32418952618453861, 0.92269326683291775]
    
       
    • 1
    • 2

    总结

    上面有两种方法,那么到底什么情况使用哪一个呢?

    1. 在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,第二种方法(Z-score standardization)表现更好。
    2. 在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用第一种方法或其他归一化方法。比如图像处理中,将RGB图像转换为灰度图像后将其值限定在[0 255]的范围。

    为什么在距离度量计算相似性、PCA中使用第二种方法(Z-score standardization)会更好呢?我们进行了以下的推导分析:

    使用第二种方法进行计算,我们先不做方差归一化,只做0均值化,变换后数据为

    新数据的协方差为:

    由于

    因此

    而原始数据的协方差为:

    因此

    以上说明了将数据变换成都减去均值后,不变

    接着做方差归一化:

    结果如下:

    使用第一种方式计算,为了方便分析,我们对x维进行线性函数变换:

    计算协方差

    可以看到,使用第一种方法(线性变换后),其协方差产生了倍数值的缩放,因此这种方式无法消除量纲对方差、协方差的影响,对PCA分析影响巨大;同时,由于量纲的存在,使用不同的量纲、距离的计算结果会不同。 
    而在第二种归一化方式中,新的数据由于对方差进行了归一化,这时候每个维度的量纲其实已经等价了,每个维度都服从均值为0、方差1的正态分布,在计算距离的时候,每个维度都是去量纲化的,避免了不同量纲的选取对距离计算产生的巨大影响。

    总结来说,在算法、后续计算中涉及距离度量(聚类分析)或者协方差分析(PCA、LDA等)的,同时数据分布可以近似为正态分布,应当使用0均值的归一化方法。其他应用中更具需要选用合适的归一化方法。

    转自:https://blog.csdn.net/imJaron/article/details/79184181

    展开全文
  • 使用Matlab对数据归一化

    万次阅读 多人点赞 2019-10-20 19:06:16
    在使用机器学习做分类和回归分析时,往往需要对训练和测试数据首先做归一化处理。这里就对使用MATLAB对数据进行归一化方法做一个小总结。 为什么进行归一化 一般做机器学习应用的时候大部分时间是花费在特征处理上,...

    前言

    在使用机器学习做分类和回归分析时,往往需要对训练和测试数据首先做归一化处理。这里就对使用MATLAB对数据进行归一化方法做一个小总结。

    为什么进行归一化

    一般做机器学习应用的时候大部分时间是花费在特征处理上,其中很关键的一步就是对特征数据进行归一化。关于为什么进行归一化处理维基百科给出的解释是:1)归一化后加快了梯度下降求最优解的速度;2)归一化有可能提高精度。
    具体介绍:https://www.cnblogs.com/davidwang456/articles/9729746.html

    使用MATLAB归一化

    对于模式识别或者其他统计学来说,训练数据和测试数据应该是每一列是一个样本,每一行是多个样本的同一维,即对于一个M*N的矩阵来说,样本的维度是M,一共N列N个样本。而对数据归一化也应该是对同一维的数据进行归一化。MATLAB提供了归一化函数mapminmax,其主要调用形式有:

    1. [Y,PS] = mapminmax(X,YMIN,YMAX)
    2. [Y,PS] = mapminmax(X,FP)
    3. Y = mapminmax('apply',X,PS)
    4. X = mapminmax('reverse',Y,PS)
    

    对于1和2的调用形式来说,X是预处理的数据,Ymin和Ymax是期望的每一行的最小值与最大值,FP是一个结构体成员主要是FP.ymin, FP.ymax.这个结构体就可以代替Ymin和Ymax,1和2的处理效果一样,只不过参数的带入形式不同。不设置YMIN 和YMAX,归一化范围为0~1。
    示例:

    x=[2,3,4,5,6;7,8,9,10,11];
    [Y,PS] = mapminmax(x,0,1);
    fp.ymin=0;
    fp.ymax=1;
    [Y,PS] = mapminmax(x,fp);
    

    结果:

    0	0.250000000000000	0.500000000000000	0.750000000000000	1
    0	0.250000000000000	0.500000000000000	0.750000000000000	1
    

    而对于3式,在模式识别或者统计学里,PS是训练样本的数据的映射,即PS中包含了训练数据的最大值和最小值,式中的X是测试样本,对于测试样本来说,预处理应该和训练样本一致,即测试样本的最大值和最小值应该是训练集的最大值与最小值。假设x是训练样本,y是测试样本,则代码如下:
    示例:

    x=[2,3,4,5,6;7,8,9,10,11];
    y=[2,3;4,5];
    [xx,ps]=mapminmax(x,0,1);
    yy=mapminmax('apply',y,ps)
    

    但对于训练样本和测试样本,一般是将两者合起来一起归一化,例如要将train,test一起归一化:

    [mtrain,ntrain]=size(train);
    [mtest,ntest]=size(test);
    dataset=[train;test];
    [dataset_scale,ps]=mapminmax(dataset',0,1);
    train=dataset_scale(1:mtrain,:);
    test=dataset_scale((mtrain+1):(mtrain+mtest),:);
    

    对于4式,是预处理之后的数据进行反转得到原始数据

    x=[2,3,4,5,6;7,8,9,10,11];
    y=[2,3;4,5];
    [xx,ps]=mapminmax(x,0,1);
    yy=mapminmax('apply',y,ps);
    y=mapminmax('reverse',yy,ps)
    

    归一化算法描述

    y ′ = l o w e r + ( u p p e r − l o w e r ) ∗ ( y − m i n ) / ( m a x − m i n ) y'=lower+(upper-lower)*(y-min)/(max-min) y=lower+(upperlower)(ymin)/(maxmin)
    其中,y表示原始数据,y’表示经过归一化后的数据。

    按列进行归一化

    mapminmax函数默认是按行进行归一化的。当我们使用libsvm工具箱进行回归分析时,其数据组织要求一行表示一个样本数据,因此我们需要掌握如何使用mapminmax函数按列进行归一化的方法。

    基于magic函数生成测试数据,假设有5个样本。

    train = magic(5);
    
        17    24     1     8    15
        23     5     7    14    16
         4     6    13    20    22
        10    12    19    21     3
        11    18    25     2     9
    

    假设第1列数据为因变量数据,第2、3、4和5列数据为自变量数据。每一列数据的属性相同,假设第1列数据表征身体的健康分数,2、3、4和5列是一些测量指标(如:体重、身高等)。在对数据进行归一化时,应该对每一列进行归一化,而不是将体重和升高一起进行归一化。
    由于mapminmax只能按行进行归一化,因此,我们只需要对训练数据进行转置,然后进行归一化,归一化后再转置回来即可。

    t      = magic(5);          % 训练数据
    x      = t';                % 转置
    [y,ps] = mapminmax(x,0,1);  % 归一化
    tn     = y';                % 转置
    

    结果:

        0.6842    1.0000         0    0.3158    0.6316
        1.0000         0    0.2500    0.6316    0.6842
             0    0.0526    0.5000    0.9474    1.0000
        0.3158    0.3684    0.7500    1.0000         0
        0.3684    0.6842    1.0000         0    0.3158
    

    如果觉得上述方法不够简单,还可以使用下面的函数进行归一化:
    描述

    t = magic(5)
    scaleSVM(t,0,1)
    
    function out_scale = scaleSVM(c,lower,upper)
    %   设置归一化范围 [lower ,upper]
    %   按列进行归一化
    [m,n]=size(c);                              %%获取行数m 和 列数  n
                                 
    Cmax=zeros(1,n);                         
    Cmin=zeros(1,n);                         
    for i=1:n
         Cmax(1,i)=max(c(:,i));                 %%Cmax用来保存每一列中的最大值
    end
    for i=1:n
        Cmin(1,i)=min(c(:,i));                  %%Cmin用来保存每一列中的最小值
    end
    for i=1:m
        for j=1:n
            c(i,j)=lower+(upper-lower)*(c(i,j)-Cmin(1,j))/(Cmax(1,j)-Cmin(1,j));  %%执行前述的公式进行归一化
        end
    end
    out_scale=c;
    end
    
    

    参考:
    https://www.mathworks.com/help/deeplearning/ref/mapminmax.html;jsessionid=8db547639f6ef5a379e2738db0ef
    https://blog.csdn.net/qq_22625309/article/details/76576184
    https://www.cnblogs.com/litthorse/p/9276594.html

    展开全文
  • 归一化是1)把数据变成(0,1)之间的小数 2)把有量纲表达式变成无量纲表达式 标准化是:把数据按比例缩放,使之落入一个小的特定的空间里 简化了几种常用的归一化方法与标准化方法,并有示例.
  • svm实现数据归一化然后进行拟合预测,做回归分析
  • 数据归一化方法

    千次阅读 2019-06-13 16:41:40
    数据归一化和两种常用的归一化方法 数据标准化(归一化)处理是数据挖掘的一项基础工作,不同评价指标往往具有不同的量纲和量纲单位,这样的情况会影响到数据分析的结果,为了消除指标之间的量纲影响,需要进行数据...

    数据归一化和两种常用的归一化方法

    数据标准化(归一化)处理是数据挖掘的一项基础工作,不同评价指标往往具有不同的量纲和量纲单位,这样的情况会影响到数据分析的结果,为了消除指标之间的量纲影响,需要进行数据标准化处理,以解决数据指标之间的可比性。数据的规范化的作用主要有两个:去掉量纲,使得指标之间具有可比性;将数据限制到一定区间,使得运算更为便捷。原始数据经过数据标准化处理后,各指标处于同一数量级,适合进行综合对比评价。以下是两种常用的归一化方法:

    1. min-max标准化(Min-Max Normalization)

    也称为离差标准化,是对原始数据的线性变换,使结果值映射到[0 – 1]之间。转换函数如下:

    x = (x−min)/(max−min)

    其中max为样本数据的最大值,min为样本数据的最小值。这种方法有个缺陷就是当有新数据加入时,可能导致max和min的变化,需要重新定义。

    2. Z-score标准化方法

    这种方法给予原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。经过处理的数据符合标准正态分布,即均值为0,标准差为1,转化函数为:

    x = (x−μ)/σ

    其中 μ为所有样本数据的均值,σ为所有样本数据的标准差。

    3. Z-scores 简单化

    模型如下:

    x = 1/(1+x)

    x越大证明x越小,这样就可以把很大的数规范在[0 - 1]之间了。在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维、涉及到正态分布的时候使用该方法较好。

    4. 对数变换

    在实际工程中,经常会有类似点击次数/浏览次数的特征,这类特征是长尾分布的,可以将其用对数函数进行压缩。特别的,在特征相除时,可以用对数压缩之后的特征相减得到。对数规范化的常见形式是: 

    5. 小数定标

    小数定标主要是对单位的换算和进制的转换,使得数据得到一定的简化与压缩。

    6. 三角函数

    三角函数的值在[0, 1]之间,如果有需要,可以用三角函数进行变换。

    7. sigmoid函数

    sigmoid函数,也称S型函数,可以对数据进行有效的压缩。特别的,S型函数在逻辑回归中起着决定性作用。

    总结

    以上1,2方法都需要依赖样本所有数据,而3方法只依赖当前数据,可以动态使用,好理解。

    展开全文
  • 1.1 数据无量纲 在机器学习算法实践中,我们往往有着将不同规格的数据转换到同一规格,或不同分布的数据转换到某个特定分布的需求,这种需求统称为将数据“无量纲”。譬如梯度和矩阵为核心的算法中,譬如逻辑...
  • 数据标准化(归一化),不同评价指标往往具有不同的量纲和量纲单位,这样的情况会影响到数据分析的结果,为了消除指标之间的量纲影响,需要进行数据标准化处理,以解决数据指标之间的可比性。原始数据经过数据标准化...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 126,515
精华内容 50,606
关键字:

数据归一化