【学习笔记】李宏毅2019ML课程-Note1
李宏毅老师主讲的机器学习MOOC课程的笔记,本篇记录的知识点有:机器学习的概念和分类、利用线性模型解决回归问题以及梯度下降。
一、机器学习介绍说一下我学这门课的初衷吧。其实机器学习的课程在研究生阶段就已经上过了,但是工作之后才发现有一些基础没搞懂或者已经遗忘,因此在学习新知识时存在障碍。恰逢Datawhale给了这次组队学习的机会,我便想与群友们一起把这门基础课程搞定。
1. 概要本节通俗易懂地介绍了机器学习的概念,介绍了AI的发展历史,以及与传统规则的区别。简单来说,机器学习是一种从有限数据中学习规律并对未知数据进行预测的方法。
刚开始讲了比较多的名词和概念。老师最后的图里很好地总结了本次课
【学习笔记】职业素养
有关新人培养手册的一些阅读体会和思考
执行任务并漂亮地完成分析问题、解决问题是工程师的日常工作,如何对待工作、如何执行工作,反映了一个工程师的基本素质。
不同级别的工程师适合处理不同难度的任务。根据任务难度,可以分类为:
任务已经拆解完毕,我只负责某个简单子任务的执行;
任务已经拆解完毕,我负责各个步骤的执行,或者其中较困难的部分;
复杂的事情需要自己做拆解然后执行。
一般我们把简单的执行任务交付给 T5 左右级别工程师去执行,把复杂的任务交给 T7 左右的工程师执行。而 T8 及以上的工程师,我们希望能独立完成任务拆解并执行。T10 以上的工程师,我们希望能够承担一个技术方向上的难题。
【学习笔记】机器学习编译——Note1
陈天奇老师主讲的机器学习编译相关的课程,回答了机器学习模型是如何从开发状态到部署状态的。整个过程类似源代码到可执行程序的编译过程,因此得名机器学习编译。据他本人所述,这门课是目前全世界第一门主讲机器学习编译的课程。
《机器学习编译》是陈天奇老师的公开课。目前在Bilibili上更新视频。这里是陈天奇老师在Bilibili的个人主页,如果对课程感兴趣的小伙伴可以免费观摩。
另外课件地址在这里:Machine Learning Compilation
一、什么是机器学习编译?学习这门课的意义是什么?机器学习编译 (machine learning compilation, MLC) 是指,将机器学
【学习笔记】机器学习之集成方法,随机森林和梯度提升树
本文会介绍集成方法,bagging 和 boosting 两种思路,以及两种思路的代表性模型:随机森林和梯度提升树。
三个臭皮匠顶一个诸葛亮。即便是很多预测准确率仅强于随机的个体学习器的组合,经过一定的安排,也可以发挥令人惊讶的效果。在机器学习中,这种看起来没什么含金量的学习策略称之为集成学习。
集成学习首先需要一系列的个体学习器。之后采用某些策略结合它们的判断。
1. 集成学习的要求
构成集成学习器的个体学习器,其性能不能太差,至少要为强于随机的弱学习器。当然强学习器更好。在最后的结果汇总阶段,也会更多听取强学习器的意见。
个体学习器要具有一定的多样性。模型之间的差别要尽可能的大。一方面可
【竞赛打卡】科大讯飞-非标准化疾病诉求的简单分诊挑战赛
文本分类问题,收集用户问诊信息,需要分别将一段提问就问诊类型(20种)和疾病类型(60种)进行分类。类别包含较多缺失值,trick较多。笔者用到了Tfidf+Logistic回归作为Baseline,然后使用Pytorch训练RoBERTa用作第一版提交模型,最终根据数据的特征,取得了XX(排名)。
比赛地址:https://challenge.xfyun.cn/topic/info?type=disease-claims-2022&option=ssgy
baseline地址:https://mp.weixin.qq.com/s/KiozLF7FaJ_CVx74J3KNWA
【学习笔记】MacBook Pro M1Pro Java环境部署和开发准备
本文记录了在MacBook Pro M1Pro下部署Java开发环境遇到的问题和解决方法
下载并安装JDKM1芯片带来的坏处是许多jdk版本不支持arm架构。这里可以选择Zulu JDK,可以进入此链接下载并安装指定版本的JDK。
安装完毕后,不必设置环境变量,直接在命令行运行java -version检查是否运行成功:
% java -version
openjdk version "1.8.0_332"
OpenJDK Runtime Environment (Zulu 8.62.0.19-CA-macos-aarch64) (build 1.8.0_332-b09)
【学习笔记】机器学习之决策树算法
决策树算法是一类经典的监督学习算法,它的实现简单、可解释性强、能适应多种类型的输入数据,并且多颗决策树可以集成为强大的模型。常用于复杂问题的 baseline 解决方案,以及分析特征重要程度。
1. 树的划分流程:原理与思想1.1 决策树的工作原理决策树是广泛用于分类和回归任务的模型。本质上,它从一层层的if/else 问题中进行学习,并得出结论。
在这张图中,树的每个结点代表一个问题或一个包含答案的终结点(也叫叶结点)。树的边将问题的答案与将问的下一个问题连接起来。
用机器学习的语言来说就是,为了区分四类动物(鹰、企鹅、海豚和熊),我们利用三个特征(“有没有羽毛”“会不会飞”和“有没有鳍
【学习笔记】Attention和Transformer
分享下知识,介绍下我对Attention的理解,然后利用Tensorflow实现一个完整的Transformer模型。
背景常见的NLP任务文本分类,实体抽取等
AttentionAttention是一种编码机制,最初是用于解决机器翻译(seq2seq任务)的长程遗忘问题。因为基于RNN模型不能很好地应对长文本的翻译,即便是LSTM也受限于序列长度等因素的影响。而Attention可以通过训练一个动态的参数矩阵,决定关注长文本的哪些部分。Attention的一个优点是,相较于LSTM的基于时间的反响传播算法,Attention的计算可以并行化,这为其堆叠比较庞大的模型打下了基础。
self-
【论文阅读笔记】实现 MapReduce 论文附录 A 的 Word Count 程序
给出一个Map和Reduce的具体实现,去除了所有分布式的特性【可能今后会添加】
MapReduce文章最后的附录A有一段C++代码,描述了Map和Reduce函数的编写和使用方法。但是仅靠看代码总是不能深入理解MapReduce的实现细节,阅读其他人的MapReduce学习曲线又太过陡峭。因此我决定自己实现Map函数和Reduce函数,并尽可能使用替代方法将那些没有给出的api实现。
促使我写这篇文章的另一个原因是,网络上的大部分实现Word Count的文章都是依赖于某某框架的,比如依赖Hadoop。但我觉得过早依赖于某个平台不利于深入理解背后的原理,因此我决定自己实现各种api,体会程
【学习笔记】用Hadoop实现Word Count
好像不管什么Hadoop学习都是从Word Count开始,跨越语言的Word Count
Word Count是MapReduce 的经典入门案例,其目标是统计给定一系列文本文件的单词出现次数。
编程思路:
map阶段:把输入的数据进行分词,并将其组合成键值对的形式,key是单词,value全部标记为1。
shuffle 阶段:经过默认的排序分区分组,key相同的单词会作为一组数据构成新的键值对。
reduce阶段:处理 shuffle 完的一组数据,该组数据就是该单词所有的键值对。
Map类的编写/**
* @description: WordCount Mapper类,对应MapT
【学习笔记】数据密集性应用系统设计CH1笔记
第一章:可靠、可扩展和可维护的应用系统
数据密集型问题的挑战:数据量,数据复杂度,数据的快速多变性;
数据密集型应用包含以下模块:
数据库;
高速缓存;
索引:用户可以按关键字搜索数据井支持各种过滤操作;
流式处理:持续发送消息至另一个进程,处理采用异步方式;
批处理:定期处理大量累计数据。
数据系统本章提出数据系统的概念,包括数据库、消息队列和高速缓存等不同类型的系统。这样分类的原因有以下几点:
都能将数据保存一段时间。区别在于访问模式不同,以及由于不同访问模式导致的不同性能。
新技术、工具拥有多种功能,系统之间的界限变得模糊。比如redis既能存储也能作为消息队列,kafka作为消息
【论文阅读笔记】MapReduce: Simplified Data Processing on Large Clusters
网络上描写MapReduce的文章不可胜计,唯倜傥非常之文章留存。
一、MapReduce的概念概括MapReduce是Google提出的一个软件架构,用于大规模数据集的并行运算。
MapReduce是一个编程范式,旨在使用map把大规模的问题分解成子问题,然后利用reduce把子问题的解汇总。这种编程范式特别适合应用于分布式系统。
要理解map和reduce的操作,最重要是要理解下式:
k1和v1是原始的输入key和value;list(k2, v2)是map把k1和v1分布式计算后的中间结果集合;reduce(k2, list(v2))是reduce函数根据k2的值来合并v2;最终我们
【学习笔记】Hadoop介绍和安装
Hadoop学习笔记第一篇。
Hadoop介绍Apache Hadoop 软件库是一个框架,允许在集群服务器上使用简单的编程模型,对大数据集进行分布式处理。
Hadoop 可扩展性强,能从单台服务器扩展到数以千计的服务器;Hadoop 高可用,其代码库自身就能在应用层侦测并处理硬件故障。
Hadoop 的生态系统不仅包含 Hadoop,而且还包含 HDFS、HBase等基本组件。
HDFS (Hadoop Distributed File System)
HDFS是分布式文件系统的一种。HDFS是Hadoop生态系统的基本组成,它将数据保存在计算机集群上。HDFS是HBase等工具的基础。
【竞赛打卡】不限精度的大整数表示
两个大整数相乘,如何在不损失精度的前提下计算得到正确的结果?
不限精度的整数运算前一篇文章我们讨论了两个64位整数的乘法,本篇文章我们讨论高精度数值的加减运算问题。
大整数存储很简单,使用数组即可。注意整数的高位存储在数组的末尾,整数的低位存储在数组的开头。
# 235813
d[0] = 3
d[1] = 1
d[2] = 8
d[3] = 5
d[4] = 3
d[5] = 2
这样做的原因是,四则运算一般是从低位向高位计算的,数组则是从0开始遍历的。不过如果数字以字符串存储则不然。比如s="235813"这个字符串的存储顺序和逻辑顺序恰恰相反。
class BigI
【学习笔记】在 Clion 中使用 Google Test
Google Test 是著名的 C++ 单元测试框架。如何在 CLion中使用 Google Test?
1. 下载和安装首先去这个网站下载 google test 最新版本。
笔者写作时, google test 的版本为 1.10。
然后下载最新版本的压缩文件。
解压得到文件夹googletest-release-1.10.0,打开文件夹后,把googletest文件夹复制到你的目标工程目录。
还没结束,我们需要修改工程根目录的CMakeLists.txt,以使 google test 生效。注意不要修改googletest/CMakeLists.txt!
向CMakeLists
【竞赛打卡】大整数相乘 I
两个大整数相乘,如何在不损失精度的前提下计算得到正确的结果?
unsigned long long 整数之间的乘法1. 问题引入如果我们使用 C++ 语言,在 64 位系统上,unsigned long long 类型(或者 uint64_t 类型)的变量能够保存的数值范围是 $\left[0,2^{64}\right)$。任何小于该数值的数字都能被正确存储。
2^{64}-1=18,446,744,073,709,551,615这个十进制的整数足足有20位,一般情况下我们是不需要考虑溢出问题的。
但是如果两个uint64_t的变量要做乘法,就必须考虑溢出问题了。因为两个64位整数相乘,其结