日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据特征预处理

發布時間:2025/5/22 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据特征预处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

特征處理是通過特定的統計方法(數學方法)將數據轉換成算法要求的數據。

  • 數值型數據:

    • 標準縮放:
      • 1、歸一化
      • 2、標準化
      • 3、缺失值
  • 類別性數據:one-hot編碼

  • 時間類型:時間的切分

sklearn特征處理API

  • sklearn.preprocessing

歸一化

特點:通過對原始數據進行變換把數據映射到(默認為[0,1])之間

公式:

注:作用于每一列,max 為一列的最大值,min為一列的最小值,那么x’’ 為最終結果,mx,mi分別為指定區間值默認mx為1,mi為0


根據公式:
計算特征1 第一列第一個:

x' = 90 - 60 / 90 - 60 = 1 x'' = 1(1 - 0) + 0 = 1 歸一化結果為 1

計算特征1 第一列第二個:

x' = 60 - 60 / 90 - 60 = 0 x'' = 0(1 - 0) + 0 = 0 歸一化結果為 0

計算特征1 第一列第三個:

x' = 75 - 60 / 90 - 60 = 0.5 x'' = 0.5(1 - 0) + 0 = 0.5 歸一化結果為 0.5

計算特征2 第二列第一個:

x' = 2 - 2 / 4 - 2 = 0 x'' = 0(1 - 0) + 0 = 0 歸一化結果為 0

計算特征2 第二列第二個:

x' = 4 - 2 / 4 - 2 = 1 x'' = 1(1 - 0) + 0 = 1 歸一化結果為 1

計算特征2 第二列第三個:

x' = 3 - 2 / 4 - 2 = 0.5 x'' = 0.5(1 - 0) + 0 = 0.5 歸一化結果為 0.5

計算特征3 第三列第一個:

x' = 10 - 10 / 15 - 10 = 0 x'' = 0(1 - 0) + 0 = 0 歸一化結果為 0

計算特征3 第三列第二個:

x' = 15 - 10 / 15 -10 = 1 x'' = 1(1 - 0) + 0 = 0 歸一化結果為 1

計算特征3 第三列第三個:

x' = 13 - 10 / 15 -10 = 0.6 x'' = 0.6(1 - 0) + 0 = 0.6 歸一化結果為 0.6

計算特征4 第四列第一個:

x' = 40 - 40 / 46 -40 = 0 x'' = 0(1 - 0) + 0 = 0 歸一化結果為 0

計算特征4 第四列第二個:

x' = 45 - 40 / 46 -40 = 0.83 x'' = 0.83(1 - 0) + 0 = 0.83 歸一化結果為 0.83

計算特征4 第四列第三個:

x' = 46 - 40 / 46 -40 = 1 x'' = 1(1 - 0) + 0 = 1 歸一化結果為 1

sklearn 歸一化API
sklearn歸一化API:sklearn.preprocessing.MinMaxScaler

MinMaxScaler 語法

MinMaxScaler(feature_range=(1, 0)…)

  • 每個特征縮放到給定返回(默認[0, 1])
函數參數返回值
MinMaxScaler.fit_transform(X)numpy array格式的數據[n_samples, n_features]轉換后的形狀相同的array
from sklearn.preprocessing import MinMaxScaler# 三個特征同等重要的時候:進行歸一化 def mm():"""歸一化處理1、實例化 MinMaxScaler2、通過 fit_transform 轉換:return: None"""# mm = MinMaxScaler() # 每個特征縮放到給定返回(默認[0, 1])mm = MinMaxScaler(feature_range=(2, 3)) # 特征縮放范圍 (2, 3)data = mm.fit_transform([[90, 2, 10, 40], [60, 4, 15, 45], [75, 3, 13, 46]])print(data)return Noneif __name__ == '__main__':mm()

代碼執行結果:

歸一化的目的:使得某一個特征對最終結果不會造成更大影響

歸一化缺點:異常點對最大值最小值影響太大
歸一化在特定場景下最大值最小值是變換的,另外,最大值與最小值非常容易受異常點影響,所以這種方法魯棒性較差,只適合傳統精確小數據場景。

標準化

1、特點:通過對原始數據進行交換把數據變換到均值為0,方差為1范圍內

2、公式:

注:作用于每一列,mean為平均值,σ為標準差

var 成為方差

其中:方差(考量數據的穩定性)

sklearn 特征化API
sklearn特征化API:scikit-learn.preprocessing.StandardScaler

  • StandardScaler(…)
    • 處理之后每列來說所有數據都聚集在均值0附近標準方差為1
函數參數返回值
StandardScaler.fit_transform(X)numpy array格式的數據[n_samples, n_features]轉換后的形狀相同的array
StandardScaler.mean_原始數據中每列特征的平均值
StandardScaler.std_原始數據每列特征的方差
def stand():"""標準化縮放1、實例化StandardScaler()2、通過fit_transform轉換:return: None"""std = StandardScaler()data = std.fit_transform([[1., -1., 3.], [2., 4., 2.], [4., 6., -1.]])print(data)return Noneif __name__ == '__main__':stand()

代碼執行結果:

總結:
歸一化:如果出現異常點,影響了最大值和最小值,那么結果會發生改變
標準化:如果出現異常點,由于具有一定數據量,少量的異常點對于平均值的影響并不大,從而方差改變較小。

缺失值處理方法

刪除如果每列或者行數據缺失值達到一定的比例,建議放棄整行或者整列
插補可以通過缺失值每行或者每列的平均值、中位數來填充

2、sklearn缺失值API: sklearn.preprocessing.Imputer

Imputer語法

Imputer(missing_values=‘NaN’, strategy=‘mean’, axis=0)

  • 完成缺失值插補
函數參數返回值
Imputer.fit_transform(X)numpy array個數的數據[n_samples, n_features]轉換后的形狀相同的array

關于 np.nan(np.NaN)
1、numpy的數組中可以使用np.nan/np.NaN來代替缺失值,屬于float類型

2、如果是文件中的一些缺失值,可以替換成nan,通過np.array轉換成float型的數組即可

SimpleImputer(add_indicator=False, copy=True, fill_value=None, missing_values=np.nan, strategy='mean', verbose=0)
  • add_indicator:如果該參數為True,則會在數據后面加入n列由0和1構成的同樣大小的數據,0表示所在位置非空,1表示所在位置為空。相當于一種判斷是否為空的索引。
  • copy:表示對原來沒有填充的數據的拷貝。
  • missing_values:一般情況下缺失值是 np.nan
  • strategy:指定填補策略,有以下四種策略
    • mean: 由該列的均值填充
    • median:中位數
    • most_frequent:眾數
    • constant:將空值填充為自定義的值,如果strategy=‘constant’,則填充fill_value的值。
  • verbose:控制詳細程度
from sklearn.impute import SimpleImputer import numpy as npdef im():"""缺失值處理1、初始化 SimpleImputer,指定“缺失值”,指定填補策略,指定行或列注:缺失值也可以是別的指定要替換的值2、調用 fit_transform:return: None"""# NaN, nanimp = SimpleImputer(add_indicator=False, copy=True, fill_value=None, missing_values=np.nan, strategy='mean', verbose=0)X = [[1, 2], [np.nan, 3], [7, 9]]data = imp.fit_transform(X)print(data)return Noneif __name__ == '__main__':im()

代碼執行結果:

注意:
隨著版本的更新,Imputer的引用方式也發生了變化,一開始的引用方式為

from sklearn.preprocessing import Imputer imputer = Imputer(strategy='mean')

更新后引用 SimpleImputer 來調用

from sklearn.impute import SimpleImputer imputer = SimpleImputer(strategy="mean")

總結

以上是生活随笔為你收集整理的数据特征预处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。