特征工程与选择

端到端机器学习

Joshua Stapleton

Machine Learning Engineer

特征工程

创建特征

  • 简化问题
  • 提升模型效率

技术

  • 修改现有特征
  • 设计新特征

收益

  • 更易部署、维护、训练
  • 提高可解释性

机器学习生命周期当前阶段:特征工程

端到端机器学习

归一化

  • 将数值特征缩放到 [0, 1]
  • 当特征量纲/范围不同尤其有用
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import Normalizer

# Split the data
X_train, X_test = train_test_split(df, test_size=0.2, random_state=42)
# Createnormalizer object, fit on training data, normalize, and transform test set
norm = Normalizer()
X_train_norm = norm.fit_transform(X_train)
X_test_norm = norm.transform(X_test)
端到端机器学习

标准化

  • 将数据缩放为均值=0、方差=1
  • 适用于假设均值与方差相近的算法
from sklearn.preprocessing import StandardScaler

# Split the data
X_train, X_test = train_test_split(df, test_size=0.2, random_state=42)
# Create a scaler object and fit training data to standardize it
sc = StandardScaler()
X_train_stzd = sc.fit_transform(X_train)
# Only standardize the test data
X_test_stzd = sc.transform(X_test)
端到端机器学习

什么是好的特征?

  • 使用相关特征
  • 预约当天的天气不应影响诊断

 

一张暴风雨天气的图片,展示特征选择中的相关性原则

  • 使用不相似(正交)的特征
  • 以月为单位的年龄与以年为单位的年龄冗余

 

一个展示特征选择中正交性原则的图示

端到端机器学习

sklearn.feature_selection

 

from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_selection import SelectFromModel
from sklearn.model_selection import train_test_split

# Splitting data into train and test subsets first to avoid data leakage X_train, X_test, y_train, y_test = train_test_split( heart_disease_df_X, heart_disease_df_y, test_size=0.2, random_state=42)
端到端机器学习

sklearn.feature_selection(续)

 

# Define and fit the random forest model
rf = RandomForestClassifier(n_jobs=-1, class_weight='balanced', max_depth=5)
rf.fit(X_train, y_train)

# Define and run feature selection model = SelectFromModel(rf, prefit=True) features_bool = model.get_support() features = heart_disease_df.columns[features_bool]
端到端机器学习

Vamos praticar!

端到端机器学习

Preparing Video For Download...