【笔记】实用机器学习 – 模型整合
李沐老师实用机器学习笔记: Model Combination 5.1 方差和偏差 5.2 Bagging 5.3 Boosting 5.4 Stacking 模型整合(Model Combination) 授课材料 ?️ 授课视频: 授课视频【斯坦福21秋季:实用机器学习中文版】_哔哩哔哩_bilibili 5.1 方差和偏差 5.2 Bagging 5.3 Boosting 5.4 Stacking ? 课件: 讲义下载地址 7 - Model Combination Bias and variance Bagging Boosting Stacking 偏差(bias)和方差(variance) 定义 参考自: https://zhuanlan.zhihu.com/p/412268381 泛化误差可分解为偏差、方差与噪声之和。 偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了算法本身的拟合能力。 方差度量了同样大小的训练集的变动所导致的学习性能变化,即刻画了数据扰动所造成的影响。 噪声则表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度。 偏差度量的是单个模型的学习能力,而方差度量的是同一个模型在不同数据集上的稳定性。 设计机器学习模型时,我们需要考虑: 准。bias表示模型相对真实模型的差异。想要低bias,需要复杂化模型,增加参数,但是容易过拟合造成high variance。low…
【笔记】实用机器学习 – 机器学习模型
李沐老师实用机器学习笔记: Machine Learning Model 3.1 机器学习模型概览 ML Model Overview ?️ 授课视频: 授课视频【斯坦福21秋季:实用机器学习中文版】_哔哩哔哩_bilibili ? 课件: 讲义下载地址 机器学习算法的类型 监督学习:有label的训练数据 (最常使用) 半监督学习:有label和无label的数据都用来训练,例如,self-trianing 无监督学习:使用无label的数据进行训练,例如,聚类,密度估计 强化学习:使用交互式的观测,最大化奖惩 监督学习的元素 模型:有一系列可以训练的参数,能把输入映射为输出 损失函数(loss):测量模型的输出和实际label的差距 目标(objective): 优化模型的目标,例如,最小化loss 优化(optimization):用来实现目标的算法,例如,SGD 3.2 决策树 ?️ 授课视频: 授课视频【斯坦福21秋季:实用机器学习中文版】_哔哩哔哩_bilibili ? 课件: 讲义下载地址 这里课程介绍的很简洁,详细的介绍请参考我们的文章 (Wan-Chi Siu, Xue-Fei Yang, Li-Wen Wang, Jun-Jie Huang and Zhi-Song Liu, “Introduction to Random…
【笔记】实用机器学习 – Data 爬虫
网页数据的抓取-爬虫 实验环境 OS: windows 11 Python 3.6 Chrome (我的版本是 98.0.4758.102) 使用的python工具是 selenium. 从https://chromedriver.chromium.org/home下载对应版本的chromedriver。我的chrome版本是98,所以chromedriver也是98。把解压出来的chromedriver.exe 放到工程目录下。 参考文章: https://selenium-python-zh.readthedocs.io/en/latest/getting-started.html 测试样例 from selenium import webdriver options = webdriver.ChromeOptions() options.add_argument('headless') driver = webdriver.Chrome(executable_path="./chromedriver.exe", chrome_options=options) driver.get("https://www.baidu.com/") print(driver.title) driver.close() 流程: 首先打开一个chrome浏览器。指定chromedriver的地址 "./chromedriver.exe"。打开百度网页,输出题目。 通过百度获取天气 xpath 可以通过chrome里右键单击所需元素“检查”,后右键单击元素选择“复制”==》“复制xpath” from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import WebDriverWait…
【笔记】实用机器学习 – Data III
李沐老师实用机器学习笔记: Data III 2.2 数据清理 数据往往不是完美的,经常存在很多错误,包括 丢失某些特征,异常值等, 好的机器学习模型应该容忍这些错误。 使用存在错误的数据训练模型,模型可能会收敛,但会影响精度和训练速度,而且,对于新收集的数据,也可能带来不利的影响。 因此,应当数据应该尽可能的干净。 ?️ 授课视频: 2.2 数据清理【斯坦福21秋季:实用机器学习中文版】_哔哩哔哩_bilibili ? 课件: 讲义下载地址 数据错误的类型 Outliers 离群值: 某一些值与其他的观测值显著不同 违背规则:例如,价值应当大于0 违背模式:例如,singlefamily 写成了 singlefamily, 中间多了 找出数据中存在的错误的方法 异常值检测 对于异常值的检测,我们可以使用boxplot。首先我们找出中值,并计算出25~75%的区间。在图上,这个区间是蓝色或棕色的矩形。我们找出上下1.5倍矩形框之外的值,这些值通常情况下是有问题(错误)的值。 基于规则的检测 我们可以制定规则来找出错误, 依赖性约束:基于邮编,我们可以验证城市名称。基于纳税号,我们可以验证公司名称 拒绝性(Denial)约束:例如,如果有纳税号,电话号码通常不为空 基于模式的检测 句法模式:例如检测到eng(简写),我们就知道此项应该为English 字符。 语义模式:国家应该有首都,如果国家检测到斯坦福,斯坦福没有首都,因此无效 我们通常情况下可以使用图形化界面帮助我们指定规则,这里可以使用数据工程师常用的软件,例如Trifacta(如果需要使用的话,需要进一步学习)。 2.2 数据变换 机器学习算法需要固定长度,条件固定,理想分布的输入数据。这要求了我们需要提前预处理数据。 ?️ 授课视频: 2.3 数据变换【斯坦福21秋季:实用机器学习中文版】_哔哩哔哩_bilibili ? 课件: 讲义下载地址 实数值 归一化0到1…
【笔记】实用机器学习 – Data II
李沐老师实用机器学习笔记: Data II 1.3 网页数据的抓取 网页数据的抓取是获取训练数据的一个重要的方式。与爬虫不同,数据抓取是为了获取特定的信息,而非爬取整个网页的内容。 ?️ 授课视频: 1.3 网页数据抓取【斯坦福21秋季:实用机器学习中文版】_哔哩哔哩_bilibili ? 课件: 讲义 工具 通常情况下,网站都会有防护措施,防止机器爬取数据。因此我们一般要使用 headless browser 像selenium。 而且,我们还需要大量的IP,一旦ip被禁止,我们可以换IP继续抓取数据。 案例学习 房屋价格的抓取 (省略),使用云平台,可以方便的更换ip,而且机器要求不高,价格不贵。 法律问题 数据抓取本身并不违法 但是,我们要避免抓取敏感数据:(1)需要登陆才能访问的数据,一般比较敏感。(2)不要爬取有版权的信息,(3)网站声明不允许爬取。 如果用做商业用途请咨询律师 1.4 数据标注 ?️ 授课视频: 1.4 数据标注【斯坦福21秋季:实用机器学习中文版】_哔哩哔哩_bilibili ? 课件: 讲义 流程图 只有部分标签,没钱,不想人工标注数据:半监督学习 如果仅有一小部分的数据,可以使用半监督学习进行数据标注。这里我们的假设是: 数据有连续性:拥有相似特征的样本有相同的标签 聚类性:数据有聚类的特性,同一类有相同的标签 流体假设:数据的复杂度比输入的维度要小 自学习 首先,我们先用有限的标签训练一个模型。然后,我们用模型去预测未标记的数据,对于高置信的预测样本,我们把他们融合到标记的数据中,再继续训练我们的模型。 这里我们可以使用更深的模型,或者多个模型做集合预测。因为这里的深度学习模型只是用来打标签,并不会用来实际部署。 只有部分标签,不差钱,可以标注数据:众包标注 可以使用类似于Amazon Mechanical Turk的众包平台,人工标记大量数据。需要注意的是: 用户标注页面要尽可能地简单:越简单,对标记人员的要求越低,就可以找到更多的标记人员,就可以拿到更低的价格。比如,对于一个365类的分类问题,可以简化为365个二分类问题,标注人员只需要回答是或者否。 花费…
【笔记】实用机器学习 – Data I
李沐老师实用机器学习学习笔记,数据I 1.1 课程介绍 工业界有很多机器学习的应用, 例如传统的制造业中,可以利用传感器,自动找出出现问题的设备 ?️ 授课视频: 跟李沐学AI的个人空间_哔哩哔哩_Bilibili ? 课件: Syllabus - Practical Machine Learning 机器学习工作流: 定义问题: 找出最关键的问题,在一个项目中,最能产生效果的问题 数据:收集高质量的数据,需要考虑隐私问题 训练模型:模型现在越来越复杂,成本越来越高 部署模型:为了实时化 监控:要不断的监控,可能存在偏向性问题 机器学习的角色: 软件设计工程师: 开发维护数据流,模型训练和服务流 领域专家:有商业眼光,发现问题 数据科学家:全栈能力,数据挖掘,模型训练和部署 机器学习专家:模型定制化,模型调优 1.2 数据获取 外部数据集 数据集的三种类型: 学术数据集:干净,简单,但是选择不多,通常是小规模的 比赛数据集:接近于真实的机器学习应用。缺点是简单,数量少 原始数据:有更大的灵活性,但需要更多的预处理 生成数据集 使用GAN 仿真 数据增广
TLSC (Test-time Local Statistics Converter)
Revisiting Global Statistics Aggregation for Improving Image Restoration (消除图像复原中的“misalignment”,性能大幅提升) Paper: Revisiting Global Statistics Aggregation for Improving Image Restoration (AAAI 2022) arXiv:https://arxiv.org/pdf/2112.04491.pdf Code: https://github.com/megvii-research/tlsc Reference: [1] 消除图像复原中的“misalignment”,性能大幅提升 https://mp.weixin.qq.com/s/HRm6wPDBeopsmLtilF5K-A [2] https://xiaoqiangzhou.cn/post/chu_revisiting/ 问题的提出: Specifically, with the increasing size of patches for testing, the performance increases in the case of UNet while it increases…
BoTNet (Bottleneck Transformers)
BoTNet (2021-01): 将 Self-Attention 嵌入 ResNet 文章:Bottleneck Transformers for Visual Recognition 论文: https://arxiv.org/abs/2101.11605 摘要: We present BoTNet, a conceptually simple yet powerful backbone architecture that incorporates self-attention for multiple computer vision tasks including image classification, object detection and instance segmentation. By just replacing the spatial convolutions with global self-attention in…
Python 代码格式化工具
项目地址:https://pypi.org/project/autopep8/ 参考文章:https://www.cnblogs.com/wuyongcong/p/9066531.html Autopep8 autopep8 自动格式化 Python 代码以符合 PEP 8 风格指南。它使用 pycodestyle 工具来确定代码的哪些部分需要被格式化。autopep8 能够修复大多数由 pycodestyle 报告的格式化问题。 安装 pip install autopep8 在命令行使用 autopep8 --in-place --aggressive --aggressive YOUR_PYTHON_FILE.py 在PyCharm 配置使用 配置 打开菜单:File ---> Settings ---> Tools ---> External Tools 窗体左上角有一个 + 号 Name: autopep8 # 或者其他名字 Program: autopep8 # 前提必须先安装 Arguments: --in-place --aggressive…
Cheat Sheet
Unzip a set of "*.tar.gz" file for f in *.tar.gz; do tar -xvf "$f"; done List folders under a path import os list_dirs = [name for name in os.listdir("path") if os.path.isdir(name)]