逻辑回归与scikit-learn

欢迎关注本人的微信公众号AI_Engine

LogisticRegression

算法原理

  • 一句话概括:逻辑回归假设数据服从伯努利分布,通过极大化似然函数(损失函数)的方法,运用梯度下降或其他优化算法来求解参数,来达到将数据二分类的目的。
  • 定义:逻辑回归(Logistic Regression)是一种用于解决二分类(0 or 1)问题的机器学习方法,用于估计某种事物的可能性(不是概率)。比如某用户购买某商品的可能性,某病人患有某种疾病的可能性,以及某广告被用户点击的可能性等。 注意,这里用的是“可能性”,而非数学上的“概率”,logisitc回归的结果并非数学定义中的概率值,不可以直接当做概率值来用。该结果往往用于和其他特征值加权求和,而非直接相乘。
  • 区别:逻辑回归(Logistic Regression)与线性回归(Linear Regression)都是一种广义线性模型(generalized linear model)。逻辑回归假设因变量y服从伯努利分布,而线性回归假设因变量y服从高斯分布。因此与线性回归有很多相同之处,如果去除sigmoid映射函数的话,逻辑回归算法就是一个线性回归。可以说,逻辑回归是以线性回归为理论支持的,但是逻辑回归通过sigmoid函数引入了非线性因素,因此可以轻松处理二分类问题。
  • 函数:sigmoid函数是逻辑回归中的假设函数,正是因为sigmoid函数与线性回归的结合才使得逻辑回归具有二分类的作用。sigmoid表达式与曲线如下所示:
    在这里插入图片描述
    在这里插入图片描述
  • 决策边界:阈值的方程。当阈值为0.5时,对于sigmoid函数来说z=0就是该模型的决策边界。
  • 损失函数:在逻辑回归中,最常用的是代价函数是交叉熵(Cross Entropy)
  • 特征离散化:工业界很少直接将连续值作为LR模型的特征输入,而是将连续特征值离散化为一系列的0、1特征交给LR模型。其优势如下:
     
    • 离散特征的增加和减少都很容易,易于模型的快速迭代;
    • 稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展;
    • 离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰;
    • 逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合;
    • 离散化后可以进行特征交叉,由M+N个变量变为M * N个变量,进一步引入非线性,提升表达能力;
    • 特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问;
    • 特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险。

实例

def build_train_model(x, y):
    length_sample = len(x)
    simple_weight = np.ones(shape=(length_sample,))
    # simple_weight[:length_sample/2] = 2
    model = LogisticRegression(penalty='l2', C=1.0, solver='sag', max_iter=3000, multi_class='ovr')
    model.fit(x, y, simple_weight)
    return model


def cross_val(x, y):
    skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=Config.seed)
    model = LogisticRegression(penalty='l2', C=1.0, solver='sag')
    result = cross_val_score(model, x, y, cv=skf)
    print(result)


def report_evaluation_metrics(y_true, y_pred):
    accuracy = accuracy_score(y_true=y_true, y_pred=y_pred)
    precision = precision_score(y_true=y_true, y_pred=y_pred, labels=[0, 1], pos_label=1)
    recall = recall_score(y_true=y_true, y_pred=y_pred, labels
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值