資料的規範化——Pandas處理

郝hai發表於2024-04-07

資料標準化(歸一化)處理是資料探勘的一項基礎工作,不同評價指標往往具有不同的量綱和量綱單位,這樣的情況會影響到資料分析的結果,為了消除指標之間的量綱影響,需要進行資料標準化處理,以解決資料指標之間的可比性。 原始資料經過資料標準化處理後,各指標處於同一數量級,適合進行綜合對比評價。資料的規範化(Normalization)和歸一化(Normalization)是資料預處理中非常重要的步驟,對於資料分析、機器學習和深度學習等任務都具有重要的作用。首先,資料的規範化和歸一化可以消除資料特徵之間的量綱差異。在實際應用中,不同特徵往往具有不同的量綱和單位,例如身高可能以釐米為單位,體重可能以千克為單位。如果不對資料進行規範化或歸一化處理,那麼不同特徵之間的數值範圍差異會導致模型訓練過程中出現偏向性,從而影響模型的效能和泛化能力。其次,規範化和歸一化可以加速模型的收斂速度。在訓練過程中,如果特徵之間存在很大的數值差異,那麼模型需要更多的迭代次數才能找到合適的引數值。透過對資料進行規範化或歸一化處理,可以使得模型在更少的迭代次數內達到收斂,提高了模型訓練的效率。此外,規範化和歸一化還可以提高模型的穩定性和魯棒性。當資料經過處理後,模型對噪聲和異常值的敏感度降低,更容易適應各種資料分佈和情況,從而提高了模型的泛化能力,減少了過擬合的風險。

一、資料規範化方法

1.1 離散化(Discretization)

為解決特定的分類問題或為簡化分類模型的複雜度,有時需要採用特定標記將特徵原始取值進行離散化處理。離散化常常用在諸多管理實踐問題,如在成績預測中,將小於60分成績標記為C,將60至80之間的成績標記為B,將80至100之間的成績標記為A。

scores = [20, 70, 60, 100, 80, 66, 88, 92]
grades = []

for score in scores:
    if score < 60 and score >= 0:
        grades.append('C')
    elif score >= 60 and score < 80:
        grades.append('B')
    elif score >= 80 and score <= 100:
        grades.append('A')

print("原始分數:", scores)
print("離散化後的等級:", grades)

這種離散化的方法可以幫助我們更好地理解和處理資料,尤其是在需要將連續型資料轉換為離散型資料進行分類或分析的場景中。

1.2 最小-最大縮放(Min-Max Scaling)

# 方法一:使用 apply 函式
df_normalized = df.apply(lambda x: (x - x.min()) / (x.max() - x.min()))

# 方法二:使用 MinMaxScaler 類
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
df_normalized = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)

1.3 標準化(Standardization)

# 方法一:使用 apply 函式
df_standardized = df.apply(lambda x: (x - x.mean()) / x.std())

# 方法二:使用 StandardScaler 類
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
df_standardized = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)

二、資料規範化示例

2.1 離散化

import pandas as pd

# 建立一個包含年齡資料的DataFrame
data = {
    'ID': [1, 2, 3, 4, 5],
    'Age': [25, 35, 45, 55, 65]
}
df = pd.DataFrame(data)

# 定義離散化的區間和對應的標籤
bins = [0, 10, 20, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100]
labels = ['<10', '10-20', '20-30', '30-35', '35-40', '40-45', '45-50', '50-55', '55-60', '60-65', '65-70', '70-75', '75-80', '80-85', '85-90', '90-95', '95-100']

# 使用cut函式進行離散化處理
df['Age_Group'] = pd.cut(df['Age'], bins=bins, labels=labels)

# 列印輸出結果
print("原始資料:")
print(df[['ID', 'Age']])
print("\n離散化後的年齡分組:")
print(df[['ID', 'Age_Group']])

2.2 歸一化

import pandas as pd
data = {'A': [10, 20, 30, 40, 50],
        'B': [100, 200, 300, 400, 500]}
df = pd.DataFrame(data)

# 方法一:使用 apply 函式
df_normalized = df.apply(lambda x: (x - x.min()) / (x.max() - x.min()))
print("Normalized DataFrame (Method 1):")
print(df_normalized)
# 方法二:使用 MinMaxScaler 類
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
df_normalized = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)
print("\nNormalized DataFrame (Method 2):")
print(df_normalized)

2.3 標準化

import pandas as pd
data = {'A': [10, 20, 30, 40, 50],
        'B': [100, 200, 300, 400, 500]}
df = pd.DataFrame(data)

# 方法一:使用 apply 函式
df_standardized = df.apply(lambda x: (x - x.mean()) / x.std())
print("Standardized DataFrame (Method 1):")
print(df_standardized)

# 方法二:使用 StandardScaler 類
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
df_standardized = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)
print("\nStandardized DataFrame (Method 2):")
print(df_standardized)

三、綜合應用

總結

資料的規範化和歸一化是資料預處理中不可或缺的重要步驟,它能夠消除資料特徵之間的量綱差異,加速模型的收斂速度,提高模型的穩定性和魯棒性,從而有效地改善了資料分析和機器學習任務的結果。在實際應用中,選擇合適的規範化或歸一化方法,並結合資料的特點和任務的要求,可以更好地發揮資料預處理的作用,提升模型的效能和效果。資料規範化可以提高模型精度:規範化可以讓不同維度之間的特徵在數值上有一定比較性,可以大大提高分類器的準確性;提升收斂速度:資料規範化後,最優解的尋優過程明顯會變得平緩,更容易正確的收斂到最優解。

參考文獻

  1. 分清規範化(標準化、歸一化)、離散化、正則化
  2. 使用python做資料合規化

相關文章