微石的碎碎念

  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 站点地图

  • 仓库

初识深度学习

发表于 2018-07-08 | 更新于 2018-07-19 | 评论数:

传统的机器学习再许多问题上都有良好效果,但却无法解决人工智能的关键问题,如语音识别、对象识别等。于是,深度学习应运而生。

维数灾难

当数据的维数很高时,很多机器学习问题变得相当困难。在低维空间,仅需要少量样本便可将样本空间填充得非常稠密,随着维度得增加需要的样本数则是指数型增长的趋势,很显然我们无法在收集数据上花费如此大量的时间,少量样本在高维空间的系数存在将导致模型的繁华能力很弱。

局部不变性和平滑正则化

机器学习中我们一般会通过先验经验来决定学习什么样的函数集,许多模型完全依靠这些先验获得良好的泛化。其中最广泛使用的隐式 ‘‘先验’’ 是平滑先验(smoothness prior),或局部不变性先验(local constancy prior)。这个先验表明我们学习的函数不应在小区域内发生很大的变化。

阅读全文 »

机器学习之感知机

发表于 2018-07-03 | 更新于 2018-07-19 | 评论数:

感知机(perceptron)是二类分类的线性分类模型,其输入为实例的特征向量,输出为实例的类别,取+1和-1二值。感知机对应于输入空间中将实例划分为正负两类的分离超平面,属于判别模型。感知机学习旨在求出将训练数据进行线性划分的分离超平面,为此导入了基于误分类的损失函数,利用梯度下降法对损失函数进行极小化,求得感知机模型。感知机学习算法具有简单而易于实现的优点,分为原始形式和对偶形式。感知机预测是用学习得到的感知基模型对新的输入实例进行分类。感知机是神经网络与支持向量机的基础。

感知机模型

$$f(x) = sign(w \cdot x + b)$$
其中 sign 为符号函数,输出值为$+1,-1$。

感知机的几何解释为:使用线性函数$w \cdot x + b=0$作为超平面将特征空间的点分为正负两类。其中$w$代表权值向量,即超平面的法向量,b表示偏置,几何意义为超平面的截距。

感知机为线性模型,要求正负样本必须线性可分。

阅读全文 »

机器学习之聚类

发表于 2018-07-01 | 更新于 2018-07-29 | 评论数:

聚类

聚类试图将数据集中的样本划分为若干个通常是不相交的子集,每个子集称为一个“簇”(cluster),每个簇可能对应于一些潜在的概念(类别),需说明的是,这些概念对聚类算法而言事先是未知的,聚类过程仅能自动形成簇结构,簇所对应的概念语义需由使用者来把握和命名。

无监督学习

聚类是研究最多应用最广的无监督学习,在“无监督学习”(unsupervised learning)中,训练样本的标记信息是未知的,目标是通过对无标记训练样本的学习来揭示数据的内在性质及规律,为进一步的数据分析提供基础。

无监督学习有:

  1. 聚类
  2. 密度估计
  3. 异常检测

无监督与监督的区别

  1. 监督学习(supervised learning):通过已有的训练样本(即已知数据以及其对应的输出)进行算法模型重构。
  2. 无监督学习(unsupervised learning):我们事先没有任何训练数据样本,需要直接对数据进行建模。用模型来揭示数据的内在性质及规律。
阅读全文 »

机器学习模型之逻辑回归

发表于 2018-06-30 | 更新于 2018-07-20 | 评论数:

逻辑回归

如何使用线型模型进行分类操作?我们希望可以使用一个映射函数将线型模型的回归值用于分类问题(即只输出两个类别)。最简单的映射函数便是阶跃函数,但阶跃函数在x=0处不连续,因此需要另一个函数替代。

sigmoid函数

$$y = \dfrac{1}{1 + e^{-x}}$$
把 $ (-\infty, \infty)$ 的取值范围(用$x$表示)映射到$(0,1)$范围内,同时连续且任意阶可导。

拓展:为什么要使用sigmoid函数做激活函数?:https://blog.csdn.net/cloud_xiaobai/article/details/72152480

将sigmoid函数代入线型回归方程中
$$y=\omega^Tx+b$$
可得:
$$y=\dfrac{1}{1 + e^{-(\omega^Tx+b)}}$$
上式可变为
$$\ln{\frac{y}{1-y}}=\omega^Tx+b$$
若将$y$视为样本$x$作为正例的可能性,则$1-y$是其反例可能性,两者的比值称为“几率”(odds),反映了$x$作为正例的相对可能性。

阅读全文 »

机器学习之高斯混合模型

发表于 2018-06-26 | 更新于 2018-07-25 | 评论数:

前言

极大似然估计:只是一种概率论在统计学的应用,它是参数估计的方法之一。说的是已知某个随机样本满足某种概率分布,但是其中具体的参数不清楚,则可通过极大似然估计来估计模型的参数。

参数估计:通过若干次试验,观察其结果,利用结果推出参数的大概值。

最大似然估计:已知某个参数能使这个样本出现的概率最大,我们当然不会再去选择其他小概率的样本,所以干脆就把这个参数作为估计的真实值。

高斯分布

高斯分布(Gaussian distribution)有时也被称为正态分布(normal distribution),是一种在自然界大量的存在的、最为常见的分布形式。
其概率密度函数为:
$$f\left( x\right) =\dfrac {1}{\sqrt {2\pi }\sigma }\exp \left( -\dfrac {\left( x-\mu \right)^2 }{2\sigma ^{2}}\right)$$
如果随机变量服从的正态分布,记作$X\sim N\left( \mu ,\sigma ^{2}\right)$

可见高斯分布包含两个参数,参数μ表示均值,参数σ表示标准差。

阅读全文 »

C++map常见用法

发表于 2018-06-25 | 更新于 2018-07-19 | 评论数:

map

C++中的map,相当于python中的dic,是键-值对的组合,map内部自建一颗红黑树,查找效率为$O(\log n)$,下面将简单介绍map的常见用法。

map的定义于初始化

1
2
3
map<T1,T2> m; #定义map,eg:map<int,int> m;
map<T1,T2> m(map1); #拷贝构造map1的副本
map<T1,T2> m(b, e); #通过迭代器拷贝构造map,eg:map<T1,T2> m(map1.begin(), map1.end())

插入元素

insert

1
2
m.insert(pair)
m.insert(value_type)

举个例子

1
2
3
4
map1.insert(pair<int, int>(1, 10));
map1.insert(make_pair(2, 20))
map1.insert(map<int, int>::value_type (3, 30));
#insert只能插入不存在元素

阅读全文 »

C++ new与malloc 区别

发表于 2018-06-25 | 更新于 2018-07-19 | 评论数:

本文参考自:http://blog.csdn.net/linux_ever/article/details/50533149

内存分配机制

  1. 栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
  2. 堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。
  3. 全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后由系统释放。
  4. 文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放
  5. 程序代码区—存放函数体的二进制代码。

栈区与堆区的区别:

  1. 堆和栈中的存储内容:栈存局部变量、函数参数等。堆存储使用new、malloc申请的变量等;

  2. 申请方式:栈内存由系统分配,堆内存由自己申请;

  3. 申请后系统的响应:栈——只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。
    堆——首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表 中删除,并将该结点的空间分配给程序;

  4. 申请大小的限制:Windows下栈的大小一般是2M,堆的容量较大;

  5. 申请效率的比较:栈由系统自动分配,速度较快。堆使用new、malloc等分配,较慢;

总结:栈区优势在处理效率,堆区优势在于灵活;

阅读全文 »

【转载】one-key-kms 部署以及激活win-office教程

发表于 2018-06-16 | 更新于 2018-07-19 | 评论数:

信息来自 Hostloc 的兔子,脚本来源于 Github,作者为 dakkidaze。基于 vlmcsd 软件。
使用方法
本文转载自Leonn 的博客

安装 KMS 服务

  • CentOS,Redhat,Fedora 等请选择 CentOS 脚本

    1
    2
    3
    wget https://raw.githubusercontent.com/dakkidaze/one-key-kms/master/one-key-kms-centos.sh
    chmod +x one-key-kms-centos.sh
    ./one-key-kms-centos.sh
  • Debian,Ubuntu,Mint 等请选择 Debian 脚本

    1
    2
    3
    wget https://raw.githubusercontent.com/dakkidaze/one-key-kms/master/one-key-kms-debian.sh
    chmod +x one-key-kms-debian.sh
    ./one-key-kms-debian.sh
  • 启动 KMS 服务

    1
    2
    3
    wget https://raw.githubusercontent.com/dakkidaze/one-key-kms/master/kms.sh
    chmod +x kms.sh
    ./kms.sh start
阅读全文 »

CFD湍流模拟

发表于 2018-06-16 | 更新于 2018-07-19 | 评论数:

湍流

什么是湍流

湍流是流体的一种流动状态。当流速很小时,流体分层流动,互不混合,称为层流,也称为稳流或片流;逐渐增加流速,流体的流线开始出现波浪状的摆动,摆动的频率及振幅随流速的增加而增加,此种流况称为过渡流;当流速增加到很大时,流线不再清楚可辨,流场中有许多小漩涡,层流被破坏,相邻流层间不但有滑动,还有混合。这时的流体作不规则运动,有垂直于流管轴线方向的分速度产生,这种运动称为湍流,又称为乱流、扰流或紊流。

湍流是在大雷诺数下发生的,雷诺数较小时,黏滞力对流场的影响大于惯性力,流场中流速的扰动会因黏滞力而衰减,流体流动稳定,为层流;反之,若雷诺数较大时,惯性力对流场的影响大于黏滞力,流体流动较不稳定,流速的微小变化容易发展、增强,形成紊乱、不规则的湍流流场。

阅读全文 »

二叉树的常见遍历以及面试题总结

发表于 2018-06-15 | 更新于 2018-07-19 | 评论数:

本文总结了二叉树的常见遍历方式,以及剪枝offer上的一些有关二叉树的面试题。

  1. 前序:中$\rightarrow$左$\rightarrow$右
  2. 中序:左$\rightarrow$中$\rightarrow$右
  3. 后序:左$\rightarrow$右$\rightarrow$中
  4. 层序遍历:第一层$\rightarrow$第二层$\rightarrow$第三层$\rightarrow$第n层(每层从做到右)

前序、中序、后序

树的遍历分递归实现与非递归实现:

  1. 递归实现:递归实现树的遍历,只需按照顺序依次递归即可,较为简单。
  2. 非递归实现:非递归实现需要用到STL容器,按照容器特性依次将树的节点放入容器中。
    1. stack容器:先进后出的特性
      • 先序遍历:应按右左的顺序将一个节点的子节点放入容器中,这样可保证左节点先于右节点取出。
      • 中序遍历:从根节点开始依次将节点的左节点放入栈,
阅读全文 »
1234…7
微石

微石

吾本逍遥

65 日志
28 标签
GitHub E-Mail
© 2018 微石
由 Hexo 强力驱动 v3.3.9
|
主题 — NexT.Gemini v6.2.0