Please enable JavaScript.
Coggle requires JavaScript to display documents.
Data problem process (Preprocessing (Missing value(缺失值) (根据情况填充NaN, 用-999…
Data problem process
Preprocessing
Numeric features
scaling
To mean=0,std=1
(x-mean)/std
sklearn.preprocessing.StantardScaler
To[0,1]
sklearn.preprocessing.MinMaxScaler
(x-min)/(max-min)
缩短值之间的相对间隙
Log transform: np.log(1+x)
Raising to the power < 1 : np.sqrt(x)
1、常用于neural network
2、一定程度上处理了outliers
基于树的模型并不依赖scaling
但非基于树的模型非常依赖
outliers
用rank代替原数据
scipy.stats.rankdata
Winsorization(缩尾处理): clip取data range中的主要部分(如99%)
feature generation
prior knowledge
exploratory data analysis
eg: 把数值特征小数点后的部分拿出来做一列新特征,往往能区分人机操作
Categorical and ordinal features
Label encoding:数字化分类特征
Alphabetical:[S,C,Q]->[2,1,3]
Order of appearance:[S,C,Q]->[1,2,3] ( :red_flag:ordinal features着重采用)
Frequency encoding:[S,C,Q] -> [0.5,0.3,0.2]
通常在tree-based 模型表现好一些,但不绝对
目标依赖feature的线性关系的时候,表现比OHE好
One-hot encoding(OHE,热编码)
原特征:
pclass: [1,2,1,3]
根据其三种类别转化为3个特征:
pclass==1: [1,0,1,0]
pclass==2: [0,1,0,0]
pclass==3: [0,0,0,1]
可以用稀疏矩阵存储
pandas.get_dummies
sklearn.preprocessing.OneHotEncoder
可以多个此类特征联合热编码
通常在non-tree-based 模型表现好一些,但不绝对
category较多的时候,建议使用Label encoding。(特别是tree-based model,因为在RF这样的算法中,其他non-categorical features会很少被用到)
Datetime feature
根据需要提取特征:星期几、月份、季度、年份、时、分、秒、是否是假期、有意义的时间间隔等
coordinate feature
选取一些标志性的地点,将其他坐标数据到该点的距离作为新特征
借鉴该地的统计数据(比如该坐标人口数等)
Missing value(缺失值)
根据情况填充NaN
用-999,均值,中值填充
构造‘isnull’特征
用XGBoost处理NaN
clean features
duplicated features and rows
constant feature
feature_cnts = train.nunique(dropna = False)
constant_features = feature_cnts.loc[feature_cnts==1].index.tolist()
traintest.drop(constant_features, axis=1, inplace=True)
Images
可以从不同神经网络层提取特征
选取合适的pretrained network
Finetuning可以调整pretrained network
Data augment:比如旋转,加噪音等人工制作图片数据集
Text
Preprocessing
Lowercase
stemming
lemmatization
stopwords
Bag of words
TFiDF
Ngrams
每个单词提取为一个特征
缺点:向量会变得很大
优点:可解释
Word2vec
缺点:只有在特定情况才可解释
优点:向量相对较小;意义相近的词句会有相似的向量表示
pretrained
train/validation split(首选KFold)
如果在folds上效果差别较大
average scores from different KFold splits
用一个split来调参,其他用于evaluate
如果在验证集和测试集上的效果差别较大
检查验证集和测试集的分布是不是不同
检查是否过拟合
检查我们的train/validation split策略是否合理
关键在于mimic train/test split
Exploratory data analysis
building intuition(domain knowledge)
anonymized data
类型未知或经过人工加密
try to decode
:red_flag:guess the feature type
Visualizations
单特征分析
plt.scatter(x1, x2)
pd.scatter_matrix(df)
df.corr()
plt.matshow(…)
df.mean().sort_values().plot(style='.')
Histogram
Plot(index vs value)
statistics
特征间的关系
找pairs
Scatter plot
scatter matrix
Corrplot
找groups
Corrplot+clustering
Plot(index vs feature statistic)