矩阵分解(一):奇异值分解

李新春 发表了文章 • 2 个评论 • 207 次浏览 • 2017-04-29 12:40 • 来自相关话题

    由于涉及到大量数学公式,用Latex生成pdf文件,这里贴出pdf转换出来的png图片。附件里面有完整的pdf和代码文件。



















  pdf里面并没有贴出代码,这里贴出源文件的代码,代码很简单,只是简单地对svd进行了测试。下面是代码文件和输出结果:
  svd.py文件:
import numpy as np
import time
# 利用numpy包自带的svd实现,第二个参数表示是否打印出矩阵
def np_svd(matrix,printInfo=True):
    print('np_svd:')
    start = time.clock()
    u,sigma,v = np.linalg.svd(matrix)
    end = time.clock()
    print('shape:',matrix.shape,'=',u.shape,'*',sigma.shape,'*',v.shape)
    print('time:',end-start)
    if(printInfo):
        print(matrix)
        print(u)
        print(sigma)
        print(v)
if __name__ == "__main__":
    # 测试矩阵秩为行满秩或列满秩的情况
    a = np.array([[-1,3,4],
                  [2,-5,8],
                  [-3,-7,-2],
                  [2,4,-3]])
    np_svd(a)
    
    # 测试秩小于行数和列数的矩阵
    b = np.array([[-1,3,4],
                  [2,-5,8],
                  [-2,6,8],
                  [0,1,16]])
    np_svd(b)
    
    # 测试矩阵分解的时间
    for ex in range(1,4):
        m = 3 * 10 ** ex         # 3乘以10的ex次方
        n = 4 * 10 ** ex         # 4乘以10的ex次方
        matrix = np.random.normal(size=(m,n))  # 正态分布
        np_svd(matrix,False)
    测试结果:       
'''
# 满秩情况下的测试:输入矩阵为4*3
np_svd:
shape: (4, 3) = (4, 4) * (3,) * (3, 3)
time: 0.001563813577831752
[[-1  3  4]
 [ 2 -5  8]
 [-3 -7 -2]
 [ 2  4 -3]]
[[ 0.03492724  0.50564699 -0.74831887  0.42792532]
 [ 0.80692855  0.38784734  0.40536499  0.18471597]
 [ 0.37135366 -0.7637849  -0.22588836  0.47718292]
 [-0.45797693  0.10260697  0.47399636  0.74502107]]
[ 11.06047807   8.73915881   3.36049521]
[[-0.0407835  -0.75595687  0.65334977]
 [ 0.31657696  0.61042791  0.72605564]
 [ 0.94768968 -0.23644657 -0.21442314]]
# 不满秩的分解,可以看出sigma矩阵[  2.00999029e+01   8.71744817e+00   2.11044410e-16](由于是对角矩阵,采用向量存储),可以看出第三个奇异值已经趋于零了,可以说就是零
np_svd:
shape: (4, 3) = (4, 4) * (3,) * (3, 3)
time: 0.0001338945396582858
[[-1  3  4]
 [ 2 -5  8]
 [-2  6  8]
 [ 0  1 16]]
[[ 0.21486784  0.31094848  0.90774033 -0.18207238]
 [ 0.3668635  -0.71292939  0.03774797 -0.59642095]
 [ 0.42973567  0.62189696 -0.41612219 -0.50538476]
 [ 0.79659917 -0.09103243 -0.03774797  0.59642095]]
[  2.00999029e+01   8.71744817e+00   2.11044410e-16]
[[-0.01694596  0.10872188  0.99392776]
 [-0.34191212  0.93351191 -0.10794265]
 [-0.93957913 -0.34166514  0.02135407]]
# 测试30*40 300*400 3000*4000 30000*40000矩阵的分解时间(s),分别为0.0011336715375591666、 0.03374235704779949、37.49550263636945。可见3000*4000已经用了半分钟,当测试30000*40000时,计算机全卡了,结果等了大概五分钟没有出结果,所以直接强制关机。可见矩阵分解操作计算了特别大。
np_svd:
shape: (30, 40) = (30, 30) * (30,) * (40, 40)
time: 0.0011336715375591666
np_svd:
shape: (300, 400) = (300, 300) * (300,) * (400, 400)
time: 0.03374235704779949
np_svd:
shape: (3000, 4000) = (3000, 3000) * (3000,) * (4000, 4000)
time: 37.49550263636945
'''

  查看全部
    由于涉及到大量数学公式,用Latex生成pdf文件,这里贴出pdf转换出来的png图片。附件里面有完整的pdf和代码文件。
奇异值分解1.png


奇异值分解2.png


奇异值分解3.png


奇异值分解4.png

  pdf里面并没有贴出代码,这里贴出源文件的代码,代码很简单,只是简单地对svd进行了测试。下面是代码文件和输出结果:
  svd.py文件:
import numpy as np
import time
# 利用numpy包自带的svd实现,第二个参数表示是否打印出矩阵
def np_svd(matrix,printInfo=True):
    print('np_svd:')
    start = time.clock()
    u,sigma,v = np.linalg.svd(matrix)
    end = time.clock()
    print('shape:',matrix.shape,'=',u.shape,'*',sigma.shape,'*',v.shape)
    print('time:',end-start)
    if(printInfo):
        print(matrix)
        print(u)
        print(sigma)
        print(v)
if __name__ == "__main__":
    # 测试矩阵秩为行满秩或列满秩的情况
    a = np.array([[-1,3,4],
                  [2,-5,8],
                  [-3,-7,-2],
                  [2,4,-3]])
    np_svd(a)
    
    # 测试秩小于行数和列数的矩阵
    b = np.array([[-1,3,4],
                  [2,-5,8],
                  [-2,6,8],
                  [0,1,16]])
    np_svd(b)
    
    # 测试矩阵分解的时间
    for ex in range(1,4):
        m = 3 * 10 ** ex         # 3乘以10的ex次方
        n = 4 * 10 ** ex         # 4乘以10的ex次方
        matrix = np.random.normal(size=(m,n))  # 正态分布
        np_svd(matrix,False)
    测试结果:       
'''
# 满秩情况下的测试:输入矩阵为4*3
np_svd:
shape: (4, 3) = (4, 4) * (3,) * (3, 3)
time: 0.001563813577831752
[[-1  3  4]
 [ 2 -5  8]
 [-3 -7 -2]
 [ 2  4 -3]]
[[ 0.03492724  0.50564699 -0.74831887  0.42792532]
 [ 0.80692855  0.38784734  0.40536499  0.18471597]
 [ 0.37135366 -0.7637849  -0.22588836  0.47718292]
 [-0.45797693  0.10260697  0.47399636  0.74502107]]
[ 11.06047807   8.73915881   3.36049521]
[[-0.0407835  -0.75595687  0.65334977]
 [ 0.31657696  0.61042791  0.72605564]
 [ 0.94768968 -0.23644657 -0.21442314]]
# 不满秩的分解,可以看出sigma矩阵[  2.00999029e+01   8.71744817e+00   2.11044410e-16](由于是对角矩阵,采用向量存储),可以看出第三个奇异值已经趋于零了,可以说就是零
np_svd:
shape: (4, 3) = (4, 4) * (3,) * (3, 3)
time: 0.0001338945396582858
[[-1  3  4]
 [ 2 -5  8]
 [-2  6  8]
 [ 0  1 16]]
[[ 0.21486784  0.31094848  0.90774033 -0.18207238]
 [ 0.3668635  -0.71292939  0.03774797 -0.59642095]
 [ 0.42973567  0.62189696 -0.41612219 -0.50538476]
 [ 0.79659917 -0.09103243 -0.03774797  0.59642095]]
[  2.00999029e+01   8.71744817e+00   2.11044410e-16]
[[-0.01694596  0.10872188  0.99392776]
 [-0.34191212  0.93351191 -0.10794265]
 [-0.93957913 -0.34166514  0.02135407]]
# 测试30*40 300*400 3000*4000 30000*40000矩阵的分解时间(s),分别为0.0011336715375591666、 0.03374235704779949、37.49550263636945。可见3000*4000已经用了半分钟,当测试30000*40000时,计算机全卡了,结果等了大概五分钟没有出结果,所以直接强制关机。可见矩阵分解操作计算了特别大。
np_svd:
shape: (30, 40) = (30, 30) * (30,) * (40, 40)
time: 0.0011336715375591666
np_svd:
shape: (300, 400) = (300, 300) * (300,) * (400, 400)
time: 0.03374235704779949
np_svd:
shape: (3000, 4000) = (3000, 3000) * (3000,) * (4000, 4000)
time: 37.49550263636945
'''

 

[转载]降维方法t-SNE

王开新 发表了文章 • 0 个评论 • 159 次浏览 • 2017-04-16 20:43 • 来自相关话题

http://lvdmaaten.github.io/tsne/
 
第一眼就被MNIST上的效果震撼住了 查看全部
http://lvdmaaten.github.io/tsne/
 
第一眼就被MNIST上的效果震撼住了

[转载]词向量和语言模型

王开新 发表了文章 • 1 个评论 • 60 次浏览 • 2017-04-16 19:42 • 来自相关话题

好文转载
http://licstar.net/archives/328

[转载]推荐系统算法小结

王开新 发表了文章 • 0 个评论 • 60 次浏览 • 2017-04-15 16:58 • 来自相关话题

好文转载
http://bdsc.lab.uic.edu/docs/survey-critique-deep.pdf
 

[转载]CS231n卷积神经网络Lecture notes

王开新 发表了文章 • 0 个评论 • 142 次浏览 • 2017-04-10 11:20 • 来自相关话题

http://cs231n.github.io/convolutional-networks/
写的很详细,适合先看过一遍视频后再去复习一遍(视频在网易云课堂上有)
同时上传了份PDF版的
http://cs231n.github.io/convolutional-networks/
写的很详细,适合先看过一遍视频后再去复习一遍(视频在网易云课堂上有)
同时上传了份PDF版的

第三篇--加法模型与提升方法boost

韩韬 发表了文章 • 3 个评论 • 268 次浏览 • 2017-03-24 23:43 • 来自相关话题

    开始记录算法,和前两篇相比是不是有点太突然?(本文断断续续写了一天,今天上三节课都迟到了……老油条的感慨)
    了解一个领域最重要的就是知道它的思维方式以及它在做什么事情。通过一些积累和总结,我们知道了机器学习就是认为:在掌握的数据和我们的任务之间存在某一个模式,我们要利用机器,学习出这个模式。
     我们仔细审视这句话。问题一:这些数据可以表达出这样的模式吗?问题二:机器怎怎么学习?问题三:怎样判断学出的这个模式的好坏?
     这几个问题会引申出很多讨论。问题一的回答引向数据清洗、特征工程,这决定了学习机器表现的上限;问题二的回答引出算法与优化,重要性不言而喻;问题三的回答引出性能评价方法,通常从具体任务的特性中抽象出来。

     上面的话基本……额……不是今天主要的内容。
     今天想讨论问题二——算法与优化,内容并不符合正常的学习顺序





一、加法模型
(注意:不同于统计学时间序列处理的加法模型)
基本逻辑:
      生活中有很多复杂的事情,单项较弱的个人能力,解决起来总是会有盲点,因此我们就想找人商量商量,组合成强的能力——“三个臭皮匠顶个诸葛亮”嘛(一只小企鹅不行,四个小企鹅就很(。・∀・)ノ゙嗨了)。这是下面我们开展工作的自然的逻辑。数学抽象为:





(M个人每个人的重要性是β(m),γ(m)是这个人的特点,x是这个问题,此人的建议就是b(x;γ(m)))
好的,以上就是加法模型, 的确就是这么简单。下面变换个说法,用基学习器代替人,用学习器权重代替重要性,每个人的特点就是学习器的参数,x就是训练数据集。
       有时候做分类任务时,弱分类器好做,强分类器难做,就适用加法模型了。但是弱分类器不能太差(比如精度小于50%),那说明和随机猜测没什么分别,不能饥不择食。
       不过实质上,还有更多的事情需要处理。显然的两个问题:第一、找什么样人讨论?(基学习器怎么生成)第二、每个人重要性怎么定(权重怎么确定)?这就是我们需要做的真正复杂的工作。
      思考:如果学习器都有同样的优缺点,那就造成冗余,而且没有提高的可能。所以最好是什么情况:各有所长,互缺点互补。(就算是十个臭皮匠,组合之后最多也是开一个臭·皮匠の店)
       好,那我们就利用数学和算法实现这个想法。
       首先,我们量化一下所谓的缺点,它的表示形式应当是训练中预测值与真实值的差距,也就是损失函数  L( y,f(x) ) (loss between real y and prediction f(x)).我们要把它降到最小,也就是:




       这个东西怎么求最小?有求和的公式,很复杂。利用算法思想——前向分步算法。前向就是沿着计算方向向前进行,不断加入新的学习器,分步就是一步一步优化总学习器。我们只需要在第m步(m>=1)求解参数β和γ,这就方便使得新加进学习器之后模型损失最小:




(一步步积累模型,在已有的f(m-1)基础上优化 f(m-1)+βb(x;γ). 显然这是一个greedy strategy)
以下算法描述来自《统计学习方法》




损失函数如何求最小值,这就需要数学解答了。通常没有约束容易求导,会使用梯度下降;有约束条件,常用拉格朗日橙子(杠掉)乘子,转化为对偶问题(dual problem)。




二、提升方法(boost)
当你理解加法模型后,你就知道,加法模型本身就是一种提升方法。
事实上,著名的Adaboost本身就是加法模型的特例。不过Adaboost我更感觉像是从一个学习器出发,根据他的弱点构造互补型学习器,最后将其进行加权线性组合。如何根据他的弱点构造呢?就是将前任做错的事情强迫他更“认真地”去做(加大分类错误样本惩罚权重)。具体的过程很有意思,可以看一看。
提升方法中对于树模型的提升研究较多。对于错误(损失函数)和"有错就改"这个思想的表达的不同分为很多boost算法。如下图所示:




需要说明的是,提升方法太多了,后面可能会讲的模型融合方法bagging、stacking、boosting……这是一个很广泛的理念。
 
不过这里实在是写不下了,我就不写了(费马脸.jpg)
其实整个学习过程就是一个自我教育的过程,机器学习应当归属教育学。
微信阅读不是很深刻,所以留条活路,写得轻松一点。
转载请 联系 注明(字字看来皆是困,一天辛苦不寻常)
不是很烦,可以关注





  查看全部
    开始记录算法,和前两篇相比是不是有点太突然?(本文断断续续写了一天,今天上三节课都迟到了……老油条的感慨)
    了解一个领域最重要的就是知道它的思维方式以及它在做什么事情。通过一些积累和总结,我们知道了机器学习就是认为:在掌握的数据和我们的任务之间存在某一个模式,我们要利用机器,学习出这个模式。
     我们仔细审视这句话。问题一:这些数据可以表达出这样的模式吗?问题二:机器怎怎么学习?问题三:怎样判断学出的这个模式的好坏?
     这几个问题会引申出很多讨论。问题一的回答引向数据清洗、特征工程,这决定了学习机器表现的上限;问题二的回答引出算法与优化,重要性不言而喻;问题三的回答引出性能评价方法,通常从具体任务的特性中抽象出来。

     上面的话基本……额……不是今天主要的内容。
     今天想讨论问题二——算法与优化,内容并不符合正常的学习顺序

0.png

一、加法模型
(注意:不同于统计学时间序列处理的加法模型)
基本逻辑:
      生活中有很多复杂的事情,单项较弱的个人能力,解决起来总是会有盲点,因此我们就想找人商量商量,组合成强的能力——“三个臭皮匠顶个诸葛亮”嘛(一只小企鹅不行,四个小企鹅就很(。・∀・)ノ゙嗨了)。这是下面我们开展工作的自然的逻辑。数学抽象为:

1.png

(M个人每个人的重要性是β(m),γ(m)是这个人的特点,x是这个问题,此人的建议就是b(x;γ(m)))
好的,以上就是加法模型, 的确就是这么简单。下面变换个说法,用基学习器代替人,用学习器权重代替重要性,每个人的特点就是学习器的参数,x就是训练数据集。
       有时候做分类任务时,弱分类器好做,强分类器难做,就适用加法模型了。但是弱分类器不能太差(比如精度小于50%),那说明和随机猜测没什么分别,不能饥不择食。
       不过实质上,还有更多的事情需要处理。显然的两个问题:第一、找什么样人讨论?(基学习器怎么生成)第二、每个人重要性怎么定(权重怎么确定)?这就是我们需要做的真正复杂的工作。
      思考:如果学习器都有同样的优缺点,那就造成冗余,而且没有提高的可能。所以最好是什么情况:各有所长,互缺点互补。(就算是十个臭皮匠,组合之后最多也是开一个臭·皮匠の店)
       好,那我们就利用数学和算法实现这个想法。
       首先,我们量化一下所谓的缺点,它的表示形式应当是训练中预测值与真实值的差距,也就是损失函数  L( y,f(x) ) (loss between real y and prediction f(x)).我们要把它降到最小,也就是:
3.jpg

       这个东西怎么求最小?有求和的公式,很复杂。利用算法思想——前向分步算法。前向就是沿着计算方向向前进行,不断加入新的学习器,分步就是一步一步优化总学习器。我们只需要在第m步(m>=1)求解参数β和γ,这就方便使得新加进学习器之后模型损失最小:
4.2_.png

(一步步积累模型,在已有的f(m-1)基础上优化 f(m-1)+βb(x;γ). 显然这是一个greedy strategy)
以下算法描述来自《统计学习方法》
5.jpg

损失函数如何求最小值,这就需要数学解答了。通常没有约束容易求导,会使用梯度下降;有约束条件,常用拉格朗日橙子(杠掉)乘子,转化为对偶问题(dual problem)。
6.jpg

二、提升方法(boost)
当你理解加法模型后,你就知道,加法模型本身就是一种提升方法。
事实上,著名的Adaboost本身就是加法模型的特例。不过Adaboost我更感觉像是从一个学习器出发,根据他的弱点构造互补型学习器,最后将其进行加权线性组合。如何根据他的弱点构造呢?就是将前任做错的事情强迫他更“认真地”去做(加大分类错误样本惩罚权重)。具体的过程很有意思,可以看一看。
提升方法中对于树模型的提升研究较多。对于错误(损失函数)和"有错就改"这个思想的表达的不同分为很多boost算法。如下图所示:
7.jpg

需要说明的是,提升方法太多了,后面可能会讲的模型融合方法bagging、stacking、boosting……这是一个很广泛的理念。
 
不过这里实在是写不下了,我就不写了(费马脸.jpg)
其实整个学习过程就是一个自我教育的过程,机器学习应当归属教育学。
微信阅读不是很深刻,所以留条活路,写得轻松一点。
转载请 联系 注明(字字看来皆是困,一天辛苦不寻常)
不是很烦,可以关注

8.png

 

PRML 笔记(不定期更新)

王开新 发表了文章 • 0 个评论 • 131 次浏览 • 2017-02-23 10:44 • 来自相关话题

基本上算是翻译了,有些部分加了点自己的理解,英文看烦了的可以来看看
贝叶斯与多项式拟合信息论基础决策论基础偏差方差分解支持向量机(Support Vector Machine) 概率论基础1——伯努利分布及其共轭先验 概率论基础2-多元高斯分布的边际分布和条件分布 概率论基础3-高斯分布及其共轭先验条件独立 查看全部

VC维与学习理论

王开新 发表了文章 • 0 个评论 • 91 次浏览 • 2017-01-26 21:22 • 来自相关话题

例行转载
http://keson96.github.io/2017/01/26/2017-01-26-VC-Dimensions-And-Learning-Theory/
 
祝大家新年快乐哈!
2017多多发帖!
例行转载
http://keson96.github.io/2017/01/26/2017-01-26-VC-Dimensions-And-Learning-Theory/
 
祝大家新年快乐哈!
2017多多发帖!

#专题分享会第二期#资料汇总

郜梦蕊 发表了文章 • 0 个评论 • 167 次浏览 • 2016-12-22 10:19 • 来自相关话题

         12月17日晚6:30,信管数据挖掘兴趣小组专题分享会第二期于信息管理学院316教室举办。此次分享会主要由四位同学进行分享。分享内容如下:






         首先由15级硕士王腾飞同学分享word2vec的内容。王腾飞先简单介绍了huffman编码、softmax回归等预备知识的内容,以方便大家更容易理解word2vec的内容。然后王腾飞介绍了词向量和统计语言模型的相关知识,其中统计语言模型中涉及到了模型参数的计算方法:n-gram模型、决策树、最大熵模型、最大熵马尔科夫模型、条件随机场和神经网络等算法。作为获得词向量的方法,LSA、LDA和神经概率语言模型都是常用的模型。接着她介绍了word2vec的两个主要模型:其一是基于Hierarchical Softmax框架的CBOW模型,这个模型包括输入层、投影层和输出层三个层次;其二是基于Hierarchical Softmax框架的Skip-gram模型。通过王腾飞同学的分享,大家对word2vec有了一个很好的认识和了解。
 










         接着,16级硕士史昱天以一个很有意思的“魔鬼的游戏”的故事引入了SVM(支持向量机)算法,很形象地指出了SVM算法是用来干什么的,并通过类比引入了SVM算法里面的数据、分类器、最优化、核函数和超平面等概念。史昱天同学分享了SVM算法的优点,即我们为什么选择SVM算法来解决很多问题。后面是SVM算法的重点:SVM算法是怎么实现的?史昱天同学介绍了假设函数、映射函数、分类函数等知识,并指出了理解SVM算法实现过程的有效方法是记住“最小距离最大化”,这也是是SVM的目的。他接下来介绍了SVM算法求解过程中必不可少的几何距离的概念,以及求解过程主要用到的拉格朗日乘子法。当然,其推导过程涉及到了很多公式,不过在史昱天同学的仔细讲解下,大家对其构造和推导过程有了一定了解。再深入一层次,SVM可以处理非线性可分的数据,可以通过将数据向量映射到高维空间来实现。






         后面,由15级硕士孟凡赛介绍一下LR(逻辑回归)和GBDT(迭代决策树)的主要思想。其中LR是逻辑回归,孟凡赛同学给出了理解其思想的主要方法。对于GBDT,其中GT是决策树,接着分别详细介绍了回归树分类模型和GBDT分类模型的例子。然后介绍了DT和GBDT的区别,即指出了二者在模型过拟合方面的相关内容;LR和GBDT在模型本身、数据需求和特征选择方面的差别,鉴于LR和GBDT的优缺点,将二者融合使用成为一种实用性很强的方法。






         最后,由15级硕士戚尔鹏分享最大熵模型的有关内容。首先,戚尔鹏同学先指出了机器学习中监督学习模型包括概率模型和非概率模型。最大熵模型属于概率模型,其中,“熵”的概念及其公式很重要。然后展示了最大熵模型的推导公式和最大熵原理——“选择熵最大的模型”,并展示了一个最大熵模型的例子。紧接着,又以统计建模形式的角度对最大熵模型进行了介绍,给大家展示了模型的经验分布、特征函数等内容,使得大家对最大熵模型的理解更进一个层次。












感谢四位同学的分享,感谢李新春同学认真细致的会议记录!本次分享会成功举办,会上大家进行了积极地讨论与交流,让我们一起共同学习,共同进步吧!

附上相关资料链接:
【word2vec】
http://121.196.217.92/?/article/45 
【SVM】
http://121.196.217.92/?/article/57 
【LR和GBDT的区别】
http://121.196.217.92/?/article/62 
【最大熵模型】
http://121.196.217.92/?/article/52 

                                                     查看全部
         12月17日晚6:30,信管数据挖掘兴趣小组专题分享会第二期于信息管理学院316教室举办。此次分享会主要由四位同学进行分享。分享内容如下:

目录.PNG


         首先由15级硕士王腾飞同学分享word2vec的内容。王腾飞先简单介绍了huffman编码、softmax回归等预备知识的内容,以方便大家更容易理解word2vec的内容。然后王腾飞介绍了词向量和统计语言模型的相关知识,其中统计语言模型中涉及到了模型参数的计算方法:n-gram模型、决策树、最大熵模型、最大熵马尔科夫模型、条件随机场和神经网络等算法。作为获得词向量的方法,LSA、LDA和神经概率语言模型都是常用的模型。接着她介绍了word2vec的两个主要模型:其一是基于Hierarchical Softmax框架的CBOW模型,这个模型包括输入层、投影层和输出层三个层次;其二是基于Hierarchical Softmax框架的Skip-gram模型。通过王腾飞同学的分享,大家对word2vec有了一个很好的认识和了解。
 
2.jpg


1.jpg


         接着,16级硕士史昱天以一个很有意思的“魔鬼的游戏”的故事引入了SVM(支持向量机)算法,很形象地指出了SVM算法是用来干什么的,并通过类比引入了SVM算法里面的数据、分类器、最优化、核函数和超平面等概念。史昱天同学分享了SVM算法的优点,即我们为什么选择SVM算法来解决很多问题。后面是SVM算法的重点:SVM算法是怎么实现的?史昱天同学介绍了假设函数、映射函数、分类函数等知识,并指出了理解SVM算法实现过程的有效方法是记住“最小距离最大化”,这也是是SVM的目的。他接下来介绍了SVM算法求解过程中必不可少的几何距离的概念,以及求解过程主要用到的拉格朗日乘子法。当然,其推导过程涉及到了很多公式,不过在史昱天同学的仔细讲解下,大家对其构造和推导过程有了一定了解。再深入一层次,SVM可以处理非线性可分的数据,可以通过将数据向量映射到高维空间来实现。

3.jpg


         后面,由15级硕士孟凡赛介绍一下LR(逻辑回归)和GBDT(迭代决策树)的主要思想。其中LR是逻辑回归,孟凡赛同学给出了理解其思想的主要方法。对于GBDT,其中GT是决策树,接着分别详细介绍了回归树分类模型和GBDT分类模型的例子。然后介绍了DT和GBDT的区别,即指出了二者在模型过拟合方面的相关内容;LR和GBDT在模型本身、数据需求和特征选择方面的差别,鉴于LR和GBDT的优缺点,将二者融合使用成为一种实用性很强的方法。

4.jpg


         最后,由15级硕士戚尔鹏分享最大熵模型的有关内容。首先,戚尔鹏同学先指出了机器学习中监督学习模型包括概率模型和非概率模型。最大熵模型属于概率模型,其中,“熵”的概念及其公式很重要。然后展示了最大熵模型的推导公式和最大熵原理——“选择熵最大的模型”,并展示了一个最大熵模型的例子。紧接着,又以统计建模形式的角度对最大熵模型进行了介绍,给大家展示了模型的经验分布、特征函数等内容,使得大家对最大熵模型的理解更进一个层次。

5.jpg


6.jpg



感谢四位同学的分享,感谢李新春同学认真细致的会议记录!本次分享会成功举办,会上大家进行了积极地讨论与交流,让我们一起共同学习,共同进步吧!

附上相关资料链接:
【word2vec】
http://121.196.217.92/?/article/45 
【SVM】
http://121.196.217.92/?/article/57 
【LR和GBDT的区别】
http://121.196.217.92/?/article/62 
【最大熵模型】
http://121.196.217.92/?/article/52 

                                                    

约束优化问题

王开新 发表了文章 • 0 个评论 • 93 次浏览 • 2016-12-20 22:52 • 来自相关话题

例行转载
约束优化与机器学习中不少算法都有关系
 
约束优化问题
 
 
例行转载
约束优化与机器学习中不少算法都有关系
 
约束优化问题