深度学习机器学习基础-基本原理

  • 前言
  • 5.1 学习算法
    • 5.1.1 任务 \(T\)
    • 5.1.2 性能度量 \(P\)
    • 5.1.3 经验 \(E\)
    • 5.1.4 示例: 线性回归
  • 5.2 容量、过拟合和欠拟合
    • 5.2.1 没有免费午餐定理
    • 5.2.2 正则化
  • 5.3 超参数和验证集
    • 5.3.1 验证集的作用
    • 5.3.2 交叉验证
  • 5.4 估计、偏差和方差
    • 5.4.1 点估计
    • 5.4.2 偏差
    • 5.4.4 权衡偏差和方差以最小化均方误差
  • 参考资料

前言

深度学习是机器学习的一个特定分支我们要想充分理解深度学习,必须对机器学习的基本原理有深刻的理解

大部分机器学习算法都有超参数(必须在学习算法外手动设定)。机器学习本质上属于应用统计学,其更加强调使用计算机对复杂函数进行统计估计,而较少强调围绕这些函数证明置信区间;因此我们会探讨两种统计学的主要方法: 频率派估计和贝叶斯推断。同时,大部分机器学习算法又可以分成监督学习无监督学习两类;本文会介绍这两类算法定义,并给出每个类别中一些算法示例。

本章内容还会介绍如何组合不同的算法部分,例如优化算法、代价函数、模型和数据 集,来建立一个机器学习算法。最后,在 5.11 节中,我们描述了一些限制传统机器学习泛化能力的因素。正是这些挑战推动了克服这些障碍的深度学习算法的发展。

大部分深度学习算法都是基于被称为随机梯度下降的算法求解的。

5.1 学习算法

机器学习算法是一种能够从数据中学习的算法。这里所谓的“学习“是指:“如果计算机程序在任务 \(T\) 中的性能(以 \(P\) 衡量)随着经验 \(E\) 而提高,则可以说计算机程序从经验 \(E\) 中学习某类任务 \(T\) 和性能度量 \(P\)。”-来自 Mitchell (1997)

经验 \(E\),任务 \(T\) 和性能度量 \(P\) 的定义范围非常宽广,本文不做详细解释。

5.1.1 任务 \(T\)

从 “任务” 的相对正式的定义上说,学习过程本身不能算是任务。学习是我们所谓的获取完成任务的能力。机器学习可以解决很多类型的任务,一些非常常见的机器学习任务列举如下:

  1. 分类:在这类任务中,计算机程序需要指定某些输入属于 \(k\) 类中的哪一类,例如图像分类中的二分类问题,多分类、单标签问题、多分类多标签问题。
  2. 回归:在这类任务中,计算机程序需要对给定输入预测数值。为了解决这个任务,学习算法需要输出函数 \(f : \mathbb{R}^n \to \mathbb{R}\)。除了返回结果的形式不一样外,这类 问题和分类问题是很像的。
  3. 机器翻译
  4. 结构化输出
  5. 异常检测
  6. 合成和采样
  7. 去噪
  8. 密度估计或概率质量函数估计
  9. 输入缺失分类
  10. 转录
  11. 缺失值填补

5.1.2 性能度量 \(P\)

为了评估机器学习算法的能力,我们必须设计其性能的定量度量。通常,性能度量 \(P\) 特定于系统正在执行的任务 \(T\)

可以理解为不同的任务有不同的性能度量。

对于诸如分类、缺失输入分类和转录任务,我们通常度量模型的准确率(accu- racy)。准确率是指该模型输出正确结果的样本比率。我们也可以通过错误率(error rate)得到相同的信息。错误率是指该模型输出错误结果的样本比率。

我们使用测试集(test set)数据来评估系统性能,将其与训练机器学习系统的训练集数据分开。

值得注意的是,性能度量的选择或许看上去简单且客观,但是选择一个与系统理想表现能对应上的性能度量通常是很难的。

5.1.3 经验 \(E\)

根据学习过程中的不同经验,机器学习算法可以大致分类为无监督(unsuper-vised)算法和监督(supervised)算法。

无监督学习算法(unsupervised learning algorithm)训练含有很多特征的数据集,然后学习出这个数据集上有用的结构性质。在深度学习中,我们通常要学习生成数据集的整个概率分布,显式地,比如密度估计,或是隐式地,比如合成或去噪。 还有一些其他类型的无监督学习任务,例如聚类,将数据集分成相似样本的集合。

监督学习算法(supervised learning algorithm)也训练含有很多特征的数据集,但与无监督学习算法不同的是数据集中的样本都有一个标签(label)或目标(target)。例如,Iris 数据集注明了每个鸢尾花卉样本属于什么品种。监督学习算法通过研究 Iris 数据集,学习如何根据测量结果将样本划分为三个不同品种。

半监督学习算法中,一部分样本有监督目标,另外一部分样本则没有。在多实例学习中,样本的整个集合被标记为含有或者不含有该类的样本,但是集合中单独的样本是没有标记的。

大致说来,无监督学习涉及到观察随机向量 \(x\) 的好几个样本,试图显式或隐式地学习出概率分布 \(p(x)\),或者是该分布一些有意思的性质; 而监督学习包含观察随机向量 \(x\) 及其相关联的值或向量 \(y\),然后从 \(x\) 预测 \(y\),通常是估计 \(p(y | x)\)。术语监督学习(supervised learning)源自这样一个视角,教员或者老师提供目标 \(y\) 给机器学习系统,指导其应该做什么。在无监督学习中,没有教员或者老师,算法必须学会在没有指导的情况下理解数据。

无监督学习和监督学习并不是严格定义的术语。它们之间界线通常是模糊的。很多机器学习技术可以用于这两个任务。

尽管无监督学习和监督学习并非完全没有交集的正式概念,它们确实有助于粗略分类我们研究机器学习算法时遇到的问题。传统地,人们将回归、分类或者结构化输出问题称为监督学习。支持其他任务的密度估计通常被称为无监督学习。

表示数据集的常用方法是设计矩阵(design matrix)。

5.1.4 示例: 线性回归

我们将机器学习算法定义为,通过经验以提高计算机程序在某些任务上性能的算法。这个定义有点抽象。为了使这个定义更具体点,我们展示一个简单的机器学习示例: 线性回归(linear regression)。

顾名思义,线性回归解决回归问题。 换句话说,目标是构建一个系统,该系统可以将向量 \(x \in \mathbb{R}\) 作为输入,并预测标量 \(y \in \mathbb{R}\) 作为输出。在线性回归的情况下,输出是输入的线性函数。令 \(\hat{y}\) 表示模型预测值。我们定义输出为

\[\hat{y} = w^{⊤}x \tag{5.3} \]

其中 \(w \in \mathbb{R}^{n}\)参数(parameter)向量。

参数是控制系统行为的值。在这种情况下,\(w_i\) 是系数,会和特征 \(x_i\) 相乘之 后全部相加起来。我们可以将 \(w\) 看作是一组决定每个特征如何影响预测的权重 (weight)。

通过上述描述,我们可以定义任务 \(T\) : 通过输出 \(\hat{y} = w^{⊤}x\)\(x\) 预测 \(y\)

我们使用测试集test set)来评估模型性能如何,将输入的设计矩 阵记作 \(\textit{X}\)(test),回归目标向量记作 \(y\)(test)。

回归任务常用的一种模型性能度量方法是计算模型在测试集上的 均方误差(mean squared error)。如果 \(\hat{y}\)(test) 表示模型在测试集上的预测值,那么均方误差表示为:

\[MSE_{test} = \frac{1}{m} \sum_{i}(\hat{y}^{(test)}-y^{(test)})_{i}^{2} \tag{5.4} \]

直观上,当 \(\hat{y}^{(test)}\) = \(y^{(test)}\) 时,我们会发现误差降为 0。

图 5.1 展示了线性回归算法的使用示例。

图5.1-一个线性回归的例子

5.2 容量、过拟合和欠拟合

机器学习的挑战主要在于算法如何在测试集(先前未观测的新输入数据)上表现良好,而不只是在训练集上表现良好。在测试集(以前未观察到的输入)上表现良好的能力称为泛化generalization)。

我们通常通过在与训练集分开收集的测试集上测量其性能来估计机器学习模型的泛化误差。

机器学习算法的两个主要挑战是: 欠拟合underfitting)和过拟合overfitting)。

  • 欠拟合是指模型不能在训练集上获得足够低的误差。
  • 而过拟合是指训练误差和和测试误差之间的差距太大。

我们可以通过调整模型的容量capacity),来控制模型是否偏向于过拟合或者欠拟合。通俗地讲,模型的容量是指其拟合各种函数的能力。容量低的模型可能很难拟合训练集,容量高的模型可能会过拟合,因为记住了不适用于测试集的训练集性质。

一种控制训练算法容量的方法是选择假设空间(hypothesis space),即允许学习算法选择作为解决方案的一组函数。例如,线性回归算法将其输入的所有线性函数的集合作为其假设空间。我们可以推广线性回归以在其假设空间中包含多项式,而不仅仅是线性函数。这样做就增加模型的容量。

当机器学习算法的容量适合于所执行任务的复杂度和所提供训练数据的数量时,算法效果通常会最佳。容量不足的模型不能解决复杂任务。容量高的模型能够解决复杂的任务,但是当其容量高于任务所需时,有可能会过拟合。

图 5.2 展示了上述原理的使用情况。我们比较了线性,二次和 9 次预测器拟合真 实二次函数的效果。

图5-2三个模型拟合二次函数

统计学习理论提供了量化模型容量的不同方法。在这些中,最有名的是 Vapnik- Chervonenkis 维度(Vapnik-Chervonenkis dimension, VC)。VC 维度量二元分类 器的容量。VC 维定义为该分类器能够分类的训练样本的最大数目。假设存在 \(m\) 个 不同 \(x\) 点的训练集,分类器可以任意地标记该 \(m\) 个不同的 \(x\) 点,VC 维被定义为 \(m\) 的最大可能值。

因为可以量化模型的容量,所以使得统计学习理论可以进行量化预测。统计学习理论中最重要的结论阐述了训练误差和泛化误差之间差异的上界随着模型容量增长而增长,但随着训练样本增多而下降 (Vapnik and Chervonenkis, 1971; Vapnik, 1982; Blumer et al., 1989; Vapnik, 1995)。这些边界为机器学习算法可以有效解决问题提供了理论 验证,但是它们很少应用于实际中的深度学习算法。一部分原因是边界太松,另一部分原因是很难确定深度学习算法的容量。由于有效容量受限于优化算法的能力,所以确定深度学习模型容量的问题特别困难。而且我们对深度学习中涉及的非常普遍的非凸优化问题的理论了解很少。

虽然更简单的函数更可能泛化(训练误差和测试误差的差距小),但我们仍然必须选择一个足够复杂的假设来实现低训练误差。通常,随着模型容量的增加,训练误差会减小,直到它逐渐接近最小可能的误差值(假设误差度量具有最小值)。通常,泛化误差是一个关于模型容量的 U 形曲线函数。如下图 5.3 所示。

容量和误差之间的典型关系

5.2.1 没有免费午餐定理

机器学习的没有免费午餐定理Wolpert,1996)指出,对所有可能的数据生成分布进行平均,每个分类算法在对以前未观察到的点进行分类时具有相同的错误率。换句话说,在某种意义上,没有任何机器学习算法普遍优于其他任何算法

上述这个结论听着真的让人伤感,但庆幸的是,这些结论仅在我们考虑所有可能的数据生成分布时才成立。如果我们对实际应用中遇到的概率分布类型做出假设,那么我们可以设计出在这些分布上表现良好的学习算法

这意味着机器学习研究的目标不是找一个通用学习算法或是绝对最好的学习算法。反之,我们的目标是理解什么样的分布与人工智能获取经验的 “真实世界” 相关,什么样的学习算法在我们关注的数据生成分布上效果最好

总结:没有免费午餐定理清楚地阐述了没有最优的学习算法,即暗示我们必须在特定任务上设计性能良好的机器学习算法。

5.2.2 正则化

算法的效果不仅很大程度上受影响于假设空间的函数数量,也取决于这些函数的具体形式。

在假设空间中,相比于某一个学习算法,我们可能更偏好另一个学习算法。这 意味着两个函数都是符合条件的,但是我们更偏好其中一个。只有非偏好函数比偏好函数在训练数据集上效果明显好很多时,我们才会考虑非偏好函数。

我们可以加入权重衰减(weight decay)来修改线性回归的训练标准。新的代价函数 \(J(w)\) 定义如下:

\[J(w) = MSE_{train} + \lambda w^{⊤}w \tag{5.18} \]

\(\lambda\) 是超参数,需提前设置,其控制我们对较小权重的偏好强度。当 \(\lambda = 0\),我们没有任何偏好。\(\lambda\) 越大,则权重越小。最小化 \(J(w)\) 会导致权重的选择在拟合训练数据和较小权重之间进行权衡

简单来说,就是给代价函数添加正则化项(regularizer)的惩罚,即正则化一个学习函数为 \(f(x;\theta)\) 的模型。上述权重衰减的例子中,正则化项是 \(\Omega(w) = \lambda w^{⊤}w\)。 在后续的第七章,我们将学习其他的正则化项

我们将正则化定义为“对学习算法的修改-旨在减少泛化误差而不是训练误差”。正则化是机器学习领域的中心问题之一,只有优化能够与其重要性相媲。

和没有最优的学习算法一样,特别地,也没有最优的正则化形式。反之,我们必须挑选一个非常适合于我们所要解决的任务的正则形式。

5.3 超参数和验证集

超参数的值不是通过学习算法本身学习出来的,而是需要算法定义者手动指定的

5.3.1 验证集的作用

通常,80% 的训练数据用于训练,20% 用于验证。验证集是用于估计训练中或训练后的泛化误差,从而更新超参数

5.3.2 交叉验证

一个小规模的测试集意味着平均测试误差估计的统计不确定性,使得很难判断算法 A 是否比算法 B 在给定的任务上做得更好。解决办法是基于在原始数据上随机采样或分离出的不同数据集上重复训练和测试,最常见的就是 \(k\)-折交叉验证,即将数据集分成 \(k\) 个 不重合的子集。测试误差可以估计为 \(k\) 次计算后的平均测试误差。在第 \(i\) 次测试时, 数据的第 \(i\) 个子集用于测试集,其他的数据用于训练集。算法过程如下所示。

k 折交叉验证虽然一定程度上可以解决小数据集上测试误差的不确定性问题,但代价则是增加了计算量。

k-折交叉验证算法

5.4 估计、偏差和方差

统计领域为我们提供了很多工具来实现机器学习目标,不仅可以解决训练集上 的任务,还可以泛化。基本的概念,例如参数估计、偏差和方差,对于正式地刻画泛化、欠拟合和过拟合都非常有帮助。

5.4.1 点估计

5.4.2 偏差

5.4.4 权衡偏差和方差以最小化均方误差

偏差和方差度量着估计量的两个不同误差来源。偏差度量着偏离真实函数或参数的误差期望。而方差度量着数据上任意特定采样可能导致的估计期望的偏差。

偏差和方差的关系和机器学习容量、欠拟合和过拟合的概念紧密相联。用 MSE 度量泛化误差(偏差和方差对于泛化误差都是有意义的)时,增加容量会增加方差,降低偏差。如图 5.6 所示,我们再次在关于容量的函数中,看到泛化误差的 U 形曲线。

偏差方差泛化误差和模型容量的关系

参考资料

《深度学习》

版权声明 ©

本文作者嵌入式视觉

本文链接http://www.cnblogs.com/armcvai/p/17058654.html

版权声明:本文为「嵌入式视觉」的原创文章,首发于 github ,遵循 CC BY-NC-ND 4.0 版权协议,著作权归作者所有,转载请注明出处!

鼓励博主:如果您觉得文章对您有所帮助,可以点击文章右下角【推荐】一下。您的鼓励就是博主最大的动力!

本文转载于网络 如有侵权请联系删除

相关文章

  • Linux手动清除内存命令的方法

    Linux手动清除缓存的方法Linux长时间使用会导致cache缓存占用过大,甚至拖累CPU的使用率,可以通过命令手动释放Linux内存,详细教程如下:一:先查看下当前Linux的内存占用情况命令:free-m示例如下:[root@linuxbaike~]#free-m totalusedfreesharedbuff/cacheavailable Mem:1839305510010231381 Swap:102401024复制如上述例子所示,使用一台1核2G的云服务器做测试:total:是指计算机总物理内存; used:已用的内存; free:空余的内存; total=used+free shared:被多个进程共享的内存; buff/cache:buffers用于存放要输出到disk(块存储)的数据,在这里buff是指被OSbuffer住的内存(writtentodisk);cached存放从disk上读出的数据,Buffer和cache是为了提高IO性能并由OS管理。一般我们清理Linux缓存主要是清理buff/cache占用的内存资源。二:执行sync命令命令:sync执行syn

  • How to Allow Non-root Process to Bind to Low-numbered Ports

    UseCAP_NET_BIND_SERVICEtograntlow-numberedportaccesstoaprocess:Withthisyoucangrantpermanentaccesstoaspecificbinarytobindtolow-numberedportsviathesetcapcommand:1sudosetcapCAP_NET_BIND_SERVICE=+eip/path/to/binaryFormoredetailsonthee/i/ppart,seecap_from_text.Afterdoingthis,/path/to/binarywillbeabletobindtolow-numberedports.Notethatyoumustusesetcaponthebinaryitselfratherthanasymlink.FROM:https://superuser.com/questions/710253/allow-non-root-process-to-bind-to-port-80-and-443

  • Android获取热点主机ip和连接热点手机ip的代码

    其中定义WIFIAP的几个状态publicstaticfinalintWIFI_AP_STATE_DISABLING=10; publicstaticfinalintWIFI_AP_STATE_DISABLED=11; publicstaticfinalintWIFI_AP_STATE_ENABLING=12; publicstaticfinalintWIFI_AP_STATE_ENABLED=13; publicstaticfinalintWIFI_AP_STATE_FAILED=14;复制对应于WifiMangaer.java中对这几个状态的定义。获取WIFI热点的状态:publicintgetWifiApState(ContextmContext){ WifiManagerwifiManager=(WifiManager)mContext.getSystemService(Context.WIFI_SERVICE); try{ Methodmethod=wifiManager.getClass().getMethod("getWifiApState"); in

  • android实现录屏功能

    本文实例为大家分享了android实现录屏功能的具体代码,供大家参考,具体内容如下1、mian.activitypackagecom.fpt.screenvideo; importandroid.content.Context; importandroid.content.Intent; importandroid.graphics.Color; importandroid.media.projection.MediaProjectionManager; importandroid.support.v7.app.AppCompatActivity; importandroid.os.Bundle; importandroid.util.DisplayMetrics; importandroid.util.Log; importandroid.view.KeyEvent; importandroid.view.View; importandroid.widget.Button; importandroid.widget.CheckBox; importandroid.widget.Com

  • Kafka如何通过经典的内存缓冲池设计来优化JVM GC问题?

    大家都知道Kafka是一个高吞吐的消息队列,是大数据场景首选的消息队列,这种场景就意味着发送单位时间消息的量会特别的大,那既然如此巨大的数据量,kafka是如何支撑起如此庞大的数据量的分发的呢?今天我们从kafka架构以如何优化GC两个方面讲解.kafka架构既然要说kafka是如何通过内存缓冲池设计来优化JVM的GC问题,那么,如果不清楚kafka的架构设计,又怎么更好的调优呢?起码的我们要知道基础的才能往更好的出发呀,对吧?先来看一些技术名词:Topic:用于划分Message的逻辑概念,一个Topic可以分布在多个Broker上。Partition:是Kafka中横向扩展和一切并行化的基础,每个Topic都至少被切分为1个Partition。Offset:消息在Partition中的编号,编号顺序不跨Partition。Consumer:用于从Broker中取出/消费Message。Producer:用于往Broker中发送/生产Message。Replication:Kafka支持以Partition为单位对Message进行冗余备份,每个Partition都可以配置至少1个R

  • react核心api

    React核心apireact从16年12月开始,已经学了有2年多了。react引导了作者找到了第一份比较专职的前端工作。react2014年横空出世,以其革命性的写法,带动了前端行业的产业升级,尽管比较“重”,却也是笔者至今最喜欢的前端框架,没有之一。react独创了许多概念,比如diff算法,jsx等。启发了许多著名的框架。在react的哲学中,单向数据流是最好的数据模型。正是因为它处处设限,所以更好控制,更好维护。(writemore,domore.)简介官方脚手架:sudonpmicreate-react-app-g复制没有任何可配置选项。和vue提示一大堆配置相比,react干净简洁得令人窒息。实际上创建create-react-app你的项目名复制cd进去,npmstart即可。importReactfrom'react'; importReactDOMfrom'react-dom'; importAppfrom'./App'; import'./index.css'; ReactDOM.re

  • samba共享服务安装,开发可用映射

    1987年,微软公司和英特尔公司共同制定了SMB(ServerMessagesBlock,服务器消息块)协议,旨在解决局域网内的文件或打印机等资源的共享问题,这也使得在多个主机之间共享文件变得越来越简单。到了1991年,当时还在读大学的Tridgwell为了解决Linux系统与Windows系统之间的文件共享问题,基于SMB协议开发出了SMBServer服务程序。这是一款开源的文件共享软件,经过简单配置就能够实现Linux系统与Windows系统之间的文件共享工作。当时,Tridgwell想把这款软件的名字SMBServer注册成为商标,但却被商标局以SMB是没有意义的字符而拒绝了申请。后来Tridgwell不断翻看词典,突然看到一个拉丁舞蹈的名字—Samba,而且这个热情洋溢的舞蹈名字中又恰好包含了“SMB”,于是Samba服务程序的名字由此诞生(见图所示)。Samba服务程序现在已经成为在Linux系统与Windows系统之间共享文件的最佳选择。安装sambayuminstall-ysamba复制配置samba vi/etc/samba/smb.conf#Seesmb.conf.e

  • lodop打印技巧与注意事项 原

    打印前的准备工作 首先用Html和css把完整的打印页面写出,注意需要输入内容的地方要用input输入框,技术要点: 1、input的样式,由于input的默认样式每个浏览器显示不一样,既不美观也不统一,这里先统一input的样式 input[type="text"]{border:1pxsolid#ccc;padding-left:5px;height:20px;line-height:20px;} input:focus{border-color:#3c8dbc;box-shadow:none;outline:0;} //以上样式为bootstrap的input样式 2、打印预览的内容是input输入的内容,正常情况下,不管输入什么内容,打印预览的的内容都是input的初始value值,修改input的内容不改变html的value属性需要用js修改属性 $('input:text').each(function(i,n){    this.setAttribute('value',this.value);   }   )

  • “智齿”干细胞采集获四倍提升,帮助解决提取效率问题 | 黑科技

    因干细胞在医疗、美容等领域有奇效,它自身的价值推动了干细胞概念股的出现和广泛的投资,形成了干细胞产业链。背景|干细胞干细胞是一类具有自我复制能力的多潜能细胞,在一定条件下,它可以分化成多种功能细胞。其实,它就是一种不成熟的细胞,是细胞中的“孩子”,在日后的发展上具有巨大的潜能,因此医学界将其称为“万用细胞”。因干细胞在医疗、美容等领域有奇效,它自身的价值推动了干细胞概念股的出现和广泛的投资,形成了干细胞产业链。但是,目前该领域的相关业务主要集中在存储环节,对于采集方面则没有太多的政策和业务,因此在干细胞提取方面的研究项目相对来说也较少,故而提取效率低成为该行业链发展上的一块短板。干细胞提取|为什么选择“智齿”对于干细胞的提取难度,内华达大学拉斯维加斯分校(UNLV)的JamesMah博士解释道:“我们几乎可以从任何活组织中提取干细胞,事实上,甚至在死者的组织中也存在干细胞。但是,通常我们都是通过收集来提供治疗过程中所需要的量,因为无论从何处提取,我们面临的最大挑战就是提取效率低。”因为现有提取技术的限制,从牙齿中提取并不是最优的方案。伴随着现在矫正牙齿的人越来越多,拔牙是很常见的现象,

  • 进军人工智能 —疯狂的Python入门精讲

    2017年年底,一个“Python将纳入高考”的新闻在小编的朋友圈被刷屏,一时间,很多人奔走相告。消息的内容是:“近期,浙江省信息技术课程改革方案出台。从2018年起浙江省信息技术教材编程语言将会从VB更换为Python。这意味着Python确定进入浙江省信息技术高考。”其实不止浙江,教育大省北京和山东也确定要把Python编程基础纳入信息技术课程和高考的内容体系,Python语言课程化也将成为孩子学习的一种趋势。Python这几年的火热,离不开人工智能和机器学习。根据国务院《新一代人工智能发展规划的通知》,可以预见人工智能教育往低幼渗透的例子只会越来越多。小学生都在学Python作为一名前端工程师,还在等什么?人生苦短,Python当歌!NEXT讲坛就是为了帮助积极求学的同学们腾讯大牛助你一臂之力成就更好的自己!本次NEXT讲坛,由腾讯前端开发高级工程师——赖勇辉老师带来Python快速上手教程,感兴趣的同学们,快扫码报名学习吧! -直播时间-2月8日晚19:30开始-老师介绍-赖勇辉腾讯高级工程师,目前就职于IEG,在UI自动化测试开发和运营等领域拥有丰富经验,实现了适用于Wind

  • 绘制Crushmap分布图-Python

    原理使用命令cephreport--format=json>crush.json导出json格式数据文件,之后使用pydot和graphviz实现绘图。使用说明安装依赖pipinstallpydot pipinstallgraphviz复制脚本代码#-*-coding:utf-8-*- importpydot fromgraphvizimportDigraph importjson importsys classbuild_crushmap_graphviz(): """ 1.使用命令cephreport--format=json>crush.json导出数据文件 2.每种类型bucket一个颜色,不够自己去color_list里面添加,支持最多10级结构 3.生成的文件默认问png格式,文件保存在当前目录的crushmap.png """ def__init__(self): self.graph=pydot.Dot('ceph_crushmap',graph_type='digr

  • echarts圆套圆

    <template> <divclass="setPosition"> <divclass="pie_warp"> <h2>{{title}}</h2> <divid="myChart"v-if="dataSetArr"></div> <p> 当日已处理单量: <span>{{dealData.already}}</span>件 </p> <p> 当日预计剩余单量: <span>{{dealData.untreated}}</span>件 </p> </div> </div> </template> <script> importechartsfrom'echarts' exportdefault{ name:'pieCom', props:{ title:{ //标题 type:String, default:'南宁转运中心' }, dataSetArr:{

  • Qt实现同步(阻塞式)http get等网络访问操作

    从Qt4.4开始,引入了QNetworkRequest、QNetworkReply和QNetworkAccessManager等类来进行HTTP、FTP的操作,替代之前的QFtp和QHttp。很多情况下采用QNetworkAccessManager的finished信号构建异步方式。 1//构建一个manager对象 2QNetworkAccessManager*manager=newQNetworkAccessManager(this); 3//manager具有异步API,当http请求完成后,会通过finished信号进行通知 4connect(manager,&QNetworkAccessManager::finished,this,&MyClass::replyFinished); 5//发送异步get请求 6manager->get(QNetworkRequest(QUrl("http://qt-project.org"))); 7 8//这里也可以用一个QEventLoop来等待请求完成,但是我更爱用槽函数 9//QNetworkReply*rep

  • Mysql binlog的基本使用和数据库恢复步骤

    前言 简单记录下使用binlog的使用和恢复数据库的操作 开启binlog 开启mysqlbinlog日志,进入mysql配置文件(vi/etc/my.cnf)在mysqld区域内添加如下内容, #单个节点id server-id=1 #位置一般和mysql库文件所在位置一样 log-bin=/var/lib/mysql/mysql-bin #表示此日志保存时间为10天 expire_logs_days=10 复制 重启mysqld,再次查看binlog日志开启状态为ON binlog常用命令 showvariableslike'%log_bin%';//查看binlog开启状态 showvariableslike'%datadir%';//查看binlog存放日志文件目录 showmasterlogs;//查看所有binlog日志文件列表 showbinlogeventsin‘mysql-bin.000003’;//查看binglog日志内容 Flushlogs//刷新日志 复制 恢复数据库 一般流程 备份数据库=>刷新binlog=>操作失误=>使用mysqlbi

  • 开心的金明 NOIP 2006 普及组

    题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”。今天一早金明就开始做预算,但是他想买的东西太多了,肯定会超过妈妈限定的N元。于是,他把每件物品规定了一个重要度,分为5等:用整数1~5表示,第5等最重要。他还从因特网上查到了每件物品的价格(都是整数元)。他希望在不超过N元(可以等于N元)的前提下,使每件物品的价格与重要度的乘积的总和最大。 设第j件物品的价格为v[j],重要度为w[j],共选中了k件物品,编号依次为j1,j2,……,jk,则所求的总和为: v[j1]*w[j1]+v[j2]*w[j2]+…+v[jk]*w[jk]。(其中*为乘号) 请你帮助金明设计一个满足要求的购物单。 输入输出格式 输入格式:输入的第1行,为两个正整数,用一个空格隔开: Nm(其中N(<30000)表示总钱数,m(<25)为希望购买物品的个数。) 从第2行到第m+1行,第j行给出了编号为j-1的物品的基本数据,每行有2个非负整数 vp(其中v表示

  • 聪明的质监员(codevs 1138)题解

    【问题描述】 小T是一名质量监督员,最近负责检验一批矿产的质量。这批矿产共有n个矿石,从1到n逐一编号,每个矿石都有自己的重量wi以及价值vi。检验矿产的流程是:见图 若这批矿产的检验结果与所给标准值S相差太多,就需要再去检验另一批矿产。小T不想费时间去检验另一批矿产,所以他想通过调整参数W的值,让检验结果尽可能的靠近标准值S,即使得S-Y的绝对值最小。请你帮忙求出这个最小值。 【样例输入】   5315  15  25  35  45  55  15  24  33 【样例输出】   10 【解题思路】   本题为NOIP2011day2第二题,可能很多人不会的原因是因为公式看不懂,先解释一下,Yi的公式是指(符合条件的j的总数)*(vj的和)。现在我们来分析一下题目。题目中说,让我们找一个合适的W的值使得Yi的和与给定的S之差的绝对值最小。由于题目中说j的要求是区

  • 周报5.22—5.29

    两道二分题: 在此之前我对于二分的理解还是比较浅薄的,或者说啥也不懂,以为二分就是对有序元素列的查找方法。但实际上二分的应用并不这么简单,比如根据二分法的有界性,我们可以对需要求解满足限制条件的极值的最大值或者最小值的问题应用二分。   例题1: 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石。组委会已经选择好了两块岩石作为比赛起点和终点。在起点和终点之间,有N块岩石(不含起点和终点的岩石)。在比赛过程中,选手们将从起点出发,每一步跳向相邻的岩石,直至到达终点。 为了提高比赛难度,组委会计划移走一些岩石,使得选手们在比赛过程中的最短跳跃距离尽可能长。由于预算限制,组委会至多从起点和终点之间移走M块岩石(不能移走起点和终点的岩石)。   输入格式以及样例: 第一行包含三个整数L,N,M分别表示起点到终点的距离,起点和终点之间的岩石数,以及组委会至多移走的岩石数。保证L≥1且N≥M≥0。 接下来 N行,每行一个整数,第 i行的整数 Di​(0<Di​<L),表示第 i 块岩石与起点的距离。这些岩石

  • APS段位之一----供应链拖动

  • 手机端打开调试工具,模拟console.log

     将下列代码考入需要调试页面即可 <scriptsrc="//cdn.jsdelivr.net/npm/eruda"></script> <script> eruda.init(); console.log('控制台打印信息'); </script> 复制    转自https://www.cnblogs.com/sophiehui/p/7880882.html

  • 强哥node.js学习笔记

    node后端语言: nodejs学习大纲:1.node安装2.noderepl开发3.nodesublime开发4.node使用5.node中创建第一个应用6.node回调函数7.node事件循环8.nodeevent事件9.node模块系统10.node函数11.node路由12.node全局对象13.node文件系统14.nodeget和post请求15.node工具模块16.nodeweb模块17.html5+js+jsonp+php+node+mysql完成综合项目 -------------------------------------------------------node和js关系:(http://www.techug.com/php-vs-node-js)1.php开发简单2.node执行简单快 dos命令:starthttp://www.baidu.com//打开链接tasklist//查看进程taskkill/f/imchrome.exe//杀死进程netstat-ano|find"4445"//查看指定端口 rpel开发:1.执行js代码node>ar

  • QT5:网络

    QNetworkAccessManager的post方法 多线程同步异步复制   八.QT5多线程和多进程 1.多线程   QThread是Qt线程中一个公共的抽象类,所有的线程类都是从QThread抽象类中派生的,需要实现QThread中的虚函数run(),通过调用start()函数 QThread对多线程的支持: 1.QThreadStorage提供逐线程数据存储 2.QMutex互斥锁 3.QMutexLocker自动互斥锁 4.QReadLocker和QWriteLocker自动读写锁 5.QReadWriteLocker读写锁 6.QSemphore互斥信号量 7.QWaiteCondition等待条件复制   2.多进程 QT通过QProcess类来启动一个程序与其通信 QT对多进程的支持: 1.共享内存(sharedmemory) 2.TCP/IP:C/S程序,网络交互 3.D-Bus:信号槽机制扩展到进程级别 4.QCOP(QtCOmmunicationProtocol):QCOP是Qt内部的一

相关推荐

推荐阅读