CNN学习笔记
一文读懂卷积神经网络
机器学习之模型的评估与优化
当已经用现有机器学习算法(神经网络、决策树、逻辑回归等)构建了一个机器学习模型,但是模型的效果不是那么好,或者说我们想进一步优化这个模型时,我们可以怎么做呢?
比如我们的损失函数:
其中$\lambda$是正则化系数,我们可以尝试这些方法:
扩大训练样本
缩小特征变量维数
增加特征变量维数
增加拟合模型阶数
增大正则化系数
减小正则化系数
但是什么时候用什么方法呢?我们首先学习如何评估一个模型。
不管是回归问题还是分类问题,我们都有一个损失函数$J(\vec{w},b)$。我们要做的是最小化这个损失函数。我们通常将数据分割成 训练集和测试集两部分,通常是7:3的比例。然后分别在训练集和测试集上分别计算损失函数,如果两者最后都很小,那么可以说这个模型是有效的。(如果不是很离谱的模型,训练集上的误差大概率最后都比较小,重点看的是测试集的误差,the loss of the test data is a better indicator)
为什么需要测试集?
第一是我们需要知道模型面对未知数据的能力,不能只拿训练集的误差来衡量模型好坏,因为这些数据是用来训练的,是与调优的 ...
ch4 供给与需求的市场力量
The Market Forces of Supply and Demand
市场与竞争
市场:某种物品或劳务的一群买者与卖者。A market is a group of buyers and sellers of a particular product.
竞争市场:有许多买者与卖者,以至于每个人对市场价格的影响都微乎其微的市场。A competitive market is one with many buyers and sellers, each has a negligible effect on price
完全竞争市场:可供销售的物品是完全相同的,并且买者和卖者众多,没有任何一个买者或者卖者能决定市场价格。
垄断者:只有一个卖者,这个卖者决定市场。
需求
物品的需求量: 是买者愿意并且能够购买的一种物品的数量。The quantity demanded of any good is the amount of the good that buyers are willing and able to purchase.
需求表: 表示一种物品的价格与需求量之间关系 ...
ch3 相互依存性与贸易的好处
Interdependence and the Gains from Trade
基本概念
绝对优势:用比另一个生产者更少的投入生产某种物品的能力。Absolute advantage: the ability to produce a good using fewer inputs than another producer
比较优势:一个生产者以低于另一个生产者的机会成本生产一种物品的能力。Comparative advantage: the ability to produce a good at a lower opportunity cost than another producer
出口品:在国内生产而在国外销售的物品Exports: goods produced domestically and sold abroad
进口品:在国外生产而在国内销售的物品Imports: goods produced abroad and sold domestically
相互依存和贸易可以使每个人都可以享有更多数量和品种的物品与劳务。Interdependence a ...
Day8 哈希表Part3
哈希表部分的最后一节,三数之和比较难,而且用哈希表实现效率不高,使用双指针可以获得较好的时间效率。
1 赎金信1.1 题目描述给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串 ransom 能不能由第二个字符串 magazines 里面的字符构成。如果可以构成,返回 true ;否则返回 false。
(题目说明:为了不暴露赎金信字迹,要从杂志上搜索各个需要的字母,组成单词来表达意思。杂志字符串中的每个字符只能在赎金信字符串中使用一次。)
注意:
你可以假设两个字符串均只含有小写字母。
canConstruct(“a”, “b”) -> falsecanConstruct(“aa”, “ab”) -> falsecanConstruct(“aa”, “aab”) -> true
1.2 思路解析通过构造字符和出现次数的unordered_map即可。
1234567891011bool canConstruct(string ransomNote, string magazine) { // 构 ...
ch2 像经济学家一样思考
Thinking Like an Economist
假设与模型
假设:可以简化复杂的世界,使之更容易理解Assumptions: simplify the complex world, make it easier to understand.
模型:一个复杂现象的高度简化Model: a highly simplified representation of a more complicated reality.
我们的第一个模型:循环流量图
循环流量图:一个说明货币如何通过市场在家庭与企业之间流动的直观经济模型The Circular-Flow Diagram: a visual model of the economy, shows how dollars flow through markets among households and firms
生产要素:社会用来生产物品与劳务的资源,包括:劳动、土地 、资本(建筑物和用于生产的机器)等等。Factors of production: the resources the economy uses to pr ...
ch1 经济学的十大原理
Tradeoff, Cost, Margin, Incentive.
Trade, Market, Government.
Production, Money, Inflation&Unemployment
经济学研究什么问题?
稀缺性:社会资源的有限性
Scarcity: the limited nature of society’s resources
经济学: 研究社会如何管理自己的稀缺资源Economics: the study of how society manages its scarce resources
经济学研究三个问题:
人们如何做出决策
人们如何相互影响
整体经济如何运行
其中前两个是微观经济学,最后一个是宏观经济学。即使是国家与国家之间的贸易,也是微观经济学的范畴。
人们如何做出决策?原理 1: 人们面临权衡取舍PRINCIPLE #1: People Face Tradeoffs
“大炮与黄油”的例子。
效率: 社会能从其稀缺资源中得到的最大利益,蛋糕的大小Efficiency: the property of socie ...
Day7 哈希表 Part2
1 快乐数1.1 题目描述编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。
如果 n 是快乐数就返回 True ;不是,则返回 False 。
示例:
输入:19输出:true解释:1^2 + 9^2 = 828^2 + 2^2 = 686^2 + 8^2 = 1001^2 + 0^2 + 0^2 = 1
1.2 思路解析刚开始还以为这是个数学题,总是想着是不是会出现6和8的组合才是快乐数,仔细想又不是这样,因为如果数字的位数多的话完全可以不是6和8的组合凑成10,100,或者1000这样子。
后来看解析焕然大悟,真是太久没有写题了,一个浅显的道理都没有意识到:如果不是快乐数,那么通过求平方算出来的数字一定会出现重复的数字,由于是在数组中查找对应元素,所以用哈希表最快,所以数据结构选用set.
12345678910111213141516set<i ...
Day6 哈希表Part1
哈希表基础基本概念
哈希表又称为散列表,是根据关键码的值而直接进行访问的数据结构。
哈希表解决的问题是:快速判断一个元素是否在一个集合中,
HashFunction = HashCode(name) % tableSize。也就是说,把各种数据格式(name)转化为索引,就可以实现快速访问了。
当不同的数据被映射到同一个哈希表上时,出现哈希碰撞,解决哈希碰撞的基本方法有:
拉链法:把发生冲突的元素存储到链表中。
线性探测法:向下找一个空位存放对应信息。
常见哈希结构
集合
底层实现
是否有序
数值是否可以重复
能否更改数值
查询效率
增删效率
std::set
红黑树
有序
否
否
O(log n)
O(log n)
std::multiset
红黑树
有序
是
否
O(logn)
O(logn)
std::unordered_set
哈希表
无序
否
否
O(1)
O(1)
映射
底层实现
是否有序
数值是否可以重复
能否更改数值
查询效率
增删效率
std::map
红黑树
key有序
key不可重复
key不可修改
O(logn) ...
Day4 链表基础
两两交换链表元素题目描述给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
思路解析两两交换节点必然涉及多指针操作,需要更改多个节点的next指向,并且交换是两两的,由此我想到了用双指针的方法。通过一前一后两个指针,分别指向每次交换的节点的方法来更新链表。
![[Pasted image 20230828234204.png]]
上图是一般的更新思路,但是这种方法细想,其实有很多问题。
按照上图的更新方式,对于1节点来说,bp->next = fp->next->next。但是当节点3,4不存在或4不存在的时候,这样的更新方式就会出错
fp和bp的更新可以通过临时节点来实现,但是还是会存在上述的问题,如何能保证不会空指针异常需要耐心调试
循环何时结束是需要考虑的一大问题
想必读者也看出上述方式的复杂性了,因为我们没能找到一个统一的更新思想,所以当边界条件很多时避免不了分类讨论,操作会很繁琐。
不过调试就调试呗,以下是这种实现方式的代码:
123456789101112131415L ...