动手学数据分析 Task5

2023-10-26

一、逻辑回归

LogisticRegression(penalty='l2', dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver='liblinear', max_iter=100, multi_class='ovr', verbose=0, warm_start=False, n_jobs=1)

参数:

=> penalty : str, ‘l1’ or ‘l2’

LogisticRegression和LogisticRegressionCV默认就带了正则化项。penalty参数可选择的值为"l1"和"l2",分别对应L1的正则化和L2的正则化,默认是L2的正则化。

在调参时如果我们主要的目的只是为了解决过拟合,一般penalty选择L2正则化就够了。但是如果选择L2正则化发现还是过拟合,即预测效果差的时候,就可以考虑L1正则化。

另外,如果模型的特征非常多,我们希望一些不重要的特征系数归零,从而让模型系数稀疏化的话,也可以使用L1正则化。

penalty参数的选择会影响我们损失函数优化算法的选择。即参数solver的选择,如果是L2正则化,那么4种可选的算法{‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’}都可以选择。

但是如果penalty是L1正则化的话,就只能选择‘liblinear’了。这是因为L1正则化的损失函数不是连续可导的,而{‘newton-cg’, ‘lbfgs’,‘sag’}这三种优化算法时都需要损失函数的一阶或者二阶连续导数。而‘liblinear’并没有这个依赖。

=> dual : bool

对偶或者原始方法。Dual只适用于正则化相为l2 liblinear的情况,通常样本数大于特征数的情况下,默认为False

=> tol : float, optional

迭代终止判据的误差范围。

=> C : float, default: 1.0

C为正则化系数λ的倒数,通常默认为1。设置越小则对应越强的正则化。

=> fit_intercept : bool, default: True

是否存在截距,默认存在

=> intercept_scaling : float, default 1.

仅在正则化项为"liblinear",且fit_intercept设置为True时有用。

=> class_weight : dict or ‘balanced’, default: None

class_weight参数用于标示分类模型中各种类型的权重,可以不输入,即不考虑权重,或者说所有类型的权重一样。如果选择输入的话,可以选择balanced让类库自己计算类型权重,

或者我们自己输入各个类型的权重,比如对于0,1的二元模型,我们可以定义class_weight={0:0.9, 1:0.1},这样类型0的权重为90%,而类型1的权重为10%。

如果class_weight选择balanced,那么类库会根据训练样本量来计算权重。某种类型样本量越多,则权重越低;样本量越少,则权重越高。

当class_weight为balanced时,类权重计算方法如下:n_samples / (n_classes * np.bincount(y))

n_samples为样本数,n_classes为类别数量,np.bincount(y)会输出每个类的样本数,例如y=[1,0,0,1,1],则np.bincount(y)=[2,3] 0,1分别出现2次和三次

二、随机森林

sklearn.ensemble.RandomForestClassifier(n_estimators=10, criterion='gini', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=’auto’, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, bootstrap=True, oob_score=False, n_jobs=1, random_state=None, verbose=0, warm_start=False, class_weight=None)

参数:
n_estimators : integer, optional (default=10) 整数,可选择(默认值为10)。
弱学习器的最大迭代次数,太小,容易欠拟合,太大,又容易过拟合。
criterion: string, optional (default=”gini”) 字符串,可选择(默认值为“gini”)。
★衡量分裂质量的性能函数,默认是基尼不纯度,熵达到峰值的过程要相对慢一些。
max_depth : integer or None, optional (default=None) 整数或者无值,可选的(默认为None)
决策树最大深度,如果模型样本量多,特征也多的情况下,推荐限制这个最大深度,具体的取值取决于数据的分布。常用的可以取值10-100之间。
min_samples_split: int, float, optional (default=2) 整数,浮点数,可选的(默认值为2)
★ 内部节点再划分所需最小样本数。如果某节点的样本数少于,则不会继续再尝试选择最优特征来进行划分。 默认是2.如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。
min_samples_leaf: int, float, optional (default=1) 整数,浮点数,可选的(默认值为1)
★ 叶子节点最少样本数。如果样本量数量级非常大,则推荐增大这个值。
min_weight_fraction_leaf: float, optional (default=0.) 浮点数,可选的(默认值是0.0)
★叶子节点最小的样本权重和。就是不考虑权重问题。一般来说,如果我们有较多样本有缺失值,或者分类树样本的分布类别偏差很大,就会引入样本权重,这时我们就要注意这个值了。
max_features :int, float, string or None, optional (default=”auto”) 整数,浮点数,字符串或者无值,可选的(默认值为"auto")
★ 最大特征数
max_leaf_nodes : int or None, optional (default=None) 整数或者无值,可选的(默认值为None)
★最大叶子节点数。限制最大叶子节点数,可以防止过拟合。以最优的方法使用max_leaf_nodes来生长树。最好的节点被定义为不纯度上的相对减少。如果为None,那么不限制叶子节点的数量。
min_impurity_decrease : float, optional (default=0.) 浮点数,可选的(默认值为0)
★如果节点的分裂导致的不纯度的下降程度大于或者等于这个节点的值,那么这个节点将会被分裂。
min_impurity_split: float, 浮点数
★节点划分最小不纯度。
bootstrap : boolean, optional (default=True) 布尔值,可选的(默认值为True)
★建立决策树时,是否使用有放回抽样。
oob_score : bool (default=False) bool,(默认值为False)
★ 建议用True,袋外分数反应了一个模型拟合后的泛化能力。
n_jobs: integer, optional (default=1) 整数,可选的(默认值为1)
★用于拟合和预测的并行运行的工作(作业)数量。如果值为-1,那么工作数量被设置为核的数量
random_state: int, RandomState instance or None, optional (default=None) 整数,RandomState实例,或者为None,可选(默认值为None)
★是随机数生成器使用的种子; 如果是RandomState实例,random_state就是随机数生成器;如果为None,则随机数生成器是np.random使用的RandomState实例。
verbose : int, optional (default=0) 整数,可选的(默认值为0)
★控制决策树建立过程的冗余度。
warm_start : bool, optional (default=False) 布尔值,可选的(默认值为False)
★当被设置为True时,重新使用之前呼叫的解决方案,用来给全体拟合和添加更多的估计器,反之,仅仅只是为了拟合一个全新的森林。

三、模型评估

3.1 k折交叉验证

from sklearn.model_selection import cross_val_score1
lr = LogisticRegression(C=100) scores = cross_val_score(lr, X_train, y_train, cv=10)
##result:
array([0.82352941, 0.79411765, 0.80597015, 0.80597015, 0.8358209 , 0.88059701, 0.72727273, 0.86363636, 0.75757576, 0.71212121])

将原始数据分成K组(一般是均分),将每个子集数据分别做一次验证集,其余的K-1组子集数据作为训练集,这样会得到K个模型,用这K个模型最终的验证集的分类准确率的平均数作为此K-CV下分类器的性能指标。K一般大于等于2,实际操作时一般从3开始取,只有在原始数据集合数据量小的时候才会尝试取2。本例中采用十折交叉验证,步骤如下:

  1. 将数据集分成十份,轮流将其中9份作为训练数据,1份作为测试数据,进行试验。每次试验都会得出相应的正确率。
  2. 10次的结果的正确率的平均值作为对算法精度的估计,一般还需要进行多次10折交叉验证(例如10次10折交叉验证),再求其均值,作为对算法准确性的估计

3.2 混淆矩阵

在这里插入图片描述

from sklearn.metrics import confusion_matrix1
lr = LogisticRegression(C=100) 
lr.fit(X_train, y_train)
pred = lr.predict(X_train)
confusion_matrix(y_train, pred)

##result:
array([[350,  62],             #对应上图TN,FP
       [ 71, 185]], dtype=int64)   #对应上图FN,TP

3.3 ROC曲线

from sklearn.metrics import roc_curve1
fpr, tpr, thresholds = roc_curve(y_test, lr.decision_function(X_test)) 
plt.plot(fpr, tpr, label="ROC Curve") plt.xlabel("FPR") 
plt.ylabel("TPR (recall)") 
# 找到最接近于0的阈值 close_zero = np.argmin(np.abs(thresholds)) 
plt.plot(fpr[close_zero], tpr[close_zero], 'o', markersize=10, label="threshold zero", fillstyle="none", c='k', mew=2) plt.legend(loc=4)

在这里插入图片描述
横轴FPR: 1-TNR,1-Specificity, FPR越大,预测正类中实际负类越多。

纵轴TPR:Sensitivity(正类覆盖率),TPR越大,预测正类中实际正类越多。

理想目标:TPR=1,FPR=0,即图中(0,1)点,故ROC曲线越靠拢(0,1)点,越偏离45度对角线越好,Sensitivity、Specificity越大效果越好。即,ROC曲线以下部分的面积越大越好。

理想情况下,TPR应该接近1,FPR应该接近0。

ROC曲线上的每一个点对应于一个threshold,对于一个分类器,每个threshold下会有一个TPR和FPR。

比如Threshold最大时,TP=FP=0,对应于原点;Threshold最小时,TN=FN=0,对应于右上角的点(1,1)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

动手学数据分析 Task5 的相关文章

随机推荐

  • sublime 自动补全

    preferences gt settings 在右边窗口最后位置添加 auto complete true 出现打过的单词 auto match enabled true 自动补全括号或引号
  • 【满分】【华为OD机试真题2023 JS】开心消消乐

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 开心消消乐 知识点编程基础深搜广搜 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 给定一个N行M列的二维矩阵 矩阵中每个位置的数字取值为0或1 矩阵示例如 1
  • 《思考的艺术》——书评与思维导图

    抽空读了下这本书 先说说整体感觉 内容基本满意 书的布局非常不喜欢 先吐槽吧 目录太过宽泛 给人造成 只见树木不见林 的感觉 目前只列出了各章节的标题在目录中 但每个章节包含很多的小标题 各标题的字体 大小都一样 很难区分逻辑 层次关系 如
  • 银行业务系统数据库设计与实现

    银行业务系统数据库的设计与实现 1 创建数据库银行业务系统数据库 bankDB Drop database if EXISTS bankDB 删除bindDB数据库 即使没有数据库也不报错 CREATE database bankDB 创建
  • preprocessing.LabelEncoder()使用

    preprocessing LabelEncoder 使用 e g 1 from sklearn import preprocessing le preprocessing LabelEncoder arr gf 1 2 3 wom wom
  • 基于Zigbee的智能路灯控制系统的Qt操作界面

    本项目已经用于参加过比赛 在加之本人确实有点忙 所以拖到现在才发 这里只详细说明关于Qt控制界面的相关功能说明 本来是19年写的 代码量有点大 具体的地方 我自己都可能有点遗忘了 不过还是发出来供大家参考使用 因为当初时间紧迫可能代码格式不
  • 华为OD题目: 投篮大赛

    package com darling boot order od od9 import com sun org apache bcel internal generic IF ACMPEQ import java util 投篮大赛 知识
  • Android Studio 创建项目不自动生成BuildConfig文件

    今天在AS上新建项目发现找不到BuildConfig文件 怎么clear都不行 通过多方面查找发现原来gradle版本不同造成的 Gradle 8 0默认不生成 BuildConfig 文件 如上图 8 0版本是没有source文件夹 上图
  • 软件测试-网站测试

    按照以下六个顺序进行测试 1 黑盒测试 在测试网站时 首先应该建立状态表 第5章 把每个网页当作不同的状态 超级链接当作状态之间的连接线 完整的状态图有利于对整个任务更好地进行审视 查找具体网页缺陷的思路 文本 把网页文本当作文档对待 根据
  • 无线基本概述(二)

    1 一些参数 MAC MAC 即Medium MediaAccess Control 介质访问控制 是数据链路层的一部分 MAC地址是烧录在NetworkInterfaceCard 即网卡 简称NIC 里的 它也叫硬件地址 是由48位 即b
  • 队列的基本运算实现

    队列 queue 队列是一种先进先出 first in first out FIFO 的线性表 它只允许在表的一端 队尾 rear 插入元素 而在另一端 队头 front 删除元素 插入操作称为入队或进队 删除操作称为出队或离队 队列示意图
  • matlab读jpg有三个通道,图像为“灰度图像”

    最近用matlab读取 灰度图 jpg格式 居然有三个通道 且灰度值还不一样 那么这是为什么呢 1 灰度图 其实是 灰度图 概念的问题 并不是灰色的图片就是灰度图 正常来说灰度图是某个波段的成像 是由ccd对该波段对应波长的光线的强度感应形
  • 健康保健产品爬虫:Python爬虫获取保健品信息和用户评价

    目录 第一部分 选择目标网站 第二部分 分析网站结构和查询参数
  • 经纬恒润与辉羲智能达成战略投资与业务合作,加速产业智能化进程

    近日 经纬恒润战略投资辉羲智能 并与辉羲智能签署战略合作协议 双方将聚焦未来智慧出行 共同打造基于国产高性能SoC的自动驾驶量产解决方案 助力客户快速实现包括轻地图城市NOA在内的高阶自动驾驶功能量产落地 目前自动驾驶规模化处于全面爆发前夕
  • Nightingale滴滴夜莺监控系统入门(三)--页面功能说明

    Nightingale滴滴夜莺监控系统入门 三 功能模块 V3 4 1 用户资源中心 资产管理系统 任务执行中心 监控告警系统 监控看图 监控大盘 告警策略 部署客户端 生产环境开放服务端端口 部署客户端 这章节主要是介绍夜莺的功能使用 各
  • k8s的安装

    我这里使用vmware创建了三台虚拟机 k8s的虚拟机建议最少2核 4G内存 我的电脑配置不高采用的2核 3G的配置 安装k8s之前需要先安装docker docker的安装参考 docker的安装及使用 docker的安装和使用 骑士99
  • ubuntu16.4虚拟机开机,进入tty1命令终端,无法进入桌面问题始末

    现象 1 ubuntu虚拟机开机频繁出现error failed to start network manager 2 进入tty1 vm login 分析 1 回想到前一天编译工程 由于 lib i386 linux gnu下缺少libu
  • visual studio code导入自定义模块(pycharm中能够运行的文件,vs code报错:未找到指定模块)

    一 先看下目录结构 二 在main py中导入Utils中的模块 直接导入即可 from Utils custom event parse import CustomEventParse 三 在custom event parse py中导
  • [运维

    READS SQL DATA 是 MySQL 存储过程和函数中的一种权限修饰符 用于标识该存储过程或函数只读取数据库的数据而不修改它 这个修饰符通常用于声明存储过程或函数的权限 以告知数据库管理系统该过程或函数不会对数据库进行写操作 从而允
  • 动手学数据分析 Task5

    动手学数据分析 Task5 一 逻辑回归 二 随机森林 三 模型评估 3 1 k折交叉验证 3 2 混淆矩阵 3 3 ROC曲线 一 逻辑回归 LogisticRegression penalty l2 dual False tol 0 0