阿里云天池 金融风控训练营 · Task 4 建模与调参学习笔记

本文介绍了阿里云天池金融风控训练营的学习内容,重点讲解了逻辑回归模型的判定边界、代价函数与梯度下降,并探讨了模型评估方法和调参策略。在模型选择上强调了考虑数据类型、训练速度和数据敏感性。调参方法包括贪心、网格搜索和贝叶斯调参,特别提到了贝叶斯调参在实际项目中的应用。此外,还分享了关于模型评价标准的理解和学习过程中的思考与总结。
摘要由CSDN通过智能技术生成

本学习笔记为阿里云天池金融风控训练营的学习内容,学习链接为:https://tianchi.aliyun.com/specials/activity/promotion/aicampdocker

1、学习知识点概要

在这里插入图片描述

2、学习内容1

2.1逻辑回归模型

这里呢我只讲一个我认识比较多的模型,相较于其他模型,逻辑回归模型是我们很早就开始认识,也是比较容易的,对一个模型的认识还得去用过你才会知道,所以实践才是检验真理的唯一标准。

总述:逻辑回归是应用非常广泛的一个分类机器学习算法,它将数据拟合到一个logit函数(或者叫做logistic函数)中,从而能够完成对事件发生的概率进行预测。

在这里插入图片描述
比较浅显的说法就是说根据离散的点分布拟合出的直线进行预测下一个点在直线上
但是真正的比较科学的说法的逻辑回归还是有很多种模式的
其中包括判定边界代价函数与梯度下降2

2.1.1判定边界

边界的种类:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
面对这种较为复杂的点分布,不是一般的拟合直线而是包括各种曲线。
这种时候需要用到Andrew Ng教授的课程例子
参考:机器学习系列(1)_逻辑回归初步

2.1.2代价函数与梯度下降

所谓的代价函数Cost Function,其实是一种衡量我们在这组参数下预估的结果和实际结果差距的函数,比如说线性回归的代价函数定义为:
在这里插入图片描述
但是这会引发代价函数为“非凸”函数的问题,简单一点说就是这个函数有很多个局部最低点
上述的Cost Function对于逻辑回归是不可行的,需要其他形式的Cost Function来保证逻辑回归的成本函数是凸函数。
以下是一个适合逻辑回归的代价函数
在这里插入图片描述
参考:机器学习系列(1)_逻辑回归初步
:

2.1.3代码顺序

导入数据——数据处理——梯度下降——判定边界
代码部分
参考:机器学习系列(1)_逻辑回归初步

from numpy import loadtxt, where
from pylab import scatter, show, legend, xlabel, ylabel
 
#load the dataset
data = loadtxt('/home/HanXiaoyang/data/data1.txt', delimiter=',')
 
X = data[:, 0:2]
y = data[:, 2]
 
pos = where(y == 1)
neg = where(y == 0)
scatter(X[pos, 0], X[pos, 1], marker='o', c='b')
scatter(X[neg, 0], X[neg, 1], marker='x', c='r')
xlabel('Feature1/Exam 1 score')
ylabel('Feature2/Exam 2 score')
legend(['Fail', 'Pass'])
show()
def sigmoid(X):
    '''Compute sigmoid function '''
    den =1.0+ e **(-1.0* X)
    gz =1.0/ den
    return gz
def compute_cost(theta,X,y):
    '''computes cost given predicted and actual values'''
    m = X.shape[0]#number of training examples
    theta = reshape(theta,(len(theta),1))
    
    J =(1./m)*(-transpose(y).dot(log(sigmoid(X.dot(theta))))- transpose(1-y).dot(log(1-sigmoid(X.dot(theta)))))
    
    grad = transpose((1./m)*transpose(sigmoid(X.dot(theta))- y).dot(X))
    #optimize.fmin expects a single value, so cannot return grad
    return J[0][0]#,grad
def compute_grad(theta, X, y):
    '''compute gradient'''
    theta.shape =(1,3)
    grad = zeros(3)
    h = sigmoid(X.dot(theta.T))
    delta = h - y
    l = grad.size
    for i in range(l):
        sumdelta = delta.T.dot(X[:, i])
        grad[i]=(1.0/ m)* sumdelta *-1
    theta.shape =(3,)
    return  grad
def predict(theta, X):
    '''Predict label using learned logistic regression parameters'''
    m, n = X.shape
    p = zeros(shape=(m,1))
    h = sigmoid(X.dot(theta.T))
    for it in range(0, h.shape[0]):
        if h[it]>0.5:
            p[it,0]=1
        else:
            p[it,0]=0
    return p
#Compute accuracy on our training set
p = predict(array(theta), it)
print'Train Accuracy: %f'%((y[where(p == y)].size / float(y.size))*100.0)

2.2模型评估方法

数据集的划分条件

  1. 训练集和测试集的分布要与样本真实分布一致,即训练集和测试集都要保证是从样本真实分布中独立同分布采样而得
  2. 训练集和测试集要互斥

数据集的划分方法
留出法,交叉验证法和自助法
留出法

留出法是直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个作为测试集T。需要注意的是在划分的时候要尽可能保证数据分布的一致性,即避免因数据划分过程引入额外的偏差而对最终结果产生影响。为了保证数据分布的一致性,通常我们采用分层采样的方式来对数据进行采样。

Tips: 通常,会将数据集D中大约2/3~4/5的样本作为训练集,其余的作为测试集。

②交叉验证法

k折交叉验证通常将数据集D分为k份,其中k-1份作为训练集,剩余的一份作为测试集,这样就可以获得k组训练/测试集,可以进行k次训练与测试,最终返回的是k个测试结果的均值。交叉验证中数据集的划分依然是依据分层采样的方式来进行。

对于交叉验证法,其k值的选取往往决定了评估结果的稳定性和保真性,通常k值选取10。

当k=1的时候,我们称之为留一法

③自助法

我们每次从数据集D中取一个样本作为训练集中的元素,然后把该样本放回,重复该行为m次,这样我们就可以得到大小为m的训练集,在这里面有的样本重复出现,有的样本则没有出现过,我们把那些没有出现过的样本作为测试集。

进行这样采样的原因是因为在D中约有36.8%的数据没有在训练集中出现过。留出法与交叉验证法都是使用分层采样的方式进行数据采样与划分,而自助法则是使用有放回重复采样的方式进行数据采样

【重要】数据集划分总结

对于数据量充足的时候,通常采用留出法或者k折交叉验证法来进行训练/测试集的划分;
对于数据集小且难以有效划分训练/测试集时使用自助法;
对于数据集小且可有效划分的时候最好使用留一法来进行划分,因为这种方法最为准确

2.3模型评价标准

具体可参见Task1笔记

3、学习问题与解答

3.1 模型的选择上

  1. 根据数据的类型
  2. 根据训练模型的速度和对算法的要求
  3. 根据训练模型对数据的敏感情况

总结:
可以通过记录模型的优缺点,然后根据自己的数据进行比对两到三个模型,再通过将数据代入模型,通过最终结果选择最终的模型,这是我作为机器学习小白的模型选择方法,大神可以忽略。当然最终结果可以参考模型的评价-auc。

3.2 调参方法

贪心调参网格搜索调参贝叶斯调参共三种调参手段,
本项目重点使用贝叶斯调参进行简单优化,在实际操作的过程中可以参考调参思路进行优化,不必拘泥于以上教程所写的具体实例。

3.3 时间问题

  • 机器学习的调参部分是非常耗时且耐磨的一个阶段,需要非常有耐心,因为关系到结果
  • 不要因为调参调不好就放弃

4、学习思考与总结(三点)

一、在调参那个部分真的很容易出bug,还是要坚持去调参才能有一个好结果,特别是当调参结果是你想要的结果的时候你会觉得一切都是值得的,所以时间很重要,调参也很重要,不要因为害怕时间太重要而不调参~

二、模型选择上的话还是要多看看论文,毕竟别人用过的模型会将结果写在论文上,你可以直接参考结果,从而省去了运行的时间。

三、不管是模型也好还是调参也好,最终都是要奔着模型评价也就是AUC的结果好,所以理解好AUC也是十分重要的。

参考


  1. 阿里云天池 金融风控-Task4 ↩︎

  2. 机器学习系列(1)_逻辑回归初步 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值