首页 > 其他分享 >【机器学习】西瓜书第一章 绪论

【机器学习】西瓜书第一章 绪论

时间:2024-08-22 20:50:56浏览次数:13  
标签:西瓜 机器 绪论 假设 模型 样本 第一章 学习 算法

参考资料:[1]周志华.机器学习[M].清华大学出版社,2016.

一、引言

我们生活中存在许多基于经验做出的判断,比如月明星稀,那第二天可能会是好天气;一个西瓜敲起来声音响,色泽也不错,大概率是一个好瓜。

我们做出这样判断的原因是我们观察到了很多月明星稀之后的好天气,吃到了很多符合上述特征的好瓜。

我们对自身经验的利用,让我们能做出有效的决策。那么,计算机能否也像咱们一样,通过利用经验进行决策呢?

机器学习正是这样一门学科,它致力于研究如何通过计算的手段,利用经验来改善系统自身的性能。

计算机的“经验”通常以“数据”的形式存在,因此,机器学习所研究的主要内容,是关于在计算机上从数据中产生“模型”的算法,即“学习算法”。

有了学习算法,我们把经验数据给它,它就能基于这些数据产生一个模型。进而可以在碰见新情况的时候,为我们提供决策。

这跟我们上学时的过程其实蛮像的,老师教给我们知识和解题方法,通过做题和订正不断训练,最后上考场,即使看到没做过的题目,也可以应对。

如果说,计算机科学是研究“算法”的学问,那么,机器学习则是研究“学习算法”的学问。

二、基本术语

以西瓜的数据为例,如(色泽=青绿;根蒂=蜷缩;敲声=浊响),(色泽=乌黑;根蒂=稍缩;敲声=清脆),…,每对括号内是一条记录。

这一组记录的集合称为一个“数据集”(data set),其中每条记录是关于一个事件或对象的描述,称为一个“样本”(sample)。

反映事件或对象在某方面的表现或性质的事项,例如“色泽,“根蒂”,称为“属性”(attribute)或“特征”(feature)。

每一个属性的取值,如“青绿”,“乌黑”,称为“属性值”(attribute value)。

属性或特征张成的空间称为“属性空间”(attribute space)或“样本空间”(feature space)或“输入空间”。

可以想想线代里向量组张成的空间。

如果把“色泽、“根蒂”、“敲声”作为三个坐标轴,则它们可以张成一个用于描述西瓜的三维空间,每个西瓜都可以在空间中找到一个坐标。

空间中一个点对应一个坐标向量,我们把一个样本称为一个“特征向量”(feature vector)。

一般地,令 D = { x 1 , x 2 , ⋯   , x m } D = \{x_1,x_2,\cdots,x_m\} D={x1​,x2​,⋯,xm​} 表示包含 m m m 个样本的数据集,每个样本由 d d d 个属性描述(如上面描述西瓜用了 3 个属性),则每个样本 x i = ( x i 1 ; x i 2 ; …   ; x i d ) \pmb{x_i}=(x_{i1};x_{i2};\dots;x_{id}) xi​=(xi1​;xi2​;…;xid​) 是 d d d 维样本空间 χ \pmb{\chi} χ 中的一个向量,其中 x i j x_{ij} xij​ 是样本 x i x_i xi​ 在第 j j j 个属性上的取值, d d d 称为样本 x i \pmb{x_i} xi​ 的“维数”(dimensionality)。

和前面提到的张成空间联系起来, x i j x_{ij} xij​ 就是某个坐标轴的取值。

从数据中学得模型的过程称为“学习”(learning)或“训练”(training),这个过程通过执行某个学习算法来完成。

训练过程中使用的数据称为“训练数据”(training data),其中每个样本称为一个“训练样本”(training sample),训练样本组成的集合称为“训练集”(training set)。

学习得到的模型对应了关于数据的某种潜在的规律,因此也称为“假设”(hypothesis);这种潜在规律自身,则称为“真相”或“真实”(ground-truth),学习过程就是为了找出或逼近真相。

如果希望学得一个能帮助我们判断没切开的瓜是否是“好瓜”的模型,仅仅有前面的关于西瓜特征的描述数据是不够的。因为还没有建立起这些数据与是否是好瓜的联系,即实现“预测”(prediction)。

我们还需要“结果”信息,如“((色泽=青绿;根蒂=蜷缩;敲声=浊响),好瓜)”。关于结果的信息,称为“标记”(label);有了标记信息的样本,称为“样例”(example)。

一般地,用 ( x i , y i ) (\pmb{x_i},y_i) (xi​,yi​) 表示第 i i i 个样例,其中 y i ∈ Y y_i\in \pmb{Y} yi​∈Y, Y \pmb{Y} Y 是所有标记的集合,称为“输出空间”(label space)。

如果我们想要获得的结果是离散的,比如“好瓜”、“坏瓜”,此类学习任务称为“分类”(classification);如果结果是连续值,如西瓜的成熟度,此类学习任务称为“回归”(regression)。

对于只涉及两个类别的“二分类”(binary classification)任务,通常称其中一个类为“正类”(positive class),另一个类为“负类”(negative class);涉及多个类别时,则称为“多分类”(multi-class classification)任务。

一般地,预测任务是希望通过对训练集进行学习,建立一个从输入空间到输出空间的一个映射。

我们还可以对西瓜做“聚类”(clustering),即把训练集中的西瓜分成若干组,每一组称为一个“簇”(cluster);这些自动形成的簇可能对应一些潜在的概念划分,例如“浅色瓜”、“深色瓜”。这样的学习过程有助于我们了解数据内在的规律,能为更深入地分析数据建立基础。

需要说明的是,在聚类学习中,“浅色瓜”这样的概念我们事先是未知的,训练过程中的样本通常不含有标记信息。

根据训练数据是否拥有标记信息,学习任务可大致划分为两大类:“监督学习”(supervised learning)和“无监督学习”(unsupervised learning),分类和回归属于前者,而聚类是后者的代表。

需要注意的是,机器学习的目的是学得的模型能很好地适用于“新样本”,而不是仅仅在训练样本上工作得很好;即便对聚类这样的无监督学习,我们也希望学得的簇划分能适用于未在训练集中出现的样本。

学得模型适用于新样本的能力,称为“泛化”(generalization)能力。具有强泛化能力的模型能很好地适用于整个样本空间。于是,尽管训练集通常只是样本空间的一个小采样,我们仍希望它能很好地反映整个样本空间的特性,否则就很难期望在训练集上学得的模型能在整个样本空间上都工作得很好。

通常假设样本空间中全体样本服从一个未知“分布”(distribution) D D D,我们获得的每个样本都是独立地从这个分布上采样获得的,即“独立同分布”(independent and identically distributed,简称 i , i , d i,i,d i,i,d)。

一般而言,训练样本越多,我们得到的关于 D D D 的信息越多,就越有可能通过学习获得具有强泛化能力的模型。

三、假设空间

归纳(induction)与演绎(deduction)是科学推理的两大基本手段。前者是从特殊到一般的“泛化”(generalization)过程,即从具体的事实归结出一般性规律;后者则是从一般到特殊的“特化”(specialization)过程,即从基础原理推演出具体状况。

例如,在数学公理系统中,基于一组公理和推理规则推导出与之相恰的定理,这是演绎;而“从样例中学习”显然是一个归纳的过程,因此也称为“归纳学习”(inductive learning)。

归纳学习有狭义与广义之分,广义的归纳学习大体相当于从样例中学习,而狭义的归纳学习则要求从训练数据中学得概念(concept),因此也称为“概念学习”或“概念形成”。

概念学习技术目前研究、应用都比较少,因为要学得泛化性能好且语义明确的概念太困难了,现实常用的技术是产生“黑箱”模型。然而,对概念学习有所了解,有助于理解机器学习的一些基础思想。

概念学习中最基本的是布尔概念学习,即对“是”和“不是”这样的可表示为 0/1 布尔值的目标概念的学习。举一个例子,假设我们获得了下表所示的训练数据集:

这里要学习的目标是“好瓜”。暂且假设“好瓜”可由“色泽”、“根蒂”和“敲声”三个因素完全确定。于是,我们学得的将是“好瓜是某种色泽、某种根蒂、某种敲声的瓜”这样的概念。

我们可以把学习过程看作一个在所有假设(hypothesis)组成的空间中进行搜索的过程,搜索目标是找到与训练集“匹配”(fit)的假设,即能够将训练集中的瓜判断正确的假设。

假设的表示一旦确立,假设空间及其规模大小就确定了。这里我们的假设空间由形如“(色泽=?) ∩ \cap ∩ (根蒂=?) ∩ \cap ∩ (敲声=?)”的可能取值所形成的假设组成。

例如色泽有“青绿”等三种可能取值;还需考虑到,也许“色泽”取任何值都合适;此外,还需考虑极端情况:有可能“好瓜”这个概念根本就不成立,我们用 ∅ \emptyset ∅ 表示。

这样,若“色泽”、“根蒂”和“敲声”分别有3、2和2种可能取值,则我们面临的假设空间规模大小为 4 × 3 × 3 + 1 = 37 4\times 3\times 3+ 1=37 4×3×3+1=37。图1.1为此西瓜问题的假设空间。

可以有许多策略对这个假设空间进行搜索,例如自顶向下、从一般到特殊,或是自底向上、从特殊到一般,搜索过程中可以不断删除与正例不一致的假设、和(或)与反例一致的假设。最终将会获得与训练集一致的假设,这就是我们学得的结果。

需注意的是,现实问题中我们常面临很大的假设空间,但学习过程是基于有限样本训练集进行的,因此,可能有多个假设与训练集一致,即存在着一个与训练集一致的“假设集合”,我们称之为“版本空间”(version space)。例如,西瓜问题中,与表1.1训练集对应的版本空间如图1.2所示。

四、归纳偏好

通过学习得到的模型对应了假设空间中的一个假设。于是,图1.2的西瓜版本空间给我们带来的麻烦是:现有三个与训练集一致的假设,但与它们对应的模型在面临新样本时,却会产生不同的输出。

例如,对(色泽=青绿;根蒂=蜷缩;敲声=沉闷)这个新瓜,如果采用“好瓜=(色泽=) ∩ \cap ∩(根蒂=蜷缩) ∩ \cap ∩(敲声=)”,那么其为一个好瓜。然而,按照另外两个假设,判断结果为不是好瓜。我们应该相信哪个模型呢?

若仅有表1.1中的训练样本,则无法断定上述三个假设中哪一个“更好”。然而,对于一个具体的学习算法而言,它必须要产生一个模型。这时,学习算法本身的“偏好”就会起到关键作用。称之为“归纳偏好”(inductive bias)。

任何一个有效的机器学习算法必有其归纳的偏好,否则它将被假设空间中看似在训练集上“等效”的假设所迷惑,而无法产生确定的结果。

归纳偏好的作用在图1.3这个回归学习中可能更加直观。这里的每个训练样本是图中的一个点 ( x , y ) (x,y) (x,y),要学得一个与训练集一致的模型,相当于找到一条穿过所有训练样本点的曲线。

显然,对有限个样本点组成的训练集,存在多条曲线与其一致。我们的学习算法必须有某种偏好,才能产生它认为“正确”的模型。

例如,若认为相似的样本应有相似的输出,则对应的学习算法可能是图1.3中比较“平滑”的曲线 A 而不是曲线 B。

归纳偏好可看作学习算法自身在一个可能很庞大的假设空间中对假设进行选择的启发式。那么,有没有一般性的原则来引导算法确立“正确的”偏好呢?

“奥卡姆剃刀”(Occam’s razor)是一种常用的、自然科学研究中最基本原则,即“若有多个假设与观察一致,则选最简单的那个”。

然而,奥卡姆剃刀并非唯一可行的原则。退一万步说,即便假定我们坚定利用奥卡姆剃刀,也需注意到,奥卡姆剃刀本身存在不同的诠释。比如该如何定义“更简单”呢?这个问题并不简单,需借助其他机制才能解决。

事实上,归纳偏好对应了学习算法本身所做出的关于“什么样的模型更好”的假设。在具体的现实问题中,这个假设是否成立,即算法的归纳偏好是否与问题本身匹配,大多时候直接决定了算法能否取得好的性能。

我们再回过头看图1.3。假设学习算法 ϵ a \epsilon_a ϵa​ 基于某种归纳偏好产生了曲线 A 的模型,学习算法 ϵ b \epsilon_b ϵb​ 基于另一种偏好产生了对应于曲线 B 的模型。

若认为平滑曲线更为简单,根据奥卡姆剃刀,我们期待算法 ϵ a \epsilon_a ϵa​ 比 ϵ b \epsilon_b ϵb​ 更好。确实,由图1.4(a),与曲线 B 相比,A 与训练集外的样本更一致,即 A 的泛化能力比 B 强。

但是,有没有可能出现如图1.4(b)所示情况,B 的泛化能力更强?答案是可能的。换言之,对于一个学习算法 ϵ a \epsilon_a ϵa​,若它在某些问题上比学习算法 ϵ b \epsilon_b ϵb​ 好,则必然存在另一些问题, ϵ b \epsilon_b ϵb​ 更好。

事实上,哪怕 ϵ a \epsilon_a ϵa​ 是一些高级算法,而 ϵ b \epsilon_b ϵb​ 是瞎猜的笨拙算法,也有可能出现这种情况。这就是“没有免费的午餐”定理(No Free Lunch Theorem, NFL):无论 ϵ a \epsilon_a ϵa​ 多高级, ϵ b \epsilon_b ϵb​ 多笨拙,它们的期望性能相同。

那既然所有学习算法的期望性能都跟随机乱猜差不多,还学什么机器学习算法?

我们需注意到,NFL 定理有一个重要前提:所有“问题”出现的机会相同、或所有问题同等重要。但实际情形并不是这样。

很多时候,我们只关注自己正在试图解决的问题,希望为它找到一个解决方案,至于这个解决方案在别的问题上是否为好方案,我们并不关心。

NFL 最重要的寓意,是让我们认识到,脱离具体问题,空泛地谈论“什么学习算法更好”毫无意义。因为若考虑所有潜在的问题,则所有算法都一样好。

要谈论算法的相对优劣,必须针对具体的学习问题,学习算法自身的归纳偏好与问题是否匹配,往往会起到决定性作用。

让我想起了唯物辩证法里的具体问题具体分析。

五、发展历程

机器学习是人工智能(artificial intelligence)研究发展到一定阶段的必然产物。

二十世纪五十年代到七十年代初,人工智能研究处于“推理期”,这一阶段的代表性工作主要有 A.Newell 和 H.Simon 的“逻辑理论家”以及此后的“通用问题求解”程序等。

然而,随着研究向前发展,人们发现仅具有逻辑推理能力是远远实现不了人工智能的。从二十世纪七十年代开始,人工智能研究进入了“知识期”。这一时期,大量专家系统问世,E.A.Feigenbaum 作为“知识工程”之父在 1994 年获得图灵奖。

但是,人们认识到,由我们把知识总结出来再教给计算机是相当困难的。于是,一些学者想到,如果机器自己能够学习知识该多好。

1980 年夏,在美国卡耐基梅隆大学举行了第一届机器学习研讨会(IWML);同年,《策略分析与信息系统》连出三期机器学习专辑;1986 年,第一本机器学习专业期刊 M a c h i n e L e a r n i n g Machine Learning MachineLearning 创刊。总的来说,二十世纪八十年代是机器学习成为一个独立的学科领域、各种机器学习技术百花初绽的时期。

在二十世纪八十年代,“从样例中学习”的一大主流是符号主义学习,其代表包括决策树(decision tree)和基于逻辑的学习。

典型的决策树学习以信息论为基础,以信息熵的最小化为目标,直接模拟了人类对概念进行判定的树形流程。

基于逻辑的学习的著名代表是归纳逻辑程序设计(Inductive Logic Programing, ILP),可看作机器学习与逻辑程序设计的交叉。

决策树学习技术由于简单易用,到今天仍是最常用的机器学习技术之一。ILP 具有很强的知识表达能力,而且领域知识通常可方便地通过逻辑表达式进行描述,因此,ILP 不仅可利用领域知识辅助学习,还可通过学习对领域知识进行精化和增强。

然而,ILP 由于表示能力太强,直接导致学习过程面临的假设空间太大、复杂度极高,因此,问题规模稍大就难以有效地进行学习,九十年代中期后这方面的研究相对陷入低潮。

二十世纪九十年代中期以前,“从样例中学习”的另一种主流技术是基于神经网络的连接主义学习。

连接主义学习在二十世纪五十年代取得了大发展,但因为早期的很多人工智能研究者对符号表示有偏爱,所以当时连接主义的研究未被纳入主流范畴。尤其其本身也存在许多发展障碍。

1983 年,J.J. Hopfield 利用神经网络求解“流动推销员问题”这个著名的 NP 难题取得重大进展,使得连接主义重新受到人们关注。1986 年,D.E. Rumelhart 等人重新发明了著名的 BP 算法,产生了深远影响。

与符号主义学习能产生明确的概念表示不同,连接主义产生的是“黑箱”模型,因此,从知识获取的角度来看,连接主义学习技术有明显弱点;然而,由于有 BP 这样有效的算法,使得它可以在很多现实问题上发挥作用。

事实上,BP 一直是被应用最广泛的机器学习算法之一。连接主义学习的最大局限是其“试错性”;简答地说,其学习过程涉及大量参数,而参数的设置缺乏理论指导,主要靠手工“调参”;夸张一点说,参数调节上失之毫厘,学习结果可能差之千里。

二十世纪九十年代中期,“统计学习”(statistical learning)闪亮登场并迅速占据主流舞台,代表性技术是支持向量机(Support Vector Machine, SVM)以及更一般的“核方法”(kernel methods)。

这方面的研究早在二十世纪六七十年代就已开始。1963年,V.N. Vapnik提出了“支持向量”的概念,他和 A.J. Chervonenkis 在 1968 年提出 VC 维,在 1974 年提出了结构风险最小化原则等。

但统计学习直到九十年代中期才开始成为主流,一方面是由于有效的支持向量机算法在九十年代初才被提出,其优越性能到九十年代中期在文本分类应用中才得以显现;另一方面,正是连接主义学习技术的局限性凸显之后,人们才把目光转向了以统计学习理论为直接支撑的统计学习技术。

事实上,统计学习与连接主义学习有密切联系。在支持向量机被普遍接受后,核技巧(kernel trick)被人们用到了机器学习的几乎每一个角落,核方法也逐渐成为机器学习的基本内容之一。

有趣的是,二十一世纪初,连接主义学习又卷土重来,掀起了以“深度学习”为名的热潮。所谓深度学习,狭义地说就是“很多层”的神经网络。在若干测试和竞赛上,尤其是涉及语音、图像等复杂对象的应用中,深度学习技术取得了优越性能。

以往机器学习技术在应用中要取得好性能,对使用者的要求较高;而深度学习技术设计的模型复杂度非常高,以至于只要下功夫“调参”,把参数调节好,性能往往就好。

因此,深度学习虽缺乏严格的理论基础,但它显著降低了机器学习应用者的门槛,为机器学习技术走向工程实践带来了便利。那么,为什么它此时才热起来呢?

有两个基本原因:数据大了、计算能力强了。深度学习模型拥有大量参数,若数据样本少,则很容易“过拟合”;如此复杂的模型、如此大的数据样本,若缺乏强力计算设备,根本无法求解。恰由于人类进入了“大数据时代”,数据储量与计算设备都有了很大发展,才使得连接主义学习技术焕发又一春。

有趣的是,神经网络在二十世纪八十年代走红,与当时 Intel x86 系列微处理器与内存条技术的广泛应用所造成的计算能力、数据访存效率提高有一定关系。深度学习此时的状况,与那时的神经网络何其相似。

六、应用现状

在过去的二十年中,人类收集、储存、传输、处理数据的能力取得了飞速提升,人类社会的各个角落都积累了大量数据,亟需能有效地对数据进行分析利用的计算机算法,而机器学习恰顺应了大时代这个迫切需求,因此该学科很自然地取得巨大发展、受到广泛关注。

今天,在计算机科学的诸多分支学科领域中,无论是多媒体、图形学,还是网络通信、软件工程,乃至体系结构、芯片设计,都能找到机器学习技术的身影,尤其是在计算机视觉、自然语言处理等“计算机应用技术”领域,机器学习已成为最重要的技术进步源泉之一。

2006 年,卡耐基梅隆大学宣告成立世界上第一个“机器学习系”,机器学习领域奠基人之一 T. Mitchell 教授出任首任系主任。2012 年 3 月,美国奥巴马政府启动“大数据研究与发展计划”,美国国家科学基金会旋即在加州大学伯克利分校启动加强计划,强调要深入研究和整合大数据时代的三大关键技术:机器学习、云计算、众包(crowdsourcing)。

显然,机器学习在大数据时代是必不可少的核心技术,道理很简单:收集、存储、传输、管理大数据的目的就是为了“利用”大数据,而如果没有机器学习技术分析数据,则“利用”无从谈起。

谈到对数据进行分析利用,很多人会想到“数据挖掘”(data mining)。数据挖掘在二十世纪九十年代形成,它受到很多学科领域影响,其中数据库、机器学习、统计学无疑影响最大。

数据挖掘是从海量数据中发掘知识,这就必然涉及对“海量数据”的管理和分析。大体来说,数据库领域的研究为数据挖掘提供数据公里技术,而机器学习和统计学为数据挖掘提供数据分析技术。

由于统计学界的研究成果通常需要经由机器学习研究来形成有效的学习算法,之后再进入数据挖掘领域,因此从这个意义上说,统计学主要是通过机器学习对数据挖掘发挥影响,而机器学习领域和数据库领域则是数据挖掘的两大支撑。

今天,机器学习已经与普通人的生活密切相关。下面举几个例子:

(1)众所周知,谷歌、百度等互联网搜索引擎已经开始改变人类的生活方式,例如很多人已经习惯出行前通过互联网搜索来了解目的地信息、寻找合适的酒店、餐馆等。显然,互联网搜索通过分析网络上的数据来找到用户所需的信息,在这个过程中,用户查询是输入、搜索结果是输出,而要建立输入与输出之间的联系,内核必然需要机器学习技术。

(2)车祸是人类最凶险的杀手之一,全世界有上百万人丧生车轮,仅我国每年就约有十万人死于车祸,由计算机来实现自动汽车驾驶是一个理想的方案,因为机器开车可以保证不是新手驾驶、不会疲劳驾驶,更不会酒后驾驶,而且还有重要的军事用途。这方面研究最大的困难是无法在汽车厂里就事先把汽车上路后会遇到的所有情况都考虑到,而只能即时处理。若把车载传感器接收到的信息作为输入,把对方向盘、刹车、油门等的控制作为输出,可视其为一个机器学习任务。

最近,百度旗下自动驾驶服务平台“萝卜快跑”就已经在武汉营运了无人驾驶出租车,引起了广泛讨论。

值得一提的是,机器学习备受瞩目当然是由于它已成为智能数据分析技术的创新源泉,但机器学习研究还有另一个不可忽视的意义,即通过建立一些关于学习的计算模型来促进我们理解“人类如何学习”。

例如,P. Kanerva 在二十世纪八十年代中期提出 SDM(Sparse Distributed Memory)模型时并没有可以模仿脑生理结构,但后来神经科学的研究发现,SDM 的稀疏编码机制在视觉、听觉、嗅觉的脑皮层中广泛存在,从而为理解人脑的某些功能提供了一定启发。

自然科学研究的驱动力归结起来无外是人类对宇宙本源、万物本质、生命本性、自我本识的好奇,而“人类如何学习”无疑是一个有关自我本识得重大问题。从这个意义上来说,机器学习不仅在信息科学中占有重要地位,还具有一定的自然科学探索色彩。

标签:西瓜,机器,绪论,假设,模型,样本,第一章,学习,算法
From: https://blog.csdn.net/Douglassssssss/article/details/141437769

相关文章

  • 第一章 redis简单介绍
    一、引言在Web应用发展的初期,那时关系型数据库受到了较为广泛的关注和应用,原因是因为那时候Web站点基本上访问和并发不高、交互也较少。而在后来,随着访问量的提升,使用关系型数据库的Web站点多多少少都开始在性能上出现了一些瓶颈,而瓶颈的源头一般是在磁盘的I/O上。而随着互联网技......
  • 数据结构详细教程绪论
    ......
  • 【数据结构与算法第一章】编程基础:变量与数据类型、指针、结构体、数组与链表、程序结
    目录【数据结构与算法第一章】编程基础1.1变量与数据类型1.2指针1.3结构体1.4数组和链表1.5程序结构1.6函数中参数的传递1.7C语言中运算符的含义【数据结构与算法第一章】编程基础1.1变量与数据类型变量:    ①在C语言中,所有变量必须先声明后使用......
  • 第一章---数据库介绍
    一、数据库管理软件的由来基于我们之前对数据的了解,数据想要进行永久保存,一般都是保存到文件中,但是一个文件仅仅只能存在于某一台机器上。如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件都运行在一台机器上,那么用文件存取数据,并没有问题。很不幸,这些......
  • 第一章 内网环境搭建
    用户须知1.免责声明:本教程作者及相关参与人员对于任何直接或间接使用本教程内容而导致的任何形式的损失或损害,包括但不限于数据丢失、系统损坏、个人隐私泄露或经济损失等,不承担任何责任。所有使用本教程内容的个人或组织应自行承担全部风险。详情免责声明版权声明交流群......
  • 数据结构(一)-绪论
    数据结构(一)-绪论梗概:1.数据1.1数据数据是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号集合,数据是计算机程序加工的原料。1.2数据元素数据元素是数据的基本单位,通常作为一个整体进行考虑和处理。一个数据元素可有若......
  • 《亿级流量系统架构设计与实战》第一章 大型互联网公司的基础架构
    大型互联网公司的基础架构一、DNS1、域名服务器分类2、域名解析过程二、HTTPDNS1、DNS存在问题2、HTTPDNS解析流程3、HTTPDNS与DNS对比三、接入层技术演进1、Nginx(七层负载均衡器)2、LVS(四层负载均衡器)3、LVS+Nginx接入层架构四、数据存储1、MySQL2、Redis3、LSMTr......
  • 手写Redis缓存系统,第一章:基于http协议实现的缓存系统
    关系描述关系图文本描述main包依赖cache包依赖http包流程:main包的main函数调用cache.New("inmemory")创建一个缓存实例。main包的main函数将缓存实例传递给http.New(c)创建一个Server实例。Server实例调用Listen方法启动HTTP服务器......
  • Matlab第一章
    Matlab第一章1.命令行窗口里写的命令,当文件关闭时命令行窗口和工作区内容消失。2.想要保存代码,方法是:新建脚本->写代码->保存->运行3.脚本语言(1)clear;清空工作区clc;清空命令行窗口x=20;y=30;x+y(2)clear;clc;x=20;y=30;x+y;如果x+y有分号则命令行窗口不会输出......
  • C语言开发1——C语言基础1——第一章
    本章目录一、什么是C语言(一)、自然语言(二)、C语言(三)、自然语言与C语言的区别二、计算机语言的发展历史三、C语言特点(一)、优点(二)、缺点四、环境搭建(一)、下载软件(二)、安装软件五、第一个C程序(一)、创建项目 (二)、创建文件(三)、编写代码(四)、运行程序六、注释(一)、作......