逻辑回归,也叫作 logistic 回归。虽然名字中带有“回归”,但它实际上是分类方法,主要解决的是二分类问题,当然它也可以解决多分类问题,只是二分类更常见一些。

应用场景:

  • 广告点击率
  • 是否为垃圾邮件
  • 是否患病
  • 金融诈骗
  • 虚假账号

原理

在逻辑回归中使用了 Logistic 函数,也称为 Sigmoid 函数。Sigmoid 函数是在深度学习中经常用到的函数之一,函数公式为:

函数的图形如下所示,类似 S 状:

在 sklearn 中,我们使用 LogisticRegression() 函数构建逻辑回归分类器,函数里有一些常用的构造参数:

penalty:惩罚项,取值为 l1 或 l2,默认为 l2。当模型参数满足高斯分布的时候,使用 l2,当模型参数满足拉普拉斯分布的时候,使用 l1;

solver:代表的是逻辑回归损失函数的优化方法。有 5 个参数可选,分别为 liblinear、lbfgs、newton-cg、sag 和 saga。默认为 liblinear,适用于数据量小的数据集,当数据量大的时候可以选用 sag 或 saga 方法。 max_iter:算法收敛的最大迭代次数,默认为 10。 n_jobs:拟合和预测的时候 CPU 的核数,默认是 1,也可以是整数,如果是 -1 则代表 CPU 的核数。

模型评估指标

举个例子,对于机场安检中恐怖分子的判断,就不能采用准确率对模型进行评估。恐怖分子的比例是极低的,因此当用准确率做判断时,如果准确率高达 99.999%,就说明这个模型一定好么?

其实正因为现实生活中恐怖分子的比例极低,就算不能识别出一个恐怖分子,也会得到非常高的准确率。因为准确率的评判标准是正确分类的样本个数与总样本数之间的比例。因此非恐怖分子的比例会很高,就算识别不出来恐怖分子,正确分类的个数占总样本的比例也会很高,也就是准确率高。实际上应该更关注恐怖分子的识别。

数据预测的四种情况:TP、FP、TN、FN。第二个字母 P 或 N 代表预测为正例还是负例,P 为正,N 为负。第一个字母 T 或 F 代表的是预测结果是否正确,T 为正确,F 为错误。‘

所以四种情况分别为:

  1. TP:预测为正,判断正确;
  2. FP:预测为正,判断错误;
  3. TN:预测为负,判断正确;
  4. FN:预测为负,判断错误。

精确率 P = TP/ (TP+FP),对应上面恐怖分子这个例子,在所有判断为恐怖分子的人数中,真正是恐怖分子的比例。

召回率 R = TP/ (TP+FN),也称为查全率。代表的是恐怖分子被正确识别出来的个数与恐怖分子总数的比例。

有一个指标综合了精确率和召回率,可以更好地评估模型的好坏。这个指标叫做 F1,用公式表示为:

F1 作为精确率 P 和召回率 R 的调和平均,数值越大代表模型的结果越好。

实例

信用卡诈骗分析

import pandas as pd
from matplotlib import pyplot as plt
import seaborn as sns
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix, precision_recall_curve
import itertoolsclass CreditFraud:# 混淆矩阵可视化def plot_confusion_matrix(self, cm, classes, normalize=False, title='Confusion matrix', cmap=plt.cm.Blues):plt.rcParams['font.sans-serif'] = ['SimHei']plt.figure()plt.imshow(cm, interpolation='nearest', cmap=cmap)plt.title(title)plt.colorbar()tick_marks = np.arange(len(classes))plt.xticks(tick_marks, classes, rotation=0)plt.yticks(tick_marks, classes)thresh = cm.max() / 2for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):plt.text(j, i, cm[i, j],horizontalalignment='center',color='white' if cm[i, j] > thresh else 'black')plt.tight_layout()plt.ylabel('True label')plt.xlabel('Predicted label')plt.show()# 显示模型评估结果def show_metrics(self, cm):tp = cm[1, 1]fn = cm[1, 0]fp = cm[0, 1]tn = cm[0, 0]print('精确率:{:.3f}'.format(tp / (tp + fp)))print('召回率:{:.3f}'.format(tp / (tp + fn)))print('f1值:{:.3f}'.format(2 * (((tp / (tp + fp)) * (tp / (tp + fn))) / ((tp / (tp + fp)) + (tp / (tp + fn))))))# 绘制精确率-召回率曲线def plot_precision_recall(self, recall, precision):plt.rcParams['font.sans-serif'] = ['SimHei']plt.step(recall, precision, color='b', alpha=0.2, where='post')plt.fill_between(recall, precision, step='post', alpha=0.2, color='b')plt.plot(recall, precision, linewidth=2)plt.xlim([0.0, 1])plt.ylim([0.0, 1.05])plt.xlabel('召回率')plt.ylabel('精确率')plt.title('精确率-召回率 曲线')plt.show()# 显示交易笔数,欺诈交易笔数def show(self, data):# 设置plt正确显示中文plt.rcParams['font.sans-serif'] = ['SimHei']# 绘制类别分布plt.figure()ax = sns.countplot(x='Class', data=data)plt.title('类别分布')plt.show()num = len(data)num_fraud = len(data[data['Class'] == 1])print('总交易笔数:', num)print('诈骗交易笔数:', num_fraud)print('诈骗交易比例:{:.6f}'.format(num_fraud / num))# 诈骗和正常交易可视化f, (ax1, ax2) = plt.subplots(2, 1, sharex='True', figsize=(10, 8))bins = 50ax1.hist(data.Time[data.Class == 1], bins=bins, color='deeppink')ax1.set_title('诈骗交易')ax2.hist(data.Time[data.Class == 0], bins=bins, color='deepskyblue')ax2.set_title('正常交易')plt.xlabel('时间')plt.ylabel('交易次数')plt.show()def logic_regress(self, data):self.show(data)# 对Amount进行标准化data['Amount_Norm'] = StandardScaler().fit_transform(data['Amount'].values.reshape(-1, 1))# 特征选择y = np.array(data.Class.tolist())# y = data.Class.valuesdata_new = data.drop(['Time', 'Amount', 'Class'], axis=1)X = np.array(data_new.values)trian_x, test_x, train_y, test_y = train_test_split(X, y, test_size=0.1, stratify=y, random_state=33)# 逻辑回归分类clf = LogisticRegression(n_jobs=-1)clf.fit(trian_x, train_y)predict_y = clf.predict(test_x)# 预测样本的置信分数score_y = clf.decision_function(test_x)# 计算混淆矩阵cm = confusion_matrix(test_y, predict_y)class_names = [0, 1]# 显示混淆矩阵self.plot_confusion_matrix(cm, classes=class_names, title='逻辑回归 混淆矩阵')# 显示模型评估分数self.show_metrics(cm)# 计算精确率、召回率、阈值用于可视化precision, recall, thresholds = precision_recall_curve(test_y, score_y)self.plot_precision_recall(recall, precision)if __name__ == '__main__':data_ori = pd.read_csv(r'C:\My_data\Study\数据分析实战\credit_fraud\creditcard.csv')print(data_ori.describe())credit = CreditFraud()credit.logic_regress(data_ori)

近期有很多朋友通过私信咨询有关Python学习问题。为便于交流,点击蓝色自己加入讨论解答资源基地

逻辑回归分类——信用卡诈骗检测!这才是干货!相关推荐

  1. 数据挖掘—逻辑回归分类—信用卡欺诈分析

    文章目录 1.分析目的: 2.掌握要点: 3.构建逻辑回归分类器 4.模型评估指标 5.精确度和召回率(不平衡数据衡量指标) 6.案例分析: 1.分析目的: 信用卡欺诈的危害性大,如何通过遗忘的交易数 ...

  2. 逻辑回归对信用卡欺诈进行分析

    文章目录 逻辑回归分类器 模型评估指标 混淆矩阵 使用逻辑回归对信用卡欺诈分析进行预测 逻辑回归分类器  逻辑回归,也叫作 logistic 回归.虽然名字中带有"回归",但它实际 ...

  3. 基于逻辑回归的讽刺文本检测

    Python 语言程序设计实验2021年秋"实验报告 挑战五 逻辑回归用于讽刺文本检测 一.实验目的及要求 实验目的 了解训练分类模型的基本原理: 掌握模型解释及模型改进流程: 熟悉讽刺文本 ...

  4. java基础巩固-宇宙第一AiYWM:为了维持生计,编程语言番外篇之机器学习(项目预测模块总结:线性回归算法、逻辑回归分类算法)~整起

    机器学习 一.机器学习常见算法(未完待续...) 1.算法一:线性回归算法:找一条完美的直线,完美拟合所有的点,使得直线与点的误差最小 2.算法二:逻辑回归分类算法 3.算法三:贝叶斯分类算法 4.算 ...

  5. python利用什么写模板_Python利用逻辑回归分类实现模板

    Logistic Regression Classifier逻辑回归主要思想就是用最大似然概率方法构建出方程,为最大化方程,利用牛顿梯度上升求解方程参数. 优点:计算代价不高,易于理解和实现. 缺点: ...

  6. spark java 逻辑回归_逻辑回归分类技术分享,使用Java和Spark区分垃圾邮件

    原标题:逻辑回归分类技术分享,使用Java和Spark区分垃圾邮件 由于最近的工作原因,小鸟很久没给大家分享技术了.今天小鸟就给大家介绍一种比较火的机器学习算法,逻辑回归分类算法. 回归是一种监督式学 ...

  7. R语言使用逻辑回归分类算法

    R语言使用逻辑回归分类算法 逻辑回归属于概率统计的分类算法模型的算法,是根据一个或者多个特征进行类别标号预测.在R语言中可以通过调用logit函数执行逻辑回归分类算法并预测输出概率.通过调用glm函数 ...

  8. python机器学习基础05——sklearn之逻辑回归+分类评价指标

    文章目录 逻辑回归 逻辑回归的损失函数 逻辑回归API 分类模型的评价指标 混淆矩阵 准确率 召回率(较多被使用) 精确率 f1-score:精确率和召回率的调和平均数 AUC 逻辑回归 逻辑回归是经 ...

  9. 树模型与线性模型的区别 决策树分类和逻辑回归分类的区别 【总结】

    树模型与线性模型的区别在于: (一)树模型 ①树模型产生可视化的分类规则,可以通过图表表达简单直观,逐个特征进行处理,更加接近人的决策方式   ②产生的模型可以抽取规则易于理解,即解释性比线性模型强. ...

  10. 编程实践-逻辑回归分类算法--马的疝气病症分类

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 逻辑回归分类 @dataset:马的疝气病症数据集Horse Col ...

最新文章

  1. 十二、进程的同步与互斥
  2. 怎样学好python-零基础如何学好Python?
  3. ASP.NET基础教程-SqlConnection对象-使用连接事件
  4. Ajax请求导出Excel的问题
  5. idea编辑器关闭重复代码检查
  6. 打包无法识别lombok
  7. 渲染优化 lock unlock
  8. jni c java互相调用_通过JNI实现Java和C++的相互调用
  9. proxychains-ng 工作原理分析
  10. “迭代期内无变更”与研发心理学(承诺管理,MosCoW方法)
  11. ureport2 mysql_springboot整合UReport2
  12. WiFi共享大师 去广告
  13. 计算机网络--使用网络协议分析器捕捉和分析协议数据包
  14. 安卓按键命令库教程(紫猫版)
  15. Python开发 CDN查询子域名查询
  16. 资产管理运维一体化 接入IOT、BIM的设备数字智慧化管理
  17. 流行和声(2)Major6和弦
  18. 无人机自由飞行测试台 FFT GYRO 600
  19. cas1082287-99-7齐岳生物花菁染料合成线路
  20. 音频频谱图(自定义View——进阶篇2)

热门文章

  1. 360打开html加载不出来,360浏览器显示正在解析主机打不开网页如何处理
  2. The eighth of Word-Day
  3. javascript/html breakout game 打砖块游戏(附代码)
  4. 使用iTunes制作iPhone6s plus铃声
  5. 伊利诺伊大学香槟分校计算机工程,伊利诺伊大学香槟分校计算机工程排名第8(2020年TFE美国排名)...
  6. 惜时间_惜时间的作文
  7. 【灵修】应对“三季人”,多活十余年(2012-1-14)
  8. html页面在线预览PDF文件
  9. 思科模拟器服务器登录显示什么,思科模拟器服务器远程登录
  10. android 上传图片视频教程,秒拍怎么上传长视频 秒拍APP拍长视频并上传图文教程...