悠悠楠杉
Python数据标准化实战:从原理到sklearn预处理
data = pd.DataFrame({
'titlelen': [12, 18, 15, 9],
'keywords': [3, 5, 4, 2],
'contentlen': [1200, 3500, 2800, 800]
})
Z-score标准化
scaler = StandardScaler()
scaleddata = scaler.fittransform(data[['content_len']])
MinMax标准化
minmax = MinMaxScaler()
minmaxdata = minmax.fittransform(data[['keywords']])
2.2 文本特征的特殊处理
标题标准化建议:
- 先进行长度统计再MinMax标准化
- 保留标题的离散特征(如是否包含问号)
关键词矩阵处理:python
from sklearn.feature_extraction.text import CountVectorizer
vectorizer = CountVectorizer()
keywordsmatrix = vectorizer.fittransform([
"Python,数据分析",
"机器学习,深度学习",
"sklearn,预处理"
])
三、生产环境最佳实践
- 流水线集成python
from sklearn.pipeline import Pipeline
from sklearn.ensemble import RandomForestClassifier
pipeline = Pipeline([
('scaler', StandardScaler()),
('clf', RandomForestClassifier())
])
- 异常值处理策略
- 正文长度超过3个标准差时使用Winsorize处理
- 关键词缺失时采用中位数填充
- 分布式大数据处理python
from sklearn.externals.joblib import parallel_backend
with parallelbackend('dask'): scaler.fit(largedataset)
四、不同场景的标准化选择
| 特征类型 | 推荐方法 | 注意事项 |
|----------------|-------------------|------------------------|
| 标题长度 | RobustScaler | 抗异常值 |
| 关键词TF-IDF | Normalizer | 行向量单位化 |
| 正文词向量 | MaxAbsScaler | 保持稀疏性 |
| 用户停留时间 | QuantileTransformer | 非正态分布适用 |
五、常见问题解决方案
问题1:标准化后特征解释性下降
- 解决方案:建立特征反向映射表
- 示例:记录原始关键词频次的统计描述
问题2:线上/线下数据尺度不一致
- 最佳实践:保存训练时的scaler对象
python
import joblib
joblib.dump(scaler, 'model/scaler_v1.pkl')
问题3:分类特征混杂处理
- 处理方法:使用ColumnTransformerpython
from sklearn.compose import ColumnTransformer
preprocessor = ColumnTransformer(
transformers=[
('num', StandardScaler(), ['content_len']),
('cat', OneHotEncoder(), ['category'])
])