使用 Scikit-Learn 在 Python 中重新缩放机器学习数据

在构建模型之前,必须准备好您的数据。 数据准备过程可以包括三个步骤:数据选择、数据预处理和数据转换。

在本教程中,您将学习两种简单的数据转换方法,您可以在 Python 中使用 scikit-learn 应用于您的数据。

立即开始您的项目,阅读我的新书《机器学习数据准备》,其中包含分步教程和所有示例的Python 源代码文件。

让我们开始吧。

更新请参阅此帖子以获取更现代的示例集

Data Rescaling

数据重新缩放
照片由 Quinn Dombrowski 提供,部分权利保留。

数据重新缩放

预处理后的数据可能包含属性,这些属性具有各种数量的混合比例,例如美元、千克和销售量。

许多机器学习方法都期望或在数据属性具有相同比例时更有效。两种流行的数据缩放方法是**归一化**和**标准化**。

想开始学习数据准备吗?

立即参加我为期7天的免费电子邮件速成课程(附示例代码)。

点击注册,同时获得该课程的免费PDF电子书版本。

数据归一化

归一化是指将实值数值属性重新缩放到 0 和 1 之间的范围。

缩放模型的输入属性非常有用,这些模型依赖于值的幅度,例如 k-近邻使用的距离度量以及回归系数的准备。

下面的示例演示了 Iris 花卉数据集的数据归一化。

有关更多信息,请参阅 API 文档中的 normalize 函数

数据标准化

标准化是指将每个属性的分布移位,使其均值为零且标准差为一(单位方差)。

标准化属性对于依赖属性分布的模型(例如高斯过程)非常有用。

下面的示例演示了 Iris 花卉数据集的数据标准化。

有关更多信息,请参阅 API 文档中的 scale 函数

提示:选择哪种方法

在应用算法之前,很难知道重新缩放数据是否会提高算法的性能。它通常可以,但并非总是如此。

一个好建议是创建数据集的重新缩放副本,并使用您的测试工具和少量您想要快速检查的算法来对它们进行测试。这可以快速突出在给定模型下重新缩放数据的优势(或缺乏优势),以及哪种重新缩放方法可能值得进一步研究。

总结

数据重新缩放是应用机器学习算法之前数据准备的一个重要部分。

在本教程中,您了解了数据重新缩放在应用机器学习过程中的位置,以及两种方法:归一化和标准化,您可以在 Python 中使用 scikit-learn 库来重新缩放数据。

更新请参阅此帖子以获取更现代的示例集

掌握现代数据准备!

Data Preparation for Machine Learning

在几分钟内准备好您的机器学习数据

...只需几行python代码

在我的新电子书中探索如何实现
机器学习数据准备

它提供**自学教程**,并附有关于以下内容的**完整工作代码**:
*特征选择*、*RFE*、*数据清洗*、*数据转换*、*缩放*、*降维*,以及更多...

将现代数据准备技术引入
您的机器学习项目


查看内容

100 条对使用 Scikit-Learn 在 Python 中为机器学习重新缩放数据的回复

  1. Matt 2016年7月10日 晚上7:13 #

    您好,感谢这篇精彩的文章!我有一个快速问题(可能要花很长时间解释,但我认为答案很短 🙂 )
    我正在为 k-NN 算法使用数据标准化。我将有新的实例,并且需要确定它们的类别,它们的数据将不会被标准化。
    我应该
    1) 使用 scale 函数标准化我的训练集。然后手动计算我训练集的均值和标准差,以标准化我的新向量。
    2) 将新数据添加到训练集中,然后使用 mean 函数对该集进行标准化。
    3) 以上都不是
    谢谢!

  2. Tzu-Yen 2017年6月16日 上午6:50 #

    我偶然发现了您的网站,这对学习机器学习非常有帮助。感谢您的辛勤工作。

    只是一个友好的提醒。归一化函数有一个 axis 参数,其默认值为 1,因此它默认在行/数据上运行。对于特征归一化,您需要将 axis 设置为 0。

    • Jason Brownlee 2017年6月16日 上午8:12 #

      谢谢 Tzu-Yen!

    • Abel 2017年8月17日 上午7:09 #

      嘿 Tzu-Yen,你拯救了我的一天……非常感谢

  3. Shud 2017年11月1日 下午4:00 #

    嗨,Jason,

    我能知道如何将数据恢复到原始比例吗?我需要我的预测值回到原始比例。我归一化了我的数据并尝试了 .inverse_transform(data) 来恢复我的原始数据。但它给了我一个错误 - AttributeError: ‘Normalizer’ object has no attribute ‘inverse_transform’
    任何帮助都将不胜感激。

  4. Sumit 2017年11月17日 下午3:37 #

    嗨,Jason,
    我有一个问题。
    假设今天我的数据范围是 5000 到 10000,将被缩放到 0 到 1 之间
    明天,如果出现一个新数据录入,其值为 10500。如果我使用相同的 5000 到 10000 范围进行拟合,它会产生输出 X1;如果我指定 5000 到 10500 的范围,它会产生输出 X2,而 X2 不等于 X1。

    如何克服这个问题?如何处理带有旧范围的新数据?

    谢谢及问候
    Sumit

    • Jason Brownlee 2017年11月18日 上午10:12 #

      您可以估计未来数据的预期范围,并使用这些最小值/最大值进行缩放。

      或者,如果数据是高斯分布的,您可以估计均值/标准差进行标准化。

  5. Rizwan Mian 2018年1月1日 上午10:11 #

    Jason,当我使用帖子中建议的标准化时,我看到均值和标准差分别非常接近零和一……但不是完全相同。想知道社区是否可以接受这样接近的值?

    计数 7.68E+02
    均值 -6.48E-17
    标准差 1.00E+00
    最小值 -1.14E+00
    25% -8.45E-01
    50% -2.51E-01
    75% 6.40E-01
    最大值 3.91E+00

  6. Suranga 2018年4月8日 晚上11:25 #

    您好,请问 preprocessing.scale() 背后的公式是什么?

  7. neethu 2018年5月16日 晚上9:05 #

    在训练数据集时,我的准确率约为 100%。但测试时,我没有得到正确答案。可能是什么原因?您能帮帮我吗?

  8. Hagais 2018年6月27日 下午6:01 #

    嗨 Jason Brownlee 先生,我想问一下如何使用 normalizer 将值打印回它们的原始比例?

    • Jason Brownlee 2018年6月28日 上午6:14 #

      您可以反转缩放转换,调用 scaler.invert_transform()

  9. Nitin vij 2018年7月18日 晚上8:27 #

    嗨,Jason,

    我尝试使用 standardized_X = preprocessing.scale(X)。
    我通过 print(np.mean(standardized_X[:,0])) 进行了检查,但均值不是零(对于四个列中的任何一个),尽管标准差为一。我是否做错了什么。

    Please suggest.

    • Jason Brownlee 2018年7月19日 上午7:49 #

      我很惊讶。我期望它是零,也许确认您没有引入错误或拼写错误?

  10. vivek 2018年9月13日 晚上11:29 #

    如果我使用深度神经网络进行回归预测时,目标值在不同范围内,通过对目标值进行归一化来获得更高的准确性是否有帮助?如果有,我应该使用哪种技术?

    • Jason Brownlee 2018年9月14日 上午6:37 #

      是的,也许可以尝试归一化和标准化,看看哪种比不缩放能获得更好的技能。

  11. Abhishek Shankar 2018年9月19日 上午4:43 #

    何时归一化,何时标准化??

    • Jason Brownlee 2018年9月19日 上午6:27 #

      当数据变量具有不同单位时,进行归一化。

      当变量呈高斯分布时,进行标准化。

  12. olufemi george 2019年1月1日 上午2:01 #

    我有一个愚蠢的问题;

    您的代码中有两行。

    X = iris.data
    y = iris.target

    X 和 Y 如何知道什么是因变量和自变量?它会在我的数据集上起作用,而无需我告诉它(我怀疑)吗?

    谢谢

  13. hannah 2019年2月19日 晚上7:52 #

    嗨,Jason,

    首先,我想说我非常欣赏您的博客文章,它们对我帮助很大!

    我在重现文章中的归一化/标准化时遇到问题。作者写道“(……)幅度按对数缩放。每个频率带的特征都归一化为零均值和单位方差。” - 他们是指标准化,那么使用 preprocessing.scale 就足够了吗?

    为了使其更具混淆性,我发现另一组人正在重现第一组的结果。他们写道“对每个窗口计算归一化总幅度的对数。
    在输入网络之前,将滤波器组能量归一化到 0 到 1 之间的范围。”对我来说,这看起来像普通的归一化。

    这是描述的相同过程吗?我怀疑……

    非常感谢您的帮助!

    Hannah

    • Jason Brownlee 2019年2月20日 上午8:00 #

      也许直接联系作者,询问他们具体做了什么?

      除非学者发布用于生成结果的代码,否则他们的论文充其量是浪费时间,最坏的情况是欺诈。

  14. Murali krishna 2019年3月25日 下午1:16 #

    嗨,Jason,

    关于标准化,有一个快速问题,假设我在整个总体中选择了一个样本数据来构建模型,并在运行模型之前标准化了值。那么,我是否可以直接将这些 beta 系数应用于整个总体,或者由于我通过标准化值找到了 beta 系数,我是否应该标准化整个总体中的所有值?

    • Jason Brownlee 2019年3月25日 下午2:18 #

      我建议从训练集中估计系数,并将在今后所有数据上使用它们。

  15. Murali 2019年3月25日 下午5:21 #

    嘿,谢谢回复,你能详细说明一下为什么应该使用从训练集中估计的系数并将它们用于所有数据吗?

  16. Anna 2019年5月20日 下午1:03 #

    我正在尝试使用 Pytorch 对 household_power_consumption_days.csv 数据进行编码 LSTM。那么,我应该归一化还是重新缩放数据?

    • Jason Brownlee 2019年5月20日 下午2:37 #

      抱歉,我没有 Pytorch 的示例。

      在建模之前缩放数据是一个好习惯。

  17. Liten 2019年5月29日 上午12:49 #

    你好 Jason,

    为了训练 SVM 分类器,数据应该缩放到 [0,1] 还是 [-1, 1]?
    提前感谢

    • Jason Brownlee 2019年5月29日 上午8:45 #

      我认为目标需要是 {-1, 1}。但 sklearn 会为你处理——据我所知。

  18. MWh 2019年8月15日 晚上9:46 #

    谢谢 Jason,

    如果我只有 1 个特征,是否需要归一化/缩放?
    我的数据只有 x 和 y,其中 y 是因变量。我正在处理随机森林回归。

  19. jeff 2019年8月15日 晚上10:53 #

    如何在 sklearn 中将具有文本值的数据集正确地归一化为数字?我的数据集有训练和测试部分,并且在归一化后我得到了不同数量的列。如何对它们进行等量归一化?

  20. Bilal 2019年8月27日 晚上7:17 #

    决策树算法是否需要归一化?

  21. Amit Yadav 2019年9月24日 晚上7:12 #

    非常感谢您撰写这篇教程。何时使用归一化,何时使用标准化?我阅读了一篇文章,他们说“如果我们想重新缩放数据集中的每个观测值,我们可以使用归一化。如果我们想按数据集中的特征进行重新缩放,我们可以使用标准化。”

    • Jason Brownlee 2019年9月25日 上午5:56 #

      很高兴它有帮助。

      通常进行归一化,当变量是高斯分布时使用标准化。

      如果您不确定,请测试两者,并使用结果技能最好的那个。

  22. Marcos Cesar M. Pablos 2019年11月3日 上午6:09 #

    您好 Jason,感谢所有信息,我们看看您能否帮我。

    我完成了对预测变量的缩放,并且在进行预测时,结果以科学计数法出现。我研究了一下,发现有一种方法可以进行 inverse_transform,逆转缩放过程,我尝试了,但未能成功逆转,您能帮帮我吗?
    下面是测试代码。

    import pandas as pd
    import numpy as np
    base = pd.read_csv(‘c://udemy//ia//bd//house-prices.csv’)
    X = base.iloc[:, 3:19].values
    y = base.iloc[:, 2].values

    from sklearn.model_selection import train_test_split
    X_treinamento, X_teste, y_treinamento, y_teste = train_test_split(X, y,
    test_size = 0.3,
    random_state = 0)
    from sklearn.preprocessing import StandardScaler
    scaler = StandardScaler()
    X_treinamento = scaler.fit_transform(X_treinamento)

    from sklearn.linear_model import LinearRegression
    from sklearn.preprocessing import PolynomialFeatures

    poly = PolynomialFeatures(degree=4)
    X_treinamento_poly = poly.fit_transform(X_treinamento)
    X_teste_poly = poly.transform(X_teste)

    regressor = LinearRegression()
    regressor.fit(X_treinamento_poly, y_treinamento)
    score = regressor.score(X_treinamento_poly, y_treinamento)

    previsoes = regressor.predict(X_teste_poly)

    previsoes = scaler.inverse_transform(previsoes) = 无法正常工作。

  23. Marcos Cesar M. Pablos 2019年11月3日 上午8:26 #

    你好 Jason,
    感谢您的提示,根据您所说的,我看到了可以inverse_transform,但是在应用时出现了一个错误,这个错误似乎很简单,很容易解决,但就是解决不了,出现了这个错误

    ValueError: operands could not be broadcast together with shapes (6484,) (16,) (6484,)

    我尝试对predictions变量应用reshape,但完全不起作用。

    有什么建议吗?

    • Jason Brownlee 2019年11月4日上午6:35 #

      调用transform()和inverse_transform()时,数据的形状和列的顺序必须相同。

      也许可以检查一下。

  24. Marcos Cesar M. Pablos 2019年11月4日上午9:20 #

    明白了,现在可以了,谢谢!

    import pandas as pd

    base = pd.read_csv(‘c://udemy//ia//bd//house-prices.csv’)
    X = base.iloc[:, 3:19].values
    y = base.iloc[:, 2:3].values

    from sklearn.preprocessing import StandardScaler
    scaler_x = StandardScaler()
    X = scaler_x.fit_transform(X)
    scaler_y = StandardScaler()
    y = scaler_y.fit_transform(y)

    from sklearn.model_selection import train_test_split
    X_treinamento, X_teste, y_treinamento, y_teste = train_test_split(X, y,
    test_size = 0.3,
    random_state = 0)

    from sklearn.linear_model import LinearRegression
    from sklearn.preprocessing import PolynomialFeatures

    poly = PolynomialFeatures(degree=4)
    X_treinamento_poly = poly.fit_transform(X_treinamento)
    X_teste_poly = poly.transform(X_teste)

    regressor = LinearRegression()
    regressor.fit(X_treinamento_poly, y_treinamento)
    score = regressor.score(X_treinamento_poly, y_treinamento)

    # previsóes com o scalonamento reverso
    previsoes1 = scaler_y.inverse_transform(regressor.predict(X_teste_poly))

    y_teste = scaler_y.inverse_transform(y_teste)

    from sklearn.metrics import mean_absolute_error
    mae = mean_absolute_error(y_teste, previsoes1)

    #Testando com o y_teste e previsóes ainda com scalonamento
    previsoes = regressor.predict(X_teste_poly)

    scaler_teste = StandardScaler()
    y_teste = scaler_teste.fit_transform(y_teste)

    from sklearn.metrics import mean_absolute_error
    mae = mean_absolute_error(y_teste, previsoes)

  25. Sia 2019年11月12日凌晨12:47 #

    先生,如何在Python中获取给定数据集的均值=0和标准差=1?

  26. Vibhaas 2020年1月20日晚上11:07 #

    Jason,文章写得很好。我从您文章的几个点中学到了东西,并将其付诸实践,实现了一个ML模型来比较其影响。这是文章:https://medium.com/@vibhaas.kotwal/feature-scaling-8c92bdd080a1
    请让我知道您的意见。

    • Jason Brownlee 2020年1月21日上午7:13 #

      谢谢。

      抱歉,我没有能力审查您的作品。

  27. Rana 2020年1月29日凌晨12:19 #

    先生,
    我得到intercept_ =3.1378, 93 support_vectors_ 和 93 dual_coef_,然后,
    如何在Python中获得多项式SVM的超平面方程?
    谢谢你。

    • Jason Brownlee 2020年1月29日上午6:39 #

      我相信您可以从sklearn API检索所有系数。

  28. Akram 2020年3月31日上午8:53 #

    亲爱的 Jason,
    我有一个csv数据集需要归一化。但是,我只想归一化除目标变量以外的所有列,如何实现?

    import pandas as pd
    from sklearn import preprocessing

    data=pd.read_csv(‘File.csv’)
    min_max_scaler = preprocessing.MinMaxScaler()
    np_scaled = min_max_scaler.fit_transform(data)
    df_normalized = pd.DataFrame(np_scaled)
    df_normalized = df_normalized.to_csv(Norm_File.csv’,header=True, index=False)

    非常感谢。

    • Jason Brownlee 2020年3月31日下午1:33 #

      我不确定您是否可以直接在数据帧上使用scaler,也许可以先从它们中提取numpy数组?

  29. Nhu 2020年4月18日下午7:12 #

    你好

  30. Nhu 2020年4月18日晚上7:21 #

    你好

    我有一个数据集
    包含3列
    receney frequency monetary
    那么我可以对日期进行预处理,标准化或归一化吗?(我将数据集用于Kmeans)
    请帮帮我。抱歉,我的英语不好
    非常感谢您

  31. nhu 2020年4月18日晚上7:25 #

    我才刚开始学习
    我写了它
    请问您能帮我检查一下我的代码是对还是错吗?
    我做了预处理
    ***********
    from sklearn.cluster import KMeans
    import pandas as pd
    import matplotlib.pyplot as plt

    sse = {}

    #load our data from CSV
    tx_user = pd.read_csv(‘rfm_data.csv’, sep =’,’ , engine=’python’)

    # display(tx_user[[‘M’]].boxplot())
    #PRE-PROCESSING ———————————————–
    col_names = [‘R’,’F’, ‘M’]

    #Step 1: Rescale Data
    #from sklearn.preprocessing import MinMaxScaler
    #min_max_scaler = MinMaxScaler()
    #tx_user[col_names] = min_max_scaler.fit_transform(tx_user[col_names])

    #Step 2: Standardize Data
    from sklearn.preprocessing import StandardScaler
    standard_scaler = StandardScaler()
    tx_user[col_names]=pd.read_csv(‘rfm_data.csv’, sep =’,’ , engine=’python’)
    tx_user[col_names] = standard_scaler.fit_transform(tx_user[col_names])

    #Step 3: Normalize Data
    #from sklearn.preprocessing import Normalizer
    #normalizer = Normalizer()
    #tx_user[col_names] = normalizer.fit_transform(tx_user[col_names])

    #print(‘Descriptive statistic of preprocessed data: ‘)
    #display(tx_user.describe())
    #END OF PRE-PROCESSING ——————————————-

    for k in range(1, 10)
    kmeans = KMeans(n_clusters=k, max_iter=1000).fit(tx_user[[‘R’,’F’, ‘M’]])
    tx_user[“clusters”] = kmeans.labels_
    sse[k] = kmeans.inertia_
    print(‘\n \n Sum of squared distances of samples to their closest cluster center: \n’)

    df_sse = pd.DataFrame(sse.items(), columns = [‘K Cluster’,’Sum of Squared Errors’])
    display(df_sse)

    keys = list(sse.keys())
    values = list(sse.values())

    plt.figure()
    plt.plot(keys, values)
    plt.xlabel(“Number of cluster – Kmean on dataraw _ group by”)

    # Add title and axis names
    plt.title(‘Within-Cluster-Sum of Squared Errors (WSS) for different values of k’)
    plt.xlabel(‘K cluster’)
    plt.ylabel(‘Sum of Squared Errors (WSS)’)

    plt.show()

  32. Nhu 2020年4月19日下午1:56 #

    我想对客户进行聚类。我使用了两种方法来处理同一个数据集。一种方法是我使用经济学中的RFM模型手动编码。另一种方法是使用Kmeans算法进行聚类。现在我想比较哪种方法更好。但我遇到了麻烦。我还没有弄清楚哪种方法会给出更好的结果。

    • Jason Brownlee 2020年4月20日凌晨5:22 #

      选择一个指标,设计一个测试框架,然后在测试框架中应用两种方法,看看哪种方法在您的指标上表现更好。

  33. Nhu 2020年4月20日晚上7:28 #

    非常感谢您

  34. Nhu 2020年4月27日凌晨5:12 #


    在对“客户细分”客户进行聚类后,我想将这些聚类可视化。我该怎么办?

  35. Nhu 2020年4月28日凌晨3:22 #

    是的,是的,是的。我想要成对散点图

  36. Nhu 2020年4月28日凌晨3:25 #

    我写了代码,但出现了“AttributeError:‘KMeans’ object has no attribute ‘labels’”
    但还是没能修复。
    # 模块
    import matplotlib.pyplot as plt
    from matplotlib.image import imread
    import pandas as pd
    import seaborn as sns
    from sklearn.datasets.samples_generator import (make_blobs,
    make_circles,
    make_moons)
    import numpy as np
    from sklearn.cluster import KMeans
    from sklearn.preprocessing import StandardScaler
    from sklearn.metrics import silhouette_samples, silhouette_score

    %matplotlib inline
    sns.set_context(‘notebook’)
    plt.style.use(‘fivethirtyeight’)
    from warnings import filterwarnings
    filterwarnings(‘ignore’)
    # Import the data
    df = pd.read_csv(‘Visualization_1.csv’)

    # Plot the data
    plt.figure(figsize=(6, 6))
    plt.scatter(df.iloc[:, 0], df.iloc[:, 1])
    plt.xlabel(‘Eruption time in mins’)
    plt.ylabel(‘Waiting time to next eruption’)
    plt.title(‘Visualization of raw data’);

    # Standardize the data
    X_std = StandardScaler().fit_transform(df)

    # Run local implementation of kmeans
    def cluster(n_clusters)
    km = Kmeans(n_clusters=2, max_iter=100)
    km.fit(X_std)
    centroids = km.centroids

    # Plot the clustered data
    fig, ax = plt.subplots(figsize=(6, 6))
    plt.scatter(X_std[km.labels == 0, 0], X_std[km.labels == 0, 1],
    c=’green’, label=’cluster 1′)
    plt.scatter(X_std[km.labels == 1, 0], X_std[km.labels == 1, 1],
    c=’blue’, label=’cluster 2′)
    plt.scatter(centroids[:, 0], centroids[:, 1], marker=’*’, s=300,
    c=’r’, label=’centroid’)
    plt.legend()
    plt.xlim([-2, 2])
    plt.ylim([-2, 2])
    plt.xlabel(‘Eruption time in mins’)
    plt.ylabel(‘Waiting time to next eruption’)
    plt.title(‘Visualization of clustered data’, fontweight=’bold’)
    ax.set_aspect(‘equal’);

  37. Nhu 2020年4月30日凌晨1:40 #

    非常感谢,非常感谢。

  38. meems 2020年5月19日凌晨1:45 #

    你好,我刚开始接触这些,但我的任务我不知道如何做
    使用pandas进行数据归一化
    a. 从数据集中减去每个特征的平均值。
    b. 减去均值后,另外将特征值除以其
    各自的“标准差”。
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    from sklearn import preprocessing
    #step 1
    col_names = [“Size”,”Bedrooms”,”Price”]#name cols
    #importing data
    df2 = pd.read_csv(“dataset2.txt”, header = None,skiprows=0, names= col_names)
    #print first 5 elements of Dataframe
    print(df2.head())
    print(df2.describe())#show some stats

    我不知道如何减去均值和标准差,请问你能告诉我怎么做吗?

  39. Malik Elam 2020年6月8日凌晨4:23 #

    Jason,您好,感谢您的文章。
    您是否建议对输入特征使用Sigmoid函数转换以使异常值更接近其他值的集合,因为异常值是极端值而不是错误?即 -1+2/(1+e^-ax);这将替换异常值并标准化数据。

    • Jason Brownlee 2020年6月8日上午6:19 #

      不完全是。也许可以尝试一下,看看它是否适合您的数据/模型/项目。

  40. sarah 2020年6月10日凌晨2:13 #

    嗨,Jason,

    您是否有关于如何归一化/缩放多元时间序列数据的教程?

    感谢您所有宝贵的指南,

  41. Bilal 2020年7月13日下午1:35 #

    你好,
    请告诉我preprocessing.normalize()背后的公式

  42. Dmitry 2020年8月13日凌晨2:25 #

    我不明白的是如何对预测数据集进行反向缩放,因为它与训练特征数据集具有不同的维度?

    • Jason Brownlee 2020年8月13日上午6:19 #

      使用scaler对象并调用inverse_transform()函数,然后传入预测值。

      目标变量的scaler接受一个列用于y或yhat – 相同的维度。

  43. Jaydeep Chauhan 2020年10月9日凌晨11:16 #

    大家好,
    您能否帮助我理解以下存储库中均值文件的计算方法?
    我得到了不同的值,对于同一个数据集。

    https://github.com/Veleslavia/EUSIPCO2017/tree/master/means

  44. Yao 2020年10月13日下午4:52 #

    嗨,Jason,
    非常感谢您的帖子,我觉得非常有帮助。

    我想问一下关于scaler的使用。例如,我正在做一个回归问题,我的输入X(10列,10万行)和目标y(1列,10万行)作为我的训练数据集。我使用了两个StandardScaler X_scaler和y_scaler分别对X和y进行缩放。由于我使用了缩放后的X和y进行模型拟合,我预计预测结果y_hat也会被缩放。对于训练,我可以很容易地将我的预测反向缩放到原始尺度,因为我有y_scaler。然而,对于实际预测,我只有新的数据集X’。如果我对X’进行缩放并将其输入我的模型,我预计会得到一个缩放后的预测。但是,我如何将我的预测反向缩放到原始尺度,因为它的维度可能与训练y不同?

    您能否帮助我解决这个问题?非常感谢!

    • Jason Brownlee 2020年10月14日上午6:13 #

      不客气。

      是的,您必须以与训练数据相同的方式缩放所有新数据。例如,输入数据。您也可以缩放训练数据中的目标,模型将学会预测缩放后的目标。然后,您可以对预测进行反向转换,以获得原始尺度。

      您必须确保您的训练数据集充分代表了数据,以便模型能够学习问题,并且转换能够捕捉数据的尺度。如果这很困难,您可以手动管理数据的缩放/转换(例如,在新的数据中将超出范围的值剪辑)。

      这有帮助吗?

  45. Fatima 2021年3月20日下午12:35 #

    Jason博士,您好,在这里的数据归一化示例中,
    用于归一化数据属性
    normalized_X = preprocessing.normalize(X)

    请问normalize函数使用的归一化(重缩放)函数或规则是什么?我能知道这项技术的详细信息吗?

    非常感谢

    • Jason Brownlee 2021年3月21日上午6:05 #

      如果归一化比不使用它能带来更好的模型性能,就使用归一化。这是最好的规则。

  46. San 2021年5月11日凌晨2:34 #

    我有一个数据集,我需要对其进行归一化,因为数据尺度不同。现在,有没有办法恢复到原始数据,也就是类似反归一化,回到具有不同尺度的数据?

    • Jason Brownlee 2021年5月11日上午6:44 #

      是的,您可以使用scaler对象直接进行反向转换,例如 scaler.inverse_transform()

  47. Hammed 2021年5月13日上午10:06 #

    各位好,我和我兄弟都很喜欢您的书,以及您在书中简化了很多东西。

    所以我的问题是关于数据集的归一化。我有一个大型数据集,其中有一个金额列,其值从-574617714.32到600000000.0,还有大约1000万笔交易(这只是一个样本)。

    我归一化了金额,并对其他一些特征使用了类别编码器。但当我想要预测新数据(未归一化或编码)的结果时,我的问题就出现了。对于编码数据,我使用了一个字典来存储编码值,然后用字典中的相应值来替换要预测的新数据中的值。

    如果我用sklearn归一化金额,它只会对新数据进行归一化,而不会考虑之前的minmax。如果我添加两行来表示min和max,结果仍然不同。

    我尝试使用“MaxAbsScaler().fit(dataset[[‘AMOUNT’]]).max_abs_”来检索拟合参数并将其存储在json或csv中,然后使用它来转换新数据的金额列,但仍然不起作用。

    我的问题是,如何存储用于训练数据归一化的参数,以便我可以使用它们来转换要预测的新数据?

    或者我只需要像您在一本书中展示的那样使用这个

    “dataset[‘AMOUNT’].apply(lambda x: (x – minmax[0]) / (minmax[1] – minmax[0]))”

    然后我定义min和max。我对此并不完全有信心,因为归一化金额的变化相当微不足道,与MaxAbsScaler相比。

    另一个问题是,由于列包含金额,其内容从负数到正数不等,哪种归一化或标准化最适合获得最佳结果?

    谢谢。

  48. Hammed 2021年5月14日晚上8:32 #

    谢谢,我会尝试一下。

  49. Ayesha 2021年7月14日凌晨5:11 #

    你好,非常棒的文章。
    我需要一些关于缩放的指导。
    我正在训练神经网络。我用了这样的缩放方式

    from sklearn import preprocessing
    scaler = preprocessing.StandardScaler().fit(x_train)
    X_train = scaler.transform(x_train)
    X_test=scaler.transform(Xv)
    scalerY = preprocessing.StandardScaler().fit(y_train.values.reshape(-1, 1))
    Y_train = scalerY.transform(y_train.values.reshape(-1, 1))
    Y_test=scalerY.transform(yv.values.reshape(-1, 1))

    但是我对这种技术是对还是错感到困惑。这种缩放方式为我提供了更好的结果,但当我使用StandardScaler缩放数据时,结果却非常糟糕。您能否在这方面指导我?谢谢

Leave a Reply

Machine Learning Mastery 是 Guiding Tech Media 的一部分,Guiding Tech Media 是一家领先的数字媒体出版商,专注于帮助人们了解技术。访问我们的公司网站以了解更多关于我们的使命和团队的信息。