二值化處理:將細粒度的度量轉化成粗粒度的度量,使得特征的差異化更大。
from sklearn.datasets import load_iris import pandas as pd X,y = load_iris(return_X_y=True) df_X = pd.DataFrame(X,columns=list("ABCD")) from sklearn.preprocessing import Binarizer df_X["A"].describe() bn = Binarizer(threshold=5.843333) df_X["A"] = bn.transform(df_X["A"].values.reshape(-1,1))
特征多項式交互:捕獲特征之間的相關性
from sklearn.datasets import load_iris import pandas as pd X,y = load_iris(return_X_y=True) df_X = pd.DataFrame(X,columns=list("ABCD")) from sklearn.preprocessing import PolynomialFeatures pnf = PolynomialFeatures(degree=2,interaction_only=True) temp = pnf.fit_transform(df_X[["A","B"]].values) for i,column in enumerate(list("EFGH")): df_X[column] = temp[:,i]
數據分布傾斜的處理:
log變化:log變化傾向於拉高那些落在較低的幅度范圍內自變量的取值,壓縮那些落在較高的幅度范圍內自變量的取值,log變化能夠穩定數據的方差,使數據的分布接近於正太分布並使得數據與分布的均值無關。Box_Cox變換也有相似的效果,出現負數,使用常數進行偏移。
from sklearn.datasets import load_iris import pandas as pd import numpy as np X,y = load_iris(return_X_y=True) df_X = pd.DataFrame(X,columns=list("ABCD")) df_X["A"].hist(bins=10) df_X["log_A"] = np.log10(df_X["A"]) df_X["log_A"].hist(bins=10)