Part1 特征选择
思路:每个特征方差分析、特征之间相关性分析、特征与目标输出之间相关性分析。
1)设置一个方差阈值,没有达到这个方差阈值的特征都会被丢弃。
from sklearn.feature_selection import VarianceThreshold
sel = VarianceThreshold(threshold=0.9)
sel.fit_transform(data)
2)两两特征之间相关性分析
data.corr()
3)DataFrame 与某一 DataFrame/Series 的相关性分析
data.corrwith(data.volume)
4)SelectKBest 选择排名前 k 个的特征 (过滤式选择。对于回归问题,使用 f_regression指标;对于分类问题,可以使用chi2 或者 f_classif 指标)
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest,chi2
iris = load_iris()
X, y = iris.data, iris.target
X_new = SelectKBest(chi2, k=3).fit_transform(X, y)
5)SelectPercentile 选择排名在前 k%的特征(过滤式选择。对于回归问题,使用f_regression 指标;对于分类问题,可以使用chi2 或者 f_classif 指标)
6) 树模型的特征选择 (嵌入式选择。)
from sklearn.feature_selection import SelectFromModel
from sklearn.tree import ExtraTreeRegressor
lrm = ExtraTreeRegressor(random_state=10).fit(X,y)
print(lrm.featureimportances)
model = SelectFromModel(lrm, prefit=True)
X_new = model.transform(X)
7)线性模型的特征选择 (嵌入式选择。)
from sklearn.feature_selection import SelectFromModel
from sklearn.svm import LinearSVC
lsvc = LinearSVC(C=0.01, penalty="l1", dual=False).fit(X, y)
model = SelectFromModel(lsvc, prefit=True)
print(lsvc.coef_)
X_new = model.transform(X)
8)递归进行特征选择 (包裹式选择。通过交叉验证自动调整特征的数量)
from sklearn.svm import SVC
from sklearn.model_selection import StratifiedKFold
from sklearn.feature_selection import RFECV # 通过交叉验证来对的特征进行排序
svc = SVC(kernel="linear")
rfecv = RFECV(estimator=svc, step=1, cv=StratifiedKFold(2),scoring='accuracy')
rfecv.fit(X, y)
print("最优特征数 : %d" % rfecv.nfeatures)
Part2 离散变量 one-hot 编码
import pandas as pd
pd.get_dummies(data['MessageType'],prefix='MessageType')
Part3 缺失值处理
1) 缺失值数量统计
data.isnull().sum().sort_values()
2)缺失值补全 一般连续变量采用平均数,离散变量采用众数
Mean_cols = data.mean()
data = data.fillna(Mean_cols)
3)丢弃含有缺失值的行
data.dropna(axis =1,how='all')
Part4 特征缩放
1)标准化 使每列均值为 0, 方差为 1
1.1)方法 1
from sklearn import preprocessing
import numpy as np
X_scaled = preprocessing.scale(data)
print(X_scaled.mean(axis=0),X_scaled.std(axis=0))
1.2)方法 2
scaler = preprocessing.StandardScaler()
X_scaled = scaler.fit_transform(data)
2)归一化 缩放到 0-1
min_max_scaler = preprocessing.MinMaxScaler()
X_train_minmax = min_max_scaler.fit_transform(data)
本文为原创文章,转载请标明出处。
网友评论