机器学习案例实战之信用卡欺诈检测——收获的技术
本文主要记录小白我自己在这个小项目中收获的技术点,
有一篇博客下写的特别好,这里直接附上链接https://blog.csdn.net/huahuaxiaoshao/article/details/85232089
1.#中文字体显示
plt.rc('font', family='SimHei', size=13)
2. pandas中的.value_counts(),很像python自带的Count(),但.value_counts()可以对Series里面的每个值进行计数并且排序,如果想用升序排列,可以加参数ascending=True,如果想得出的计数占比,可以加参数normalize=True
如:count_class = pd.value_counts(data['Class'], sort=True).sort_index()
3.数据归一化操作中,可以直接StandardScaler().fit_transform(要归一化的数据)
4.pandas中好像啥都要.values 没有括号,才可以喂给算法去fit
如:sta.fit_transform(data['Amount'].values.reshape(-1, 1)) ###如果这里不加.values 就会报错
5.
# data.ix[:,:]
# .ix弃用。请使用
# .loc用于基于标签的索引或
6.
下采样
目标:获得分类太多的数据和分类太少的数据相同数量的训练数据
方法:从分类多的数据中,随机取出与分类少数量数量相同的数据,然后进行混合,
进而进行下面的操作...
7.
过采样
用了SMOTE算法
from imblearn.over_sampling import SMOTE
其中有k近邻算法的思想,比如找到k个相近的邻居,将他们与随机找的x_i的距离排序,如果要将少数量的某一样本点增加5倍,
则取前5个相近的邻居,然后利用公式:x_new = x_i + rand(0,1)*(x~ - x_i) 其中x~分别去之前得到的5个样本,进而达到扩大样本数量的目的
8.
交叉验证
KFold
fold = KFold(要交叉验证数据集的个数,分为几份(默认3),是否每次验证要洗牌(默认shuffle=False))实例化
fold是一个可迭代对象,可以用枚举的方法获取其,索引和值
for iteration, indices in enumerate(fold, start=1):
pass
这里的iteration是第几次交叉验证的次数
indices是 “要交叉验证数据集的个数”,在该次交叉验证被划分的两部分(训练集+验证集)
9.
召回率和精准率
from sklearn.metrics import recall_score
recall = TP/(TP+FN) = recall_score(y_真实值,y_预测值)
precision = TP/(TP+FP)
10.
混淆矩阵
from sklearn.metrics import confusion_matrix
confusion_matrix(y_真实值,y_预测值)
11.
画图
plt.imshow(cm, interpolation='nearest', cmap=cmap)
cm存储图像,本项目中传的是混淆矩阵,其他默认值就行。。我也不太会。。。
12.
正则化惩罚cost function中所求得θ不要太大
l1 l2都可以 l2更平缓,l1有去除权重很小的特征的作用
min(loss + C*正则化)
13.
对逻辑回归(线性关系--->映射成逻辑值,sigmoid函数)设置不同的阈值,进而平衡其召回率和精准率
.ix is deprecated. Please use .loc for label based indexing or .iloc for positional indexing
翻译过来就是:
.ix弃用。请使用
.loc用于基于标签的索引或
.iloc用于位置索引