目录
数据预处理
当不同特征分布极度不均:
:分别为两类数据,其中
过采样
生成个2数据类型,使数分布均匀
SMOTE样本生成策略:
(1)对于少数类中每一个样本x,以欧氏距离为标准计算它到少数类样本集中所有样本的距离,得起k近邻。
(2)根据样本不平衡比例设置一个采样比例已确定采样倍率N,对于每一个少数类样本x,从起k近邻中随机选择若干个样本,假设选择的近邻为.
(3)对于每一个随机选出的近邻,分别与原样本按照如下的公式构建新的样本。
from imblearn.over_sampling import SMOTE
oversampler=SMOTE(random_state=0)
ov_features, ov_labels = oversampler.fit_sample(feature, label)
注:过采样召回率略低,但是精度较高,TN值较小
下采样
在1数据类型中取个数出来,使数据分布较均匀
注:下采样会有较高召回率,但是TN值也可能较大,引起误判,造成更大的工作量
同一特征数据波动范围较大:
归一化:除以最大值,使数据在[0, 1]上
标准化:[-1, 1],
from sklearn.preprocessing import StandardScaler
StandardScaler().fit_transform(data[column].reshape(-1, 1))
# -1的解释:‘-1’=shape[0]*shape[1]/(不为-1的那一个,这里为1)
交叉验证
取一部分原始数据为训练集,另一部分为测试集
用一部分特征为X,另一特征为y,不同交换,对比结果,求稳
正则惩罚(penalty):
取小值
注:L1需要添加一个solver='liblinear'否则会报错
混淆矩阵:
0 | FN (False Negatives) | FP(False Positives) |
1 | TN(True Negatives) | TP(True Positives) |
实际值/预测值 | 0 | 1 |
confusion_matrix(y_test, y_pred)
精度:
召回率:
通过对阈值threshold(计算sigmoid函数值,画区间确定0,1)的调整,获取较好的召回率和精度:
y_pred_proba = lr.predict_proba(X_test)
y_pred = y_pred_proba[:, 1] > threshold
常用为0.5,越小,宁可错杀一万也不放过一个,越大宁可放过一万也不错杀一个
函数
numpy.random.choice(a, size=None, replace=True, p=None)
# a: 当a为整数是,在[0, a)中取值,a为列表,随机在列表中取值
# size: 整型或整型元组,输出的形状,整型就是size个,详细使用查看帮助文档
numpy.concatenate((a1, a2, ....), axis=0, out=None)
# 将a2加到a1的新的一行后一列去,axis=None时,直接返回所有元素组成一维列表
sklearn.model_selection.train_test_split(*arrays, test_size=None, train_size=None, random_state=None, shuffle=True, stratify=None)
# *array:待拆分的集合,matrix或DataFrame型
# train_size:训练集大小,浮点型取值为(0, 1)为百分比,整型为具体数量,默认0.25
sklearn.model_selection.FKold
kf = KFold(n_splits, shuffle, random_state)
train_indexes, test_indexes = kf.split(X)
# 在将X分成n份,返回索引值[nxm]m为X的特征数