1. 程式人生 > 其它 >k近鄰6-特徵預處理

k近鄰6-特徵預處理

1 什麼是特徵預處理

1.1 特徵預處理定義

通過一些轉換函式將特徵資料轉換成更加適合演算法模型的特徵資料過程

為什麼:特徵的單位或者大小相差較大,或者某特徵的方差相比其他的特徵要大出幾個數量級,容易影響(支配)目標結果,使得一些演算法無法學習到其它的特徵
目標:用到一些方法進行無量綱化,使不同規格的資料轉換到同一規格

1.2 特徵預處理方式

  • 歸一化
  • 標準化

1.3 特徵預處理API

sklearn.preprocessing

2 歸一化

  • 定義:
    • 對原始資料進行變換把資料對映到(預設為[0,1])之間

作用於每一列,max為一列的最大值,min為一列的最小值,那麼X’’為最終結果,mx,mi分別為指定區間值預設mx為1,mi為0

  • API:
    • sklearn.preprocessing.MinMaxScaler (feature_range=(0,1)… )
    • 引數:feature_range -- 自己指定範圍,預設0-1
  • 總結:
    • 魯棒性比較差(容易受到異常點的影響)
    • 只適合傳統精確小資料場景(用的不多)
  • 例項
    • 例項化MinMaxScalar
    • 通過fit_transform轉換
import pandas as pd
from sklearn.preprocessing import MinMaxScaler

def minmax_demo():
    """
    歸一化演示
    :return: None
    """
    data = pd.read_csv("./data/dating.txt")
    print(data)
    # 1、例項化一個轉換器類
    transfer = MinMaxScaler(feature_range=(2, 3))
    # 2、呼叫fit_transform
    data = transfer.fit_transform(data[['milage','Liters','Consumtime']])
    print("最小值最大值歸一化處理的結果:\n", data)

    return None

返回結果:

milage     Liters  Consumtime  target
0     40920   8.326976    0.953952       3
1     14488   7.153469    1.673904       2
2     26052   1.441871    0.805124       1
3     75136  13.147394    0.428964       1
..      ...        ...         ...     ...
998   48111   9.134528    0.728045       3
999   43757   7.882601    1.332446       3

[1000 rows x 4 columns]
最小值最大值歸一化處理的結果:
 [[ 2.44832535  2.39805139  2.56233353]
 [ 2.15873259  2.34195467  2.98724416]
 [ 2.28542943  2.06892523  2.47449629]
 ..., 
 [ 2.29115949  2.50910294  2.51079493]
 [ 2.52711097  2.43665451  2.4290048 ]
 [ 2.47940793  2.3768091   2.78571804]]

3 標準化

  • 定義:
    • 對原始資料進行變換把資料變換到均值為0,標準差為1範圍內

作用於每一列,mean為平均值,σ為標準差

  • API:
    • sklearn.preprocessing.StandardScaler( )
  • 總結:
    • 異常值影響小
    • 適合現代嘈雜大資料場景(用的多)
  • 案例:
    • 例項化StandardScaler
    • 通過fit_transform轉換
import pandas as pd
from sklearn.preprocessing import StandardScaler

def stand_demo():
    """
    標準化演示
    :return: None
    """
    data = pd.read_csv("dating.txt")
    print(data)
    # 1、例項化一個轉換器類
    transfer = StandardScaler()
    # 2、呼叫fit_transform
    data = transfer.fit_transform(data[['milage','Liters','Consumtime']])
    print("標準化的結果:\n", data)
    print("每一列特徵的平均值:\n", transfer.mean_)
    print("每一列特徵的方差:\n", transfer.var_)

    return None

返回結果:

 milage     Liters  Consumtime  target
0     40920   8.326976    0.953952       3
1     14488   7.153469    1.673904       2
2     26052   1.441871    0.805124       1
..      ...        ...         ...     ...
997   26575  10.650102    0.866627       3
998   48111   9.134528    0.728045       3
999   43757   7.882601    1.332446       3

[1000 rows x 4 columns]
標準化的結果:
 [[ 0.33193158  0.41660188  0.24523407]
 [-0.87247784  0.13992897  1.69385734]
 [-0.34554872 -1.20667094 -0.05422437]
 ..., 
 [-0.32171752  0.96431572  0.06952649]
 [ 0.65959911  0.60699509 -0.20931587]
 [ 0.46120328  0.31183342  1.00680598]]
每一列特徵的平均值:
 [  3.36354210e+04   6.55996083e+00   8.32072997e-01]
每一列特徵的方差:
 [  4.81628039e+08   1.79902874e+01   2.46999554e-01]