精华内容
下载资源
问答
  • 怎样用Python进行数据转换和归一化1、概述​ 实际的数据库极易受到噪声、缺失值和不一致数据的侵扰,因为数据库太大,并且多半来自多个异种数据源,低质量的数据将会导致低质量的数据分析结果,大量的数据预处理技术...

    3893f4e393f4daa623b8e5e69769d79f.png

    怎样用Python进行数据转换和归一化

    1、概述

    ​ 实际的数据库极易受到噪声、缺失值和不一致数据的侵扰,因为数据库太大,并且多半来自多个异种数据源,低质量的数据将会导致低质量的数据分析结果,大量的数据预处理技术随之产生。本文让我们来看一下数据预处理中常用的数据转换和归一化方法都有哪些。

    2、数据转换(Data Transfer)

    ​ 对于字符型特征的处理:转换为字符型。

    ​ 数据转换其实就是把一些字符型数据转换为计算机可以识别的数值型数据的过程,例如我们有性别这个属性,其中有“男”、“女”这两个元素,那我们就可以用数字0代表“男”,1代表“女”。

    ​ 用python代码来实现一下:

    import pandas as pd
    
    data = {'性别' : ['男', '女', '男', '女', '女']}
    df = pd.DataFrame(data)
    print(df)

    9abe7188cc9b3755f253a60e9c53bc34.png
    df[u'性别'] = df[u'性别'].map({'男': 1, '女': 0})
    print(df)

    4c1d4b1b60bbe0fefbb1ff97b7bd8b03.png

    3、零均值归一化(Z-Score Normalization)

    ​ 说到零均值归一化,我们就要先来聊聊归一化是什么。

    ​ 归一化是我们在数据预处理中经常要用到的方法。假设我们通过一个人的身高和体重去判断一个人的胖瘦,有一个人的身高为1.80m体重为80kg,大家都知道胖瘦是由身高和体重共同来决定的,但是此时体重的数值远远大于身高,也就会导致在计算的时候体重被赋予更高的权重,最终导致预测结果不准确,此时我们就会想到把两种属性映射到一个范围内去计算,这种方法就叫做归一化。

    ​ 了解了归一化,再让我们来了解一下零均值归一化。零均值归一化也叫Z-score规范化(零均值标准化),该方法要求变换后各维特征的均值为0,方差为1,计算方式是将特征值减去均值,再除以标准差。

    ​ 公式:$z-score = frac{x_i - mu}{sigma}$

    注:我们一般会把train和test放在一起做标准化

    ​ 用python代码来实现一下:

    from sklearn.preprocessing import StandardScaler, MinMaxScaler
    import pandas as pd 
    
    views = pd.DataFrame([1295., 25., 1900., 50., 100., 300.], columns=['views'])
    print(views)

    bc2cb3b550a5316829cfab0ff873c699.png
    ss = StandardScaler()
    views['zscore'] = ss.fit_transform(views[['views']])

    bf28083fdda73ba2d0f2ddfb9ee34646.png

    根据结果我们可以看到,属性views被缩放到了很小的范围内,也成功避免了属性值间差异过大的问题。

    4、最大最小归一化(Min-Max Scaling)

    ​ 归一化的另一种常用方法就是最大最小归一化(线性函数归一化),该方法将所有的数据变换到[0,1]区间内。

    ​ 公式:$frac{x_i - min(x)}{max(x) - min(x)}$

    ​ 用python代码来实现一下:

    mms = MinMaxScaler()
    views['minmax'] = mms.fit_transform(views[['views']])
    print(views)

    bc9d05128c67655ae9723f86145dc98f.png

    根据结果我们可以看出,最大最小归一化相比于零均值归一化而言映射到了一个更小的空间内.

    5、为什么要进行归一化

    ​ 我们不妨从随机梯度下降的角度来思考一下,假设有两种数值型特征,x1的取值范围是[0,100],x2的取值范围是[0,10],我们就可以构造出一个图1中a的图形。当我们的学习速率相同的时候,很明显x1的更新速度会大于x2的更新速度,也就会导致收敛速度变慢,但是当我们把x1和x2归一化到同一个数值空间时,就会变成图1中b的图形,x1和x2的更新速度保持一致,从而加快了收敛速度.​

    00155910eef703615220499aed8d6726.png

    6、小结

    ​ 1、在实际应用中,通过梯度下降法进行求解的模型通常都是需要进行归一化的,例如:线性回归、逻辑回归、支持向量机、神经网络等。而决策树模型中信息增益与数据是否经过了归一化没有关系,此时是不需要进行归一化的。

    ​ 2、在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,零均值归一化表现的更好。

    ​ 3、在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用最大最小归一化或其他归一化方法.

    展开全文
  • 前言:  本文主要是介绍下在一个实际的机器学习系统中,该怎样对数据进行...当这些都有了后,就相当于我们有了元素的raw数据,然后就可以进行下面的数据预处理部分了。本文是参考的UFLDL网页教程:Data Preprocessi

    概要

    数据预处理在众多深度学习算法中都起着重要作用,实际情况中,将数据做归一化和白化处理后,很多算法能够发挥最佳效果。然而除非对这些算法有丰富的使用经验,否则预处理的精确参数并非显而易见。在本页中,我们希望能够揭开预处理方法的神秘面纱,同时为预处理数据提供技巧(和标准流程)。

    提示:当我们开始处理数据时,首先要做的事是观察数据并获知其特性。本部分将介绍一些通用的技术,在实际中应该针对具体数据选择合适的预处理技术。例如一种标准的预处理方法是对每一个数据点都减去它的均值(也被称为移除直流分量,局部均值消减,消减归一化),这一方法对诸如自然图像这类数据是有效的,但对非平稳的数据则不然。


    数据归一化

    数据预处理中,标准的第一步是数据归一化。虽然这里有一系列可行的方法,但是这一步通常是根据数据的具体情况而明确选择的。特征归一化常用的方法包含如下几种:

    • 简单缩放
    • 逐样本均值消减(也称为移除直流分量)
    • 特征标准化(使数据集中所有特征都具有零均值和单位方差)


    简单缩放

    在简单缩放中,我们的目的是通过对数据的每一个维度的值进行重新调节(这些维度可能是相互独立的),使得最终的数据向量落在 [0,1][ − 1,1] 的区间内(根据数据情况而定)。这对后续的处理十分重要,因为很多默认参数(如 PCA-白化中的 epsilon)都假定数据已被缩放到合理区间。

    例子:在处理自然图像时,我们获得的像素值在 [0,255] 区间中,常用的处理是将这些像素值除以 255,使它们缩放到 [0,1] 中.


    逐样本均值消减

    如果你的数据是平稳的(即数据每一个维度的统计都服从相同分布),那么你可以考虑在每个样本上减去数据的统计平均值(逐样本计算)。

    例子:对于图像,这种归一化可以移除图像的平均亮度值 (intensity)。很多情况下我们对图像的照度并不感兴趣,而更多地关注其内容,这时对每个数据点移除像素的均值是有意义的。注意:虽然该方法广泛地应用于图像,但在处理彩色图像时需要格外小心,具体来说,是因为不同色彩通道中的像素并不都存在平稳特性。


    特征标准化

    特征标准化指的是(独立地)使得数据的每一个维度具有零均值和单位方差。这是归一化中最常见的方法并被广泛地使用(例如,在使用支持向量机(SVM)时,特征标准化常被建议用作预处理的一部分)。在实际应用中,特征标准化的具体做法是:首先计算每一个维度上数据的均值(使用全体数据计算),之后在每一个维度上都减去该均值。下一步便是在数据的每一维度上除以该维度上数据的标准差。

    例子:处理音频数据时,常用 Mel 倒频系数 MFCCs 来表征数据。然而MFCC特征的第一个分量(表示直流分量)数值太大,常常会掩盖其他分量。这种情况下,为了平衡各个分量的影响,通常对特征的每个分量独立地使用标准化处理。


    PCA/ZCA白化

    在做完简单的归一化后,白化通常会被用来作为接下来的预处理步骤,它会使我们的算法工作得更好。实际上许多深度学习算法都依赖于白化来获得好的特征。

    在进行 PCA/ZCA 白化时,首先使特征零均值化是很有必要的,这保证了 \frac{1}{m} \sum_i x^{(i)} = 0。特别地,这一步需要在计算协方差矩阵前完成。(唯一例外的情况是已经进行了逐样本均值消减,并且数据在各维度上或像素上是平稳的。)

    接下来在 PCA/ZCA 白化中我们需要选择合适的 epsilon(回忆一下,这是规则化项,对数据有低通滤波作用)。 选取合适的 epsilon 值对特征学习起着很大作用,下面讨论在两种不同场合下如何选取 epsilon


    基于重构的模型

    在基于重构的模型中(包括自编码器,稀疏编码,受限 Boltzman 机(RBM),k-均值(K-Means)),经常倾向于选取合适的 epsilon 以使得白化达到低通滤波的效果。(译注:通常认为数据中的高频分量是噪声,低通滤波的作用就是尽可能抑制这些噪声,同时保留有用的信息。在 PCA 等方法中,假设数据的信息主要分布在方差较高的方向,方差较低的方向是噪声(即高频分量),因此后文中 epsilon 的选择与特征值有关)。一种检验 epsilon 是否合适的方法是用该值对数据进行 ZCA 白化,然后对白化前后的数据进行可视化。如果 epsilon 值过低,白化后的数据会显得噪声很大;相反,如果 epsilon 值过高,白化后的数据与原始数据相比就过于模糊。一种直观上得到 epsilon 大小的方法是以图形方式画出数据的特征值,如下图的例子所示,你可以看到一条"长尾",它对应于数据中的高频噪声部分。你需要选取合适的 epsilon,使其能够在很大程度上过滤掉这条"长尾",也就是说,选取的 epsilon 应大于大多数较小的、反映数据中噪声的特征值。

    ZCA Eigenvalues Plot.png

    在基于重构的模型中,损失函数有一项是用于惩罚那些与原始输入数据差异较大的重构结果(译注:以自动编码机为例,要求输入数据经过编码和解码之后还能尽可能的还原输入数据)。如果 epsilon 太小,白化后的数据中就会包含很多噪声,而模型要拟合这些噪声,以达到很好的重构结果。因此,对于基于重构的模型来说,对原始数据进行低通滤波就显得非常重要。

    提示:如果数据已被缩放到合理范围(如[0,1]),可以从epsilon = 0.01epsilon = 0.1开始调节epsilon


    基于正交化ICA的模型

    对基于正交化ICA的模型来说,保证输入数据尽可能地白化(即协方差矩阵为单位矩阵)非常重要。这是因为:这类模型需要对学习到的特征做正交化,以解除不同维度之间的相关性(详细内容请参考 ICA 一节)。因此在这种情况下,epsilon 要足够小(比如 epsilon = 1e − 6)。

    提示:我们也可以在PCA白化过程中同时降低数据的维度。这是一个很好的主意,因为这样可以大大提升算法的速度(减少了运算量和参数数目)。确定要保留的主成分数目有一个经验法则:即所保留的成分的总方差达到总样本方差的 99% 以上。(详细内容请参考 PCA )


    注意: 在使用分类框架时,我们应该只基于练集上的数据计算PCA/ZCA白化矩阵。需要保存以下两个参数留待测试集合使用:(a)用于零均值化数据的平均值向量;(b)白化矩阵。测试集需要采用这两组保存的参数来进行相同的预处理。


    大图像

    对于大图像,采用基于 PCA/ZCA 的白化方法是不切实际的,因为协方差矩阵太大。在这些情况下我们退而使用 1/f 白化方法(更多内容后续再讲)。


    标准流程

    在这一部分中,我们将介绍几种在一些数据集上有良好表现的预处理标准流程.


    自然灰度图像

    灰度图像具有平稳特性,我们通常在第一步对每个数据样本分别做均值消减(即减去直流分量),然后采用 PCA/ZCA 白化处理,其中的 epsilon 要足够大以达到低通滤波的效果。


    彩色图像

    对于彩色图像,色彩通道间并不存在平稳特性。因此我们通常首先对数据进行特征缩放(使像素值位于 [0,1] 区间),然后使用足够大的 epsilon 来做 PCA/ZCA。注意在进行 PCA 变换前需要对特征进行分量均值归零化。


    音频 (MFCC/频谱图)

    对于音频数据 (MFCC 和频谱图),每一维度的取值范围(方差)不同。例如 MFCC 的第一分量是直流分量,通常其幅度远大于其他分量,尤其当特征中包含时域导数 (temporal derivatives) 时(这是音频处理中的常用方法)更是如此。因此,对这类数据的预处理通常从简单的数据标准化开始(即使得数据的每一维度均值为零、方差为 1),然后进行 PCA/ZCA 白化(使用合适的 epsilon)。


    MNIST 手写数字

    MNIST 数据集的像素值在 [0,255] 区间中。我们首先将其缩放到 [0,1] 区间。实际上,进行逐样本均值消去也有助于特征学习。注:也可选择以对 MNIST 进行 PCA/ZCA 白化,但这在实践中不常用。


    中英文对照

    归一化 normalization
    白化 whitening
    直流分量 DC component
    局部均值消减 local mean subtraction
    消减归一化 sparse autoencoder
    缩放 rescaling
    逐样本均值消减 per-example mean subtraction
    特征标准化 feature standardization
    平稳 stationary
    Mel倒频系数 MFCC
    零均值化 zero-mean
    低通滤波 low-pass filtering
    基于重构的模型 reconstruction based models
    自编码器 autoencoders
    稀疏编码 sparse coding
    受限Boltzman机 RBMs
    k-均值 k-Means
    长尾 long tail
    损失函数 loss function
    正交化 orthogonalization

    中文译者

    陈磊(lei.chen@operasolutions.com), 王文中(wangwenzhong@ymail.com), 王方(fangkey@gmail.com)




    展开全文
  • 02 类别型特征 场景描述 类别型特征(Categorical Feature)主要是指性别(男、女)、血型(A、B、AB、O)等只在有限选项内取值的特征。类别型特征原始输入通常是字符串形式,...问题 在对数据进行预处理时,应该怎样

    02 类别型特征

    场景描述

    类别型特征(Categorical Feature)主要是指性别(男、女)、血型(A、B、AB、O)等只在有限选项内取值的特征。类别型特征原始输入通常是字符串形式,除了决策树等少数模型能直接处理字符串形式的输入,对于逻辑回归、支持向量机等模型来说,类别型特征必须经过处理转换成数值型特征才能正确工作。

    知识点

    序号编码(Ordinal Encoding)、独热编码(One-hot Encoding)、二进制编码(Binary Encoding)

    问题 在对数据进行预处理时,应该怎样处理类别型特征?

    分析与解答

    ■ 序号编码
    序号编码通常用于处理类别间具有大小关系的数据。例如成绩,可以分为低、中、高三档,并且存在“高>中>低”的排序关系。序号编码会按照大小关系对类别型特征赋予一个数值ID,例如高表示为3、中表示为2、低表示为1,转换后依然保留了大小关系。

    ■ 独热编码
    独热编码通常用于处理类别间不具有大小关系的特征。例如血型,一共有4个取值(A型血、B型血、AB型血、O型血),独热编码会把血型变成一个4维稀疏向量,A型血表示为(1, 0, 0, 0),B型血表示为(0, 1, 0, 0),AB型表示为(0, 0,1, 0),O型血表示为(0, 0, 0, 1)。对于类别取值较多的情况下使用独热编码需要注意以下问题。
    (1)使用稀疏向量来节省空间。在独热编码下,特征向量只有某一维取值为1,其他位置取值均为0。因此可以利用向量的稀疏表示有效地节省空间,并且目25前大部分的算法均接受稀疏向量形式的输入。

    (2)配合特征选择来降低维度。高维度特征会带来几方面的问题。一是在K近邻算法中,高维空间下两点之间的距离很难得到有效的衡量;二是在逻辑回归模型中,参数的数量会随着维度的增高而增加,容易引起过拟合问题;三是通常只有部分维度是对分类、预测有帮助,因此可以考虑配合特征选择来降低维度。

    # * coding:utf-8_*_
    # 作者     :XiangLin
    # 创建时间 :10/06/2020 17:36
    # 文件     :onehot.py
    # IDE      :PyCharm
    import pandas as pd
    def one_hot_encoder(df, nan_as_category=True):
        original_columns = list(df.columns)  # 属性
        categorical_columns = [col for col in df.columns if df[col].dtype == 'object']
        df = pd.get_dummies(df, columns=categorical_columns, dummy_na=nan_as_category)  #
        new_columns = [c for c in df.columns if c not in original_columns]
        return df, new_columns
    
    
    # 测试
    data = [['handsome', 'tall', 'Japan'],
            ['ugly', 'short', 'Japan'],
            ['handsome', 'middle', 'Chinese']]
    df = pd.DataFrame(data, columns=['face', 'stature ', ' country '])
    df, df_cat = one_hot_encoder(df)
    print(df)
    print(df_cat)
    

    在这里插入图片描述
    ■ 二进制编码
    二进制编码主要分为两步,先用序号编码给每个类别赋予一个类别ID,然后将类别ID对应的二进制编码作为结果。以A、B、AB、O血型为例,表1.1是二进制编码的过程。A型血的ID为1,二进制表示为001;B型血的ID为2,二进制表示为010;以此类推可以得到AB型血和O型血的二进制表示。可以看出,二进制编码本质上是利用二进制对ID进行哈希映射,最终得到0/1特征向量,且维数少于独热编码,节省了存储空间。
    在这里插入图片描述

    除了本章介绍的编码方法外,有兴趣的读者还可以进一步了解其他的编码方式,比如Helmert Contrast、Sum Contrast、Polynomial Contrast、Backward Difference Contrast等。

    另外博主收藏这些年来看过或者听过的一些不错的常用的上千本书籍,没准你想找的书就在这里呢,包含了互联网行业大多数书籍和面试经验题目等等。有人工智能系列(常用深度学习框架TensorFlow、pytorch、keras。NLP、机器学习,深度学习等等),大数据系列(Spark,Hadoop,Scala,kafka等),程序员必修系列(C、C++、java、数据结构、linux,设计模式、数据库等等)以下是部分截图

    更多文章见本原创微信公众号「五角钱的程序员」,我们一起成长,一起学习。一直纯真着,善良着,温情地热爱生活。关注回复【电子书】即可领取哦

    在这里插入图片描述

    在这里插入图片描述
    给大家推荐一个Github,上面非常非常多的干货:https://github.com/XiangLinPro/IT_book

    Don’t give up, just be yourself, cause life’s too short to be anybody else.

    永远都不要放弃做自己,因为人生很短,根本没时间模仿别人

    展开全文
  • 训练一个机器学习项目,对数据预处理是非常重要的,所谓“磨刀不误砍柴工”,这决定了整个项目的效率,多花半个小时来对数据进行更优化的处理,也许在之后的训练运行过程中会节省一个小时甚至一天的时间。...

    训练一个机器学习项目,对数据的预处理是非常重要的,所谓“磨刀不误砍柴工”,这决定了整个项目的效率,多花半个小时来对数据进行更优化的处理,也许在之后的训练运行过程中会节省一个小时甚至一天的时间。

    接下来我们就来看看如何磨这把“刀”吧。

    导入数据

    import numpy as np
    import matplotlib.pyplot as plt
    import pandas as pd
    

    先导入数据预处理所需要的库,在Python中,最流行的三个库也就是Numpy、Matplotlib 和 Pandas。对于数据预处理而言,Pandas 和 Numpy 基本是必需的,而Matplotlib.pyplot则是满足绘图所需要的库。

    我们通常处理的数据集是csv文件,这时我们用下面这条语句

    dataset = pd.read_csv('train_data.csv')
    

    用Pandas(pd.read_csv)来读入数据集。之后输入dataset并回车可以看到我们读入的数据。(图中仅显示了一部分)
    在这里插入图片描述
    然而有的时候我们想要输入的数据已经压缩好了譬如是一文件夹的图片,那我们可以用另一种读取数据的方式,如下:

    import glob
    image = glob.glob('./*.jpg')
    

    这样的操作会读入当前目录下的所有jpg格式的图片

    数据处理的第一步应该是打乱输入的数据,以防数据集是以某种规律整合在一起的,这对于我们的训练是有利的

    dataset= np.random.permutation(image)
    

    在这之后我们需要将我们视作标签的一列与其他的分离开,形成两个矩阵(或者说一个矩阵一个向量),并将标签视作因变量,其余的作为自变量。

    X = dataset.iloc[:, :-1].values
    y = dataset.iloc[:, 3].values
    

    这两行语句分别将从第一列到倒数第二列与最后一列分开并存入两个变量中。“,”的前面表示取所有行,后面表示取对应的列。

    如果数据有缺失怎么办?

    事实上,我们总会遇到数据缺失。对此,我们可以将存在缺失的行直接删除,但这不是一个好办法,还很容易引发问题。因此需要一个更好的解决方案。最常用的方法是,用其所在列的均值来填充缺失。为此,你可以利用 scikit-learn 预处理模型中的 imputer 类来很轻松地实现。

    from sklearn.preprocessing import Imputer
    imputer = Imputer(missing_values = np.nan, strategy = ‘mean’, axis = 0)
    

    均值填充是默认的填充策略,所以其实不需要指定,加在此处是为了方便了解可以包含什么信息。missing_values 的默认值是 nan。如果你的数据集中存在「NaN」形式的缺失值,那么你应该关注 np.nan,可以在此查看官方文档:
    https://scikit-learn.org/stable/modules/generated/sklearn.impute.SimpleImputer.html

    我们只希望在数据存在缺失的列上拟合 imputer。为了拟合这个 imputer,输入:

    imputer = imputer.fit(X[:, 1:3])
    

    现在,我们希望调用实际上可以替换填充缺失数据的方法。通过输入以下语句完成:

    X[:, 1:3] = imputer.transform(X[:, 1:3])
    

    By the way,也许在某些项目中,你会发现,使用缺失值所在列的中位数或众数来填充缺失值会更加合理。填充策略之类的决策看似细微,但其实意义重大。因为流行通用的方法并不一定就是正确的选择,对于模型而言,均值也不一定是最优的缺失填充选择。

    如果包含属性数据,会怎么样呢?

    这是一个好问题。没有办法明确地计算诸如猫、狗、麋鹿的均值。那么可以怎么做呢?可以将属性数据编码为数值!你可能希望使用 sklearn.preprocessing 所提供的 LabelEncoder 类。从你希望进行编码的某列数据入手,调用 label encoder 并拟合在你的数据上。

    from sklearn.preprocessing import LabelEncoder
    labelencoder_X = LabelEncoder()
    X[:, 0] = labelencoder_X.fit_transform(X[:, 0])
    

    这就是将第一列中的属性变量替换为数值所需的全部工作了。例如,麋鹿将用 0 表示,狗将用 2 表示,猫将用 3 表示。

    你发现什么潜在问题了吗?

    对了!所使用的数值层级关系可能会影响模型结果:在程序中,3 比 0 的数值大,会导致程序认为猫比麋鹿大(但这并不是可比较的),但猫并不一定比麋鹿大。

    如何解决这个问题呢?输入 OneHotEncoder 吧!也就是所谓的独热编码。比如在mnist手写数据集中,我们会把0,1,2,3…9这十个数字用一个十位的二进制(至少看起来像二进制)表示,1000000000表示0,0100000000表示1,…。下面看程序

    导入编码器,并制定对应列的索引:

    from sklearn.preprocessing import OneHotEncoder
    onehotencoder = OneHotEncoder(categorical_features = [0])
    

    接着是一点拟合和转换:

    X = onehotencoder.fit_transform(X).toarray()
    

    现在,你的那一列数据已经被替换为了这种形式:数据组中的每一个属性数据对应一列,并以 1 和 0 取代属性变量。非常贴心,对吧?如果我们的 Y 列也是如「Y」和「N」的属性变量,那么我们也可以在其上使用这个编码器。

    labelencoder_y = LabelEncoder()
    y = labelencoder_y.fit_transform(y)
    

    这会直接拟合并将 y 表示为编码变量:1 表示「Y」,0 表示「N」。

    训练集与测试集的划分

    如果你导入的数据并没有将训练集数据与测试集数据分开,你可以开始将数据集划分为训练集和测试集了。不过记得,一定要将你的数据分为训练集和测试集,永远不要用测试集来训练!

    现在,我们有了需要学习的模型。模型需要在数据上训练,并在另外的数据上完成测试。对训练集的记忆并不等于学习。模型在训练集上学习得越好,就应该在测试集给出更好的预测结果。过拟合永远都不是你想要的结果,学习才是!

    首先,导入:

    from sklearn.model_selection import train_test_split
    

    现在,可以创建 X_train、X_test、y_train 和 y_test 集合了。

    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)
    

    一种常见的方法是将数据集按 80/20 进行划分,其中 80% 的数据用作训练,20% 的数据用作测试。这也是为何指定 test_size 为 0.2 的原因。你也可以根据自己的需求来任意划分,如果你的数据集特别大,譬如有一百万张图片,那完全可以只用五万张图片来作为测试集。你并不需要设置 random_state,这里设置的原因是为了可以完全复现结果。

    特征缩放

    什么是特征缩放?为什么需要特征缩放?

    看看我们的数据。我们有一列动物年龄,范围是 4~17,还有一列动物价值,范围是$48,000-$83,000。价值一栏的数值不仅远大于年龄一栏,而且它还包含更加广阔的数据范围。这表明,欧式距离将完全由价值这一特征所主导,而忽视年龄数据的主导效果。如果欧式距离在特定机器学习模型中并没有具体作用会怎么样?缩放特征将仍能够加速模型,因此,你可以在数据预处理中,加入特征缩放这一步。

    特征缩放的方法有很多。但它们都意味着我们将所有的特征放在同一量纲上,进而没有一个会被另一个所主导。

    导入相关库开始:

    from sklearn.preprocessing import StandardScaler
    

    创建一个需要缩放对象并调用 Standard Scaler

    sc_X = StandardScaler()
    

    直接在数据集上进行拟合以及变换。获取对象并应用方法。

    X_train = sc_X.fit_transform(X_train)
    X_test = sc_X.transform(X_test)
    

    不需要在测试集上进行拟合,只进行变换

    sc_y = StandardScaler()
    y_train = sc_y.fit_transform(y_train)
    

    原文链接:https://towardsdatascience.com/the-complete-beginners-guide-to-data-cleaning-and-preprocessing-2070b7d4c6d

    展开全文
  • 前言:  本文主要是介绍下在一个实际的机器学习系统中,该怎样对数据进行...当这些都有了后,就相当于我们有了元素的raw数据,然后就可以进行下面的数据预处理部分了。本文是参考的UFLDL网页教程:Data Preprocessing
  • 类别型主要指性别,血型等只有在有限选项内取值的特征。...在对数据进行预处理时,应该怎样处理类别型特征? 序号编码 Ordinal Encoding 序号编码通常处理类别间具有大小关系的数据。例如成绩,可以分为低,中...
  • 有时需要对特征进行一些分析,比如特征之间的相关性,特征与目标变量之间的相关性,有时需要对数据进行一些预处理,比如对分类变量创建虚拟变量,对连续变量进行log变换或者标准化,归一化。 请问,这两个步骤之间...
  • 什么样的特征是类别型特征? 类别型特征主要是指性别(男/女),体型(胖/瘦/适中)等只有在选项内取值的特征...序号编码通常用于处理类别间具有大小关系的数据,例如考试的成绩可以由好到坏分为(A、B、C、D)四档...
  • 你好 我曾经的研究方向是微波与光学遥感协同反演土壤水分 但是那是研一的时候 后来由于种种原因换了方向 不过我当时用的就是Sentinel-1数据并且也是用的欧空局Snap软件进行的处理 多少还记得一些SLC(Single Look ...
  • 原帖地址:Deep learning:三十(关于数据预处理的相关技巧) Deep learning:三十(关于数据预处理的相关技巧)    前言:  本文主要是介绍下在一个实际的机器学习系统中,该怎样对数据进行预处理。...
  • get到一串字符,然后想放到SQL Where `项目`=$_GET["xxxxx"] 语句里面,然后在MySQL查找信息 怎样处理才安全 我想要get到的这个string只剩下数字和英文字母.
  • 首先要清楚什么是类别型特征? 简单考虑,如果是数值类别特征,统计后...例如成绩,可以分为低、中、高三档,我们可以将其编码分别为1、2、3进行表示。 独热编码通常用于处理类别间不具有大小关系的数据。具体使用...
  • 我们这样做了以后,对模型效果会有怎样的影响呢?在这里,我为大家准备了KNN和随机森林分别在方差过滤前和方差过滤后运行的效果和运行时间的对比。KNN是K近邻算法中的分类算法,其原理非常简单,是利用每个样本到...
  • 待处理数据为间隔一秒的时间序列,但是其中有时间缺失,怎样把丢失的时间补齐并赋值为零并按天为单位进行reshape. 萌新一枚,首次提问还望大佬们赐教:)
  • 文本文件中,插入了表格数据,请问表格数据应该怎样进行数据预处理
  • <div><p>请问YOLOV3的图像预处理策略是怎样的?比如原始输入图像数量是500张,使用各种单图像数据增强的方法:随机水平翻转图像RandomFlipImage,这种图像增强方法是对所有的图片进行随机...
  • 怎样用Python进行数据转换和归一化怎样用Python进行数据转换和归一化1、概述实际的数据库极易受到噪声、缺失值和不一致数据的侵扰,因为数据库太大,并且多半来自多个异种数据源,低质量的数据将会导致低质量的数据...
  • 怎样用Python进行数据转换和归一化 1、概述 实际的数据库极易受到噪声、缺失值和不一致数据的侵扰,因为数据库太大,并且多半来自多个异种数据源,低质量的数据将会导致低质量的数据分析结果,大量的数据预处理技术...
  • 怎样用Python进行数据转换和归一化一、概述实际的数据库极易受到噪声、缺失值和不一致数据的侵扰,因为数据库太大,并且多半来自多个异种数据源,低质量的数据将会导致低质量的数据分析结果,大量的数据预处理技术随...
  • 怎样用Python进行数据转换和归一化1、概述实际的数据库极易受到噪声、缺失值和不一致数据的侵扰,因为数据库太大,并且多半来自多个异种数据源,低质量的数据将会导致低质量的数据分析结果,大量的数据预处理技术随...
  • 怎样用Python进行数据转换和归一化 1、概述 实际的数据库极易受到噪声、缺失值和不一致数据的侵扰,因为数据库太大,并且多半来自多个异种数据源,低质量的数据将会导致低质量的数据分析结果,大量的数据预处理技术...
  • 一、概述实际的数据库极易受到噪声、缺失值和不一致数据的侵扰,因为数据库太大,并且多半来自多个异种数据源,低质量的数据将会导致低质量的数据分析结果,大量的数据预处理技术随之产生。本文让我们来看一下数据...
  • 转:数据科学 怎样进行大数据的入门级学习?   数据科学并没有一个独立的学科体系,统计学,机器学习,数据挖掘,数据库,分布式计算,云计算,信息可视化等技术或方法来对付数据。 但从狭义上来看,我认为数据...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 172
精华内容 68
关键字:

怎样进行数据预处理