分析方法:
查看样本样式
样本数值特征之间的量级差距
查看样本0 1分布情况--》 可能需要进行对多样本降采样 ; 可能需要对少样本 造样本(SMOT算法)
通过分析混淆矩阵 根据目标需求(需要准确率高点 还是回召率高点)找到最佳参数
本文的例程因为缺少csv文件和 KFold交叉验证没有解决 所以无法运行
'''
Created on
@author: hcl
'''
#分析用户欺诈案例
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
#from openpyxl.styles.alignment import horizontal_alignments
#*************没有这个csv文件 大概有30万条记录 29个特征 2种类别 所以一下程序没法运行
##############查看样本样式
data = pd.read_csv('creditcart.csv')
# data.head()
##############查看样本类别分布情况 会发现0样本接近30万个 1样本只有几百个
# count_classes = pd.value_counts(data['Class'],sort = True).sort_index()
# count_classes.plot(kind = 'bar')
# plt.title('Fraud class histogram')
# plt.xlabel('Class')
# plt.ylabel('Frequency')
###############数据种的‘Amount’特征 相对于其他特征高出几个量级 所以要对该特征纪念性标准归一化处理
# from sklearn.preprocessing import StandardScaler
# data['normAmount'] = StandardScaler().fit_transform(data['Amount'].reshape(-1,1)) #进行标准化操作 并添加到data种
# data = data.drop(['Time','Amount'],axis=1) #删除就旧特征
# print(data.head()) #查看样本头5行
##############解决样本不均衡方法1 抽取较多样本数量的样本 个数为 较少样本的个数 从而达到 1:1
# X = data.ix[:,data.columns != 'class'] #抽取不含class的样本 就相当于去除标签值以后的样本
# y = data.ix[:,data.columns == 'class'] #抽取标签值 就相当于 只含有样本标签
# number_records_fraud = len(data[data.Class == 1]) #获取样本标签为1 的样本数量
# fraud_indices = np.array(data[data.Class == 1].index) #获取样本标签为1 的样本标签的索引
#
# normal_indices = data[data.Class == 0].index #获取样本标签为0 的样本标签的索引
# random_normal_indices = np.random.choice(normal_indices,number_records_fraud,replace = False) #在正常样本索引normal_indices中随机抽取样本数量为number_records_fraud的样本
# random_normal_indices = np.array(random_normal_indices)
#
# under_sample_indices= data.